ÃֽŠ°Ô½Ã±Û(WEB)
2018.09.28 / 01:15

¡°µ¥ÀÌÅ͸¦ ÀÚµ¿À¸·Î ¾÷µ¥ÀÌÆ®Çϴ¡± ±¸±Û ½ºÇÁ·¹µå½ÃÆ® ¸¸µå´Â ¹æ¹ý

GAScripter
Ãßõ ¼ö 192

½ºÇÁ·¹µå½ÃÆ®¸¦ »ç¿ëÇؼ­ ±âÃÊÀûÀÎ µ¥ÀÌÅ͸¦ ÃßÀûÇÏ´Â ÀÏÀº ¾ÆÁÖ °£´ÜÇÏ´Ù. ¸ÅÀÏ, ¸ÅÁÖ ¶Ç´Â ¸Å´Þ ÀØÁö ¾Ê°í µ¥ÀÌÅ͸¦ ¾÷µ¥ÀÌÆ®ÇÏ¸é µÈ´Ù. ÇÏÁö¸¸ °£´ÜÇÑ ÀÚµ¿È­ ÅøÀ» »ç¿ëÇÏ¸é ±× ±ÍÂúÀº ¼öÀÛ¾÷Á¶Â÷ ÇÊ¿ä ¾ø°Ô µÈ´Ù.

ÀÚµ¿À¸·Î ¾÷µ¥ÀÌÆ®µÇ´Â ±¸±Û ½ºÇÁ·¹µå½ÃÆ®¸¦ ¸¸µé¾î µ¥ÀÌÅ͸¦ ÃßÀûÇÏ´Â ¹æ¹ýÀ» ´Ü°èº°·Î ¾Ë¾Æº¸ÀÚ. ÀÌ ¿¹¿¡¼­´Â ¡°Æ®À§ÅÍ Æȷοö ¼ö¡±¸¦ »ç¿ëÇÏÁö¸¸ Äڵ带 Á¶±Ý¸¸ ¼öÁ¤ÇÏ¸é ´Ù¸¥ µ¥ÀÌÅ͵µ ¼Õ½±°Ô °¡Á®¿Í ÀúÀåÇÒ ¼ö ÀÖ´Ù.



±¸±Û ½ºÇÁ·¹µå½ÃÆ® ¸¸µé±â
±¸±Û µå¶óÀ̺ê·Î °¡¼­ ºó ½ºÇÁ·¹µå½ÃÆ®¸¦ ¸¸µç´Ù(±¸±Û °èÁ¤ÀÌ ¾ø´Â °æ¿ì ¸ÕÀú °èÁ¤À» ¸¸µé¾î¾ß ÇÔ). ¿øÇÏ´Â Á¦¸ñÀ» ÀÔ·ÂÇϸé Áغñ´Â ³¡ÀÌ´Ù. ±âº» Á¦¸ñÀº ¡°Á¦¸ñ ¾ø´Â ½ºÇÁ·¹µå½ÃÆ®¡±Áö¸¸ Ŭ¸¯Çؼ­ ¾Ë¾Æº¸±â ½¬¿î Á¦¸ñÀ¸·Î º¯°æÇÒ ¼ö ÀÖ´Ù.

Ŭ¸¯Çϸé È®´ë
Ŭ¸¯Çϸé È®´ë
Ŭ¸¯Çϸé È®´ë



ÇÔ¼ö Ãß°¡Çϱâ
½ºÇÁ·¹µå½ÃÆ® ÇÔ¼ö´Â ¼öÇÐ °è»ê ¿Ü¿¡µµ ¸¹Àº ÀÏÀ» ÇÒ ¼ö Àִµ¥ ±× Áß¿¡´Â URL¿¡¼­ µ¥ÀÌÅ͸¦ ÃßÃâÇÏ´Â ±â´Éµµ ÀÖ´Ù. ÃßÀûÇÏ·Á´Â ÆäÀÌÁö°¡ µÎ °³ ÀÌ»óÀÏ °æ¿ì¸¦ À§ÇØ(º»ÀÎ ÆäÀÌÁö ¿Ü¿¡ °æÀïÀÚ ÆäÀÌÁö±îÁö) ¼Õ½±°Ô È®ÀåÀÌ °¡´ÉÇϵµ·Ï ¼³Á¤ÇØ º¸ÀÚ.

ù ¹ø° ¿­¿¡´Â ÃßÀûÇÒ Æ®À§ÅÍ °èÁ¤À» ³ª¿­ÇÑ´Ù. µÎ ¹ø° ¿­¿¡´Â Æ®À§ÅÍ À¥ ÀÎÅÙÆ®(Web Intent) ÆäÀÌÁö¸¦ À§ÇÑ °ø½ÄÀÌ µé¾î°£´Ù.

Æ®À§ÅÍ À¥ ÀÎÅÙÆ® ÆäÀÌÁö´Â ¿¹¸¦ µé¾î https://twitter.com/Computerworld¿Í °°Àº URLÀ» ÅëÇØ Ã£À» ¼ö ÀÖ´Â HTML·Î ±¸¼ºµÈ º¹ÀâÇÑ ÇÁ·ÎÇÊ ÆäÀÌÁö ´ë½Å ÀÚ½ÅÀÇ ÆäÀÌÁö¿¡ Æ®À§ÅÍ ¸ðµâÀ» ³ÖÀ¸·Á´Â °³¹ßÀÚ¸¦ À§ÇØ °í¾ÈµÈ ÆäÀÌÁö´Ù. °ø½ÄÀº https://twitter.com/intent/user?screen_name=TWITTERHANDLEÀ̹ǷΠ½ºÇÁ·¹µå½ÃÆ® °ø½ÄÀº ´ÙÀ½°ú °°´Ù.

=CONCAT("https://twitter.com/intent/user?screen_name=",A2)

µ¥ÀÌÅÍ ÇàÀÌ µÎ °³ ÀÌ»óÀÎ °æ¿ì ³ª¸ÓÁö URL ¿­·Î Ŭ¸¯Çؼ­ ²ø¾î´Ù ³õ´Â´Ù.

Ŭ¸¯Çϸé È®´ë
Ŭ¸¯Çϸé È®´ë
Ŭ¸¯Çϸé È®´ë

½ºÇÁ·¹µå½ÃÆ® ÇÔ¼ö ¾²±â
ÀÌ»óÀûÀ¸·Î °¡Àå ÁÁÀº ¹æ¹ýÀº Æ®À§ÅÍ API¸¦ »ç¿ëÇØ ÀÌ µ¥ÀÌÅ͸¦ °¡Á®¿À´Â °ÍÀÌ´Ù. ±×·¯³ª Æ®À§ÅÍ API¸¦ ºñ·ÔÇØ ÀÎÁõÀÌ ÇÊ¿äÇÑ API¸¦ »ç¿ëÇÏ·Á¸é ½ºÇÁ·¹µå½ÃÆ®¿¡ OAuth2 ÀÎÁõÀ» ¼³Á¤ÇØ¾ß ÇÑ´Ù. ÀÌ ³»¿ëÀº º» ¾È³» ±â»çÀÇ ¹üÀ§¸¦ ¹þ¾î³ª¹Ç·Î ´Ù·çÁö ¾Ê°ÚÁö¸¸, °ü½ÉÀÌ ÀÖ´Ù¸é ±¸±ÛÀÇ ±¸±Û ¾Û ½ºÅ©¸³Æ®¿ë OAuth2 ¶óÀ̺귯¸®¸¦ Âü°íÇ϶ó.

ÀÌ ±â»ç¿¡¼­´Â ½¬¿î ¹æ¹ýÀ¸·Î À¥ ÀÎÅÙÆ® ÆäÀÌÁö¿¡¼­ Æȷοö ¼ö¸¦ °¡Á®¿À´Â ¹æ¹ýÀ» »ç¿ëÇØ º¸ÀÚ. ±¸±Û ½ÃÆ®ÀÇ IMPORTXML ÇÔ¼ö¸¦ »ç¿ëÇϸé XPath Äõ¸®¸¦ »ç¿ëÇؼ­ ƯÁ¤ HTMLÀ» ÃßÃâÇÒ ¼ö ÀÖ´Ù.
XPath´Â ¹è¿ì±â º¹ÀâÇÑ ¾ð¾îÁö¸¸ SelectorGadgetÀ» »ç¿ëÇÏ¸é ¸¶¿ì½º·Î °¡¸®Å°°í Ŭ¸¯ÇÏ´Â °£´ÜÇÑ ¹æ¹ýÀ¸·Î HTML ÆäÀÌÁö¿¡¼­ ƯÁ¤ µ¥ÀÌÅÍ¿¡ ´ëÇÑ XPath¸¦ ãÀ» ¼ö ÀÖ´Ù.

XPath Äõ¸®¿¡ ´ëÇÑ SelectorGadgetÀÇ °á°ú´Â //*[contains(concat( " ", @class, " " ), concat( " ", "count", " " ))]//*[contains(concat( " ", @class, " " ), concat( " ", "alternate-context", " " ))]ÀÌ´Ù. ±¸±Û ½ÃÆ® ÇÔ¼ö´Â Å«µû¿ÈÇ¥¸¦ »ç¿ëÇؼ­ Àμö¸¦ ´ÝÀ¸¹Ç·Î, ¸ÕÀú XPathÀÇ ¸ðµç Å«µû¿ÈÇ¥¸¦ ÀÛÀºµû¿ÈÇ¥·Î ¹Ù²ã¾ß ÇÑ´Ù. ±× ´ÙÀ½ Æȷοö ¿­¿¡ ´ëÇÑ ´ÙÀ½°ú °°Àº °ø½ÄÀ» ÀÔ·ÂÇÑ´Ù.

=ImportXML(B2, "//dl[(((count(preceding-sibling::*) + 1) = 1) and parent::*)]//*[contains(concat( ' ', @class, ' ' ), concat( ' ', 'alternate-context', ' ' ))]")

¸¶Âù°¡Áö·Î ³ª¸ÓÁö ¿­·Î Ŭ¸¯Çؼ­ ²ø¾î¿Â´Ù.

Ŭ¸¯Çϸé È®´ë
Ŭ¸¯Çϸé È®´ë
Ŭ¸¯Çϸé È®´ë



ºÒ·¯¿Â µ¥ÀÌÅÍ ÀÚµ¿ ÀúÀå

C ¿­ÀÇ ³ª¸ÓÁö ºÎºÐ¿¡¼­ ÀÌ °ø½ÄÀ» »ç¿ëÇϸé ÃßÀûÇÏ´Â ´Ù¸¥ °èÁ¤¿¡ ´ëÇÑ °ªÀÌ ÀÚµ¿À¸·Î ä¿öÁö´Âµ¥, ÀÌ °ªÀº ÀúÀåµÇÁö ¾Ê°í ½ÃÆ®¸¦ ¿­ ¶§¸¶´Ù ¹Ù²ï´Ù.

È÷½ºÅ丮 µ¥ÀÌÅ͸¦ ÇöÀç ½ÃÆ®ÀÇ µðÀÚÀÎ ±×´ë·Î º¸°üÇÏ·Á¸é °ªÀ» ´Ù¸¥ ¿­ ¶Ç´Â ½ºÇÁ·¹µå½ÃÆ®¿¡ ¼öµ¿À¸·Î º¹»çÇؼ­ ºÙ¿© ³Ö¾î¾ß ÇÑ´Ù. ÇÏÁö¸¸ ±×·¸°Ô Çϸé Àç¹Ì°¡ ¾ø´Ù. ´ë½Å »õ ÇÔ¼ö¸¦ ¸¸µé¾î¼­ 1) ù ¹ø° ºó ¿­À» ã°í, 2) ¿­ÀÇ ·¹À̺íÀ» µ¥ÀÌÅÍ ÃßÃâ ³¯Â¥·Î ÁöÁ¤ÇÏ°í, 3) C ¿­ÀÇ °ªÀ» ù ¹ø° ºó ¼¿¿¡ º¹»çÇØ º¸ÀÚ.

Ŭ¸¯Çϸé È®´ë
Ŭ¸¯Çϸé È®´ë
Ŭ¸¯Çϸé È®´ë


 


µ¥ÀÌÅÍ ÀúÀå ÇÔ¼ö ¾²±â
µ¥ÀÌÅ͸¦ ÀúÀåÇÏ·Á¸é ½ºÇÁ·¹µå½ÃÆ® ÇÔ¼ö¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. ½ºÇÁ·¹µå½ÃÆ®¿ë ÇÔ¼ö¸¦ ¸¸µé·Á¸é µµ±¸(Tools) > ½ºÅ©¸³Æ® ÆíÁý±â(Script Editor)·Î À̵¿ÇÑ´Ù. myFunctionÀ̶ó´Â ±âº» ÇÔ¼ö°¡ Ç¥½ÃµÈ´Ù.



µ¥ÀÌÅÍ ÀúÀå
µ¥ÀÌÅÍ°¡ °ËÃâµÇ¾î ÀúÀåµÈ ½ÃÁ¡À» ¾Ë¾Æ¾ß ÇϹǷΠÇÔ¼ö°¡ ½ÇÇàµÇ´Â ÇöÀç ³¯Â¥¸¦ ù ¹ø° ºó ¿­ÀÇ 1¹ø Çà¿¡ ³Ö´Â´Ù.

sheet(1,numColumns + 1).setValue(new Date());

ÀÌ ¸í·ÉÀº µ¥ÀÌÅÍ°¡ ¾ø´Â ù ¹ø° ¿­ÀÇ 1¹ø Çà °ªÀ»(¼¿ 1, numColumns + 1) ÇöÀç ³¯Â¥ ¹× ½Ã°£À¸·Î ¼³Á¤ÇÑ´Ù.

±× ´ÙÀ½ ¿ÞÂÊ¿¡ for loop¸¦ »ç¿ëÇÏ¿© ÃֽŠµ¥ÀÌÅÍ·Î ¿­ÀÇ ³ª¸ÓÁö ¼¿À» ¼øȯÇÑ´Ù.

Àüü ÇÔ¼ö ÄÚµå:
function storeFollowers(){
 var sheet = SpreadsheetApp.getActiveSheet();
 var datarange = sheet.getDataRange();
 var numRows = datarange.getNumRows();
 var numColumns = datarange.getNumColumns();
 var nextColumn = numColumns + 1;
 sheet.getRange(1, nextColumn).setValue(new Date());
 for (var i=2; i <= numRows; i++){
   var numLikes = sheet.getRange(i, 3).getValue();
   sheet.getRange(i, numColumns + 1).setValue(numLikes);
 }
}


Ŭ¸¯Çϸé È®´ë
Ŭ¸¯Çϸé È®´ë
Ŭ¸¯Çϸé È®´ë



Æ®À§ÅÍ Æȷοö¸¦ ÀúÀåÇϱâ À§ÇÑ ÇÔ¼ö

storeFollowers()·Î ¹Ù²Ù°í ´ÙÀ½ Äڵ带 »ç¿ëÇÑ´Ù.

var sheet = SpreadsheetApp.getActiveSheet();
var datarange = sheet.getDataRange();
var numRows = datarange.getNumRows();
var numColumns = datarange.getNumColumns();
var nextColumn = numColumns + 1;


À̹ÌÁöÀÇ ÁÖ¼®Àº °¢ ¶óÀÎÀÌ ¼öÇàÇÏ´Â ÀÛ¾÷À» º¸¿©ÁØ´Ù.

ÀÌÁ¦ ÀúÀåÇÏ¸é ½ºÅ©¸³Æ® ÇÁ·ÎÁ§Æ®ÀÇ À̸§À» ÁöÁ¤Ç϶ó´Â ¸Þ½ÃÁö°¡ Ç¥½ÃµÈ´Ù.

ÇÔ¼ö ÀÚµ¿ ½ÇÇà ¿¹¾àÇϱâ
¸¶Áö¸· ´Ü°è´Â »õ·Î¿î µ¥ÀÌÅÍ ÀúÀå ÇÔ¼ö ½ÇÇàÀ» ¿¹¾àÇÏ´Â °ÍÀÌ´Ù. ½Ã°è ¾ÆÀÌÄÜÀ» Ŭ¸¯Çؼ­ ÇöÀç ÇÁ·ÎÁ§Æ®ÀÇ Æ®¸®°Å¿Í ¡°¿©±â¸¦ Ŭ¸¯ÇÏ¿© Áö±Ý Ãß°¡(Click here to add one now)¡± ¸µÅ©¸¦ Ç¥½ÃÇÑ´Ù. ½ºÇÁ·¹µå½ÃÆ®¸¦ ¼öµ¿À¸·Î ¿­ ¶§¸¶´Ù ÇÔ¼ö°¡ ½ÇÇàµÇµµ·Ï Çϰųª(Æ®¸®°Å À̺¥Æ®¸¦ ¡°½ºÇÁ·¹µå½ÃÆ®¿¡¼­(From spreadsheet)¡±·Î ¼±ÅÃ) ÀÚµ¿ ÀÏÁ¤(À̺¥Æ®¸¦ ¡°½Ã°£¿¡ µû¶ó(Time-driven)¡±·Î ¼±ÅÃ)À¸·Î ¸Å½Ã°£, ¸ÅÀÏ, ¸ÅÁÖ ¶Ç´Â ¸Å¿ù ½ÇÇàµÇµµ·Ï ÇÏ¸é µÈ´Ù. À̸¦ À§Çؼ­´Â ±¸±Û °èÁ¤¿¡¼­ ÀÎÁõÀÌ ÇÊ¿äÇÒ ¼ö ÀÖ´Ù.

ÀÌ°ÍÀ¸·Î ½º½º·Î ¾÷µ¥ÀÌÆ®µÇ°í ÀÚµ¿À¸·Î µ¥ÀÌÅ͸¦ ¼öÁýÇØ ÀúÀåÇÏ´Â ½ºÇÁ·¹µå½ÃÆ®°¡
¿Ï¼ºµÆ´Ù. editor@itworld.co.kr