åçããé»è©±çªå·ãæåèªèããã¢ããªä½ã£ãã
ä½ã£ããã®
ã«ã¡ã©ã§æ®å½±ããé»è©±çªå·ç»åãèªèãã¦é»è©±ããããããã¹ããç¨Webã¢ããªã§ãã

ä½¿ãæ¹
ãã¡ã¤ã«é¸æãã¿ã³ãæ¼ãã¦é»è©±çªå·ã®æ°åãåã£ã¦ããåçãæå®ãã¾ãããã®ã¨ããåçãæ®ãããé¸ã¶ã¨ã«ã¡ã©ã§æ®å½±ããç»åãä¿åããã«ãã®ã¾ã¾ä½¿ããã¨ãã§ãã¾ãã
ã
ç»åã鏿ãããããã«ãµã¼ãã«éä¿¡ããæ°ç§ã§çµæãè¿ãã¾ããç»åã®ä¸ã«é»è©±çªå·ã¨è§£éã§ããæååãããã°ç»é¢ä¸ã«ãªã³ã¯ã¨ãã¦è¡¨ç¤ºããã¾ãããã¾ãã¾ãªãã©ã³ããææ¸ãæåãããã¨ããæãã«èªèãã¾ãã
ã
ãªã³ã¯ãã¿ããããã¨çºä¿¡ãã¤ã¢ãã°ãåºã¦é»è©±ãããããã¾ã*1ãã¾ãã¯ç¡æã試ãã»ããããã
ã
ã
ã
ç»é¢ä¸ã®å
±æãã¿ã³ãã¿ãããã¦ããã¼ã ç»é¢ã«è¿½å ãã§ã¢ã¤ã³ã³ãä½ã£ã¦ããã¨ãã¤ãã£ãã¢ããªã®ããã«ããèµ·åã§ãã¦ä¾¿å©ã
Â
ã¦ã¼ã¹ã±ã¼ã¹
ãã¨ãã°ããªãã®æ´æ¿¯æ©ãå¤ä¸ã«æ°´æ¼ãããã¨ãããããããµãã¼ãæ¥è ã®é»è©±åä»ã¯10æ-17æãªã®ã ãããã§ããªãã¯ã¨ããããé£çµ¡å ã®é»è©±çªå·ãã¡ã¢ä»£ããã«åçã«æ®ã£ã¦ããã
ç¿æ¥ãå¤åå ã§ç©ºãæéã«æ¥è ã¸é»è©±ãããããã¨ãã¦ãããªãã¯ã¯ãã¨å°ãããªãã¨é©ãã¹ããã¨ã«ãiPhoneã¯åçã©ã¤ãã©ãªãè¦ãªããé»è©±ãããããã¨ãã§ããªãã®ã ãæè¿ã®iPadã®ããã«2ç»é¢åå²ãããã¨ãã§ãããã©ããªãã¨ããããã¨é»è©±ã®ãã¼ãããã表示ããã¨åçãé ãã¦ãã¾ãããããåé«ããã¥ã¼ãã³ã¤ã³ã¿ãã§ã¼ã¹ã¬ã¤ãã©ã¤ã³ãããããä¸çã®é¸æãã人çã«ç²ããããªãã¯å¤©ãä»°ããæãã¤ãéãåªè©ã®è¨èãå«ã³ç¶ãããã¨ã ããã ã
ã
åçã«æ®ã£ãé»è©±çªå·ã«ããããå ´é¢ã¯ããã¨ããããã«æãã¾ããä¸è¨ã®ãããªå¤§åå®¶é»ã®ãµãã¼ããèªè²©æ©ã§ååãåºã¦ããªããã©ãã«ãç§»åä¸ã«æ°ã«ãªãçæ¿åºåãè¦ãããã¨ãããã¬ãCMã®é»è©±çªå·ãªã©ãããããä½ãã®äºæ
ã§ãã®å ´ã§ã¯é»è©±ã§ãããã«ã¡ã©ã§ã¡ã¢ãã¦ããã¦å¾ã§é£çµ¡ãããããªç¶æ³ã§ããããã¦ãããã¯1åãããããã¶ããã使ããªããé»è©±å¸³ã«ç»é²ããã«ã¯ã¡ãã£ã¨èºèºãããããªçªå·ã§ãã
以åãå°ãæã¦ã¦ãã¤ãã¿ã¼ã§ä½ãè¯ãæ¹æ³ããªããåã£ã¦ã¿ã¾ããã
ãç·©åãiPhoneã§ãé»è©±çªå·ãæ¸ãããç´ã®åçãè¦ãªããé»è©±ãããæ¹æ³ã
â aike (@aike1000) 2018å¹´10æ12æ¥
ãã®ã¨ãçµå浩ããããããã ããã¢ã¤ãã¢ã¯ãå ¬å¼ã¡ã¢ã¢ããªã«é»è©±çªå·ãæ¸ãã¨èªåã§ãªã³ã¯ã«ãªããã¨ãå©ç¨ãã¦ãã¡ã¢ã«è²¼ãä»ããåçãè¦ãªããçªå·ãã¿ã¤ããããã¨ãããã®ã§ããã
ã§ãã¾ãããåçããã·ã§ã¢ã¡ãã¥ã¼ã§ãã¡ã¢ã«è¿½å ããã¦ãã¡ã¢å¸³ã«ç§»ã£ã¦ãåçè¦ãªããã¿ã¤ããããã¦çªå·ãã¿ããã
â çµå浩 (@hyuki) 2018å¹´10æ12æ¥
ãã®æ¹æ³ã§ããã°10æ¡ç¨åº¦ã®æ°åãçæè¨æ¶ããå¿
è¦ããªãã®ã§ããªã楽ã«ãªãã¾ããã¨ã¯ãããå
¨æ¡æã¡ç´ãã®ã¯ããå°ããªãã¨ããªããªããã®ãã
ã
ã
æè¿è©±é¡ã®Googleã¬ã³ãºã¯ãã«ã¡ã©æ åãåçããããã¹ããã¯ããããªãé«åº¦ãªå種æ
å ±ã®ç»åèªèãããããã§ããiPhoneã§ãGoogleãã©ãã¢ããªã®ä¸æ©è½ã¨ãã¦ä½¿ããã¿ããã§ãããã ããã®ããã«iOSæ¨æºã¨ã¯ç°ãªãåçã©ã¤ãã©ãªç®¡çã¢ããªãå
¥ããã®ãå¤§ä»°ãªæ°ããã¾ãã*2
ã
ã
ã¤ã¾ããã¼ãããã»ããã®ã¯é»è©±çªå·ã ãèªèããGoogleã¬ã³ãºã®åæ©è½çãªã®ã§ãããããªããã§ãé»è©±çªå·å°ç¨Googleã¬ã³ãºãã©ãï¼æãããããªã®ã§ä»®ç§°ï¼ããç¥ãã¦ãé»è©±ã¬ã³ãºï¼ä»®ï¼ããä½ãã¾ããã
ã
ã
ã
使ã£ãæè¡
Reactã¯ãã¾ããªãã¨ãããåå¼·ä¸ãªã®ã§ã¨ãããã使ã£ã¦ã¿ãæããæ©è½ã追å ãããã³ã«è¤éã«ãªã£ã¦ããã¢ããªããDOMã£ã½ãåä½ã§ã³ã³ãã¼ãã³ãåãããã¨ã§èãããã¨ãã·ã³ãã«ã«ä¿ã¤ãã¨ãã§ããã®ã¯æ £ããã¨å¿«é©ã§ãããæ £ããã¾ã§ã«3å¹´ãããã¾ãããã
Cloud Vision APIã¯ãGoogleã®æ©æ¢°å¦ç¿æè¡ã§ç»åã«ä½ãåã£ã¦ããããèªèãã¦ããããã¡ããã¡ããããAPIãä»åã®ã¢ããªã¯Cloud Vision APIã«ã¬ã¯ãã¤ããã ãã®200è¡ãããã®ã·ã³ãã«ãªããã°ã©ã ã§ãã APIã«éãå¦çã¯ãã®è¾ºã®è¨äºãåèã«ã³ãããã¼ãã®äººçã ãããã³ããã Â
let body = { requests: [ {image: {content: base64string}, features: [{type: 'TEXT_DETECTION'}]} ] }; let xhr = new XMLHttpRequest(); const url = 'https://vision.googleapis.com/v1/images:annotate?key='+key; xhr.open('POST', url, true); xhr.setRequestHeader('Content-Type', 'application/json'); const p = new Promise((resolve, reject) => { xhr.onreadystatechange = () => { if (xhr.readyState !== XMLHttpRequest.DONE) return; if (xhr.status >= 400) return reject({message: `Failed with ${xhr.status}:${xhr.statusText}`}); resolve(JSON.parse(xhr.responseText)); }; }) xhr.send(JSON.stringify(body));
ã
èªèçµæã¯JSONã§è¿ã£ã¦ãã¾ããæççãªè¨èã®åã端ãå¤ãã®ã§ãããããæå³ã®ããåèªãè¦ã¤ãåºãã®ãè ã®è¦ãã©ããã§ããããã§ã¯ãæåã«æ£è¦è¡¨ç¾ã使ã£ã¦ãæ°åããã¤ãã³ãã«ãã³ãã¹ãã¼ã¹ã並ãã§ãããé»è©±çªå·ã£ã½ãæååã¨å¤æãã¦æ½åºãã¦ãæ¬¡ã«æ½åºããæååããããã«æ°åã ãæãåºãã¦10ã11æ¡ãªãé»è©±çªå·ã¨æçµå¤æãã¦ãã¾ãã
const arr_annotations = json.responses[0].textAnnotations; const tel_numbers = []; arr_annotations.forEach((item) => { // é«éåã®ããã«çãããæååã¯ããã§ç¡è¦ãã if (item.description.length >= 10) { const str = item.description; // æ°åããã¤ãã³ãã«ãã³ãã¹ãã¼ã¹ã®é£ç¶ãé»è©±çªå·ã¨ã¿ãªã const match_str = str.match(/[\d\-() ]+/g); // é»è©±çªå·ãåå¨ããã if (match_str !== null) { // é»è©±çªå·ãè¤æ°åå¨ããå ´åãèæ ®ãã¦ã«ã¼ã match_str.forEach((item) => { // ãã¤ãã³ãã«ãã³ãã¹ãã¼ã¹ãåé¤ãã¦æ°åã®ã¿ãå¾ã const num = item.replace(/[-() ]/g, ''); // æ°åã®ã¿ã§10ã11æ¡ã®ãã®ãé»è©±çªå·ã¨ãã¦é åã«ãã if ((num.length >= 10) && (num.length <= 11)) { tel_numbers.push({str:item, num:num}); } }); } } });
ã
æ°åã®é ã«âtel:"ã¨ããæååããã£ã¤ãã¦ãªã³ã¯ã«ããã¨é»è©±ãããããªã³ã¯ã«ãªãã¾ãã
const hash = {}; tel_numbers.forEach(item => { // éè¤ãã§ã㯠if (!hash[item.num]) { hash[item.num] = true; const parent = document.querySelector('#resultarea'); const li = document.createElement('li'); const a = document.createElement('a'); a.innerText = item.str; a.href = 'tel:' + item.num; li.appendChild(a); parent.appendChild(li); } });
ããã¾ãã
ã Â
é»è©±ã¬ã³ãºãGithub ã
ã¯ã½ã¢ã㪠Advent Calendar 2018
ã
ã
ã
ã
- åºç社/ã¡ã¼ã«ã¼: 5pb.
- çºå£²æ¥: 2018/09/20
- ã¡ãã£ã¢: Video Game
- ãã®ååãå«ãããã°ãè¦ã
*1:é£ç¶ãã¦å©ç¨ããã¨ããã®Webãµã¤ãããèªåçã«é»è©±ãããããã¨ã¯ç¦æ¢ããã¦ãã¾ããã¨ãããã¤ã¢ãã°ãåºããã¨ãããã¾ããããã®å ´åã¯ãé話ã許å¯ãããã°çºä¿¡ã§ãã¾ã
*2:追è¨ï¼ãã®è¨äºãæç¨¿ãã3æ¥å¾ã«iOSåãGoogleã¬ã³ãºã®æä¾ãéå§ããã¨å ¬å¼ã¢ãã¦ã³ã¹ãããã¾ãã https://japan.cnet.com/article/35130001/ é å¼µã£ã¦ä½ã£ãã¢ããªã3æ¥ã§å½¹ç®ãçµããæ°æã¡ãçããã¡ãã£ã¨ã§ããã®ã§æ³åãã¦ã¿ã¦ãã ãã