こくちーずから申込者のアイコンをダウンロードし、座席表用のアカウントつき画像を作成する座席表職人のためのGroovyスクリプト
確かに、アイコンをダウンロードして、Twitterアカウントを入力するのが面倒。
特に人数が多いと時間もかかったりする。
間違えたりするし。
告知サイトは、有名どころだけでも、ATND、こくちーず、Zussar、PARTAKEなどがある。
僕が参加しているイベントは、こくちーずが多いのなので、まずはこくちーずで楽できるようにしたい。
やりたいこと
- こくちーずの申し込みリストにあるアイコンをダウンロードする。
- ダウンロードしたアイコンに、下部にTwitterのusernameを表示した画像を作成する
対処
- Webサイトをスクレイピングすることにした。
コード
@Grab("net.sourceforge.nekohtml:nekohtml:1.9.14") import groovy.swing.j2d.* import javax.imageio.*; import org.cyberneko.html.parsers.SAXParser if (!args || args.size() !=1) { println "usge:groovy kokucheese.groovy http://kokucheese.com/event/subscriptions/XXXX/" System.exit(1) } def parser = new XmlSlurper(new SAXParser()) def html = parser.parse(args[0]) def rows = html.'**'.findAll{ it.name() == "TR" } def listFile = new File("list.txt").newWriter() rows.each{ id = it.children().A.text() imgSrc = it.children().A.IMG.@src.toString() if (imgSrc != "") { def url = new URL(imgSrc) def file = new File("@${id}.png") url.withInputStream {input -> file.bytes = input.bytes } img = ImageIO.read(file) gr = new GraphicsRenderer() gr.renderToFile("@${id}.png", img.width + 100, img.height + 20){ antialias("on") image(image: img, x:0,y:0) font(new java.awt.Font('Tahoma', java.awt.Font.BOLD, 15)) text( x:0, y:img.height + 5, text: "@${id}", borderColor: no, fill: 'blue') } listFile.writeLine("@${id}") } } listFile.close()
解析しているHTMl
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!-- Template Design by TheWebhub.com | http://www.thewebhub.com | Released for free under a Creative Commons Attribution-Share Alike 3.0 Philippines --> <html xmlns="http://www.w3.org/1999/xhtml"> 省略 <body> 省略 <table> <tr> <th width="10">No</th> <th width="70">お名前</th> <th width="50">Twitter</th> <th>メッセージ</th> <th width="60">申込日時</th> </tr> <tr> <td>1</td> <td class="">nobusue</td> <td class=""> <a href="http://twitter.com/nobusue" target="_blank"><img src="http://img.tweetimag.es/i/nobusue_n" /><br />nobusue</a> </td> <td class="">これは見逃せない! <br />今年はDevOps元年になりそうですね。</td> <td class="">2012/02/09 09:28:18</td> </tr> <tr> <td>2</td> <td class="">cointoss1973</td> <td class=""> <a href="http://twitter.com/cointoss1973" target="_blank"><img src="http://img.tweetimag.es/i/cointoss1973_n" /><br />cointoss1973</a> </td> <td class="">今月は原著に目を通したいと思います。 <br /></td> <td class="">2012/02/09 10:43:58</td> </tr> <tr> <td>4</td> <td class="">inda_re</td> <td class=""> <a href="http://twitter.com/inda_re" target="_blank"><img src="http://img.tweetimag.es/i/inda_re_n" /><br />inda_re</a> </td> <td class="">リア充に継続的に爆弾をデリバリーすると聞いて。</td> <td class="">2012/02/09 11:34:27</td> </tr> <tr> <td>5</td> <td class="">shinyaa31</td> <td class=""> <a href="http://twitter.com/shinyaa31" target="_blank"><img src="http://img.tweetimag.es/i/shinyaa31_n" /><br />shinyaa31</a> </td> <td class="">少し先の話なので予定は未定ですが・・・参加出来た暁には名古屋の美味いもん食っておきたいところです。</td> <td class="">2012/02/09 11:38:25</td> </tr> <tr> <td>7</td> <td class="">irof</td> <td class=""> <a href="http://twitter.com/irof" target="_blank"><img src="http://img.tweetimag.es/i/irof_n" /><br />irof</a> </td> <td class="">よろしくお願いします。</td> <td class="">2012/02/09 12:31:17</td> </tr> <tr> <td>8</td> <td class="">pocketberserker</td> <td class=""> <a href="http://twitter.com/pocketberserker" target="_blank"><img src="http://img.tweetimag.es/i/pocketberserker_n" /><br />pocketberserker</a> </td> <td class="">よろしくお願いします</td> <td class="">2012/02/25 01:00:49</td> </tr> <tr> <td>9</td> <td class="">kiy0taka</td> <td class=""> <a href="http://twitter.com/kiy0taka" target="_blank"><img src="http://img.tweetimag.es/i/kiy0taka_n" /><br />kiy0taka</a> </td> <td class="">名古屋初心者ですが、どうぞよろしくお願いいたします。</td> <td class="">2012/03/01 09:20:27</td> </tr> <tr> <td>11</td> <td class="">Tsutomu Takeuchi</td> <td class=""> <a href="http://twitter.com/nightmare_tim" target="_blank"><img src="http://img.tweetimag.es/i/nightmare_tim_n" /><br />nightmare_tim</a> </td> <td class="">転職前の知識アップに!ぜひ参加させてください。それにしても豪華なメンバー!!</td> <td class="">2012/03/20 00:19:56</td> </tr> <tr> <td>13</td> <td class="">natsu_nanana</td> <td class=""> <a href="http://twitter.com/natsu_nanana" target="_blank"><img src="http://img.tweetimag.es/i/natsu_nanana_n" /><br />natsu_nanana</a> </td> <td class="">色々と検討した結果、やはりこちらに参加します!お手数かけてすみません</td> <td class="">2012/03/27 18:13:39</td> </tr> <tr> <td>14</td> <td class="">いじゅういん</td> <td class=""> <a href="http://twitter.com/kei10in" target="_blank"><img src="http://img.tweetimag.es/i/kei10in_n" /><br />kei10in</a> </td> <td class="">自動化が好きです.</td> <td class="">2012/03/27 19:06:35</td> </tr> <tr> <td>15</td> <td class="">SG</td> <td class=""> <a href="http://twitter.com/smallgeek" target="_blank"><img src="http://img.tweetimag.es/i/smallgeek_n" /><br />smallgeek</a> </td> <td class="">自動化したいです。よろしくお願いします</td> <td class="">2012/03/27 23:59:34</td> </tr> <tr> <td>17</td> <td class="">まえかわひろし</td> <td class=""> <a href="http://twitter.com/Posaune" target="_blank"><img src="http://img.tweetimag.es/i/Posaune_n" /><br />Posaune</a> </td> <td class="">多分海外出張用のスーツケースを抱えていくので、場所取るかもしれませんが、ご容赦ください。</td> <td class="">2012/03/31 01:11:09</td> </tr> <tr> <td>18</td> <td class="">近藤大介</td> <td class=""> <a href="http://twitter.com/gim_kondo" target="_blank"><img src="http://img.tweetimag.es/i/gim_kondo_n" /><br />gim_kondo</a> </td> <td class="">無事書籍を入手できましたので申し込みます。 <br />当日までにどれだけ読めるか判りませんが、よろしくお願いします。</td> <td class="">2012/04/16 21:15:11</td> </tr> <tr> <td>19</td> <td class="">akuraru</td> <td class=""> <a href="http://twitter.com/akuraru" target="_blank"><img src="http://img.tweetimag.es/i/akuraru_n" /><br />akuraru</a> </td> <td class="">Ustしに行きます。よろしくお願いします。</td> <td class="">2012/04/20 19:30:48</td> </tr> </table> 省略
準備
http://groovy.codehaus.org/GraphicsBuilder
からGraphicsBuilderをダウンロードして、GROOVY_HOME/bin、GROOVY_HOME/lib
にコピーする。
grabでは解決できそうにないようだ。
実行方法
groovy -c UTF-8 ..\kokucheese.groovy http://kokucheese.com/event/subscriptions/27710/
実行結果
- 作成した座席表用の画像
これをGoogle Docsの図形描画に貼り付ければいい。
- list.txtの内容
@nobusue @cointoss1973 @inda_re @shinyaa31 @irof @pocketberserker @kiy0taka @nightmare_tim @natsu_nanana @kei10in @smallgeek @Posaune @gim_kondo @akuraru
添削歓迎
ここ間違ってるよ
こうした方がGroovyらしくないか?
などなど
方法は、コメント、トラックバック、はてブ、Twitter @orange_clover宛 で、お願いします。