たった10行のコードでひたすらアイドル水着画像をあつめる - UT Startup Gymを見てて思った。
やっぱりPHPなのかなと思って。シェルでやってみた。
シェルのデータ処理は偉大ですね。
grep と curl だけで書けるよ
curl http://matome.naver.jp/odai/2135350364969742801 | \ grep -o "<img src=\"http://rr.img.naver.jp:80/[^\"]*\" class=\"MTMItemThumb\"[^>]*>"
シェル・ワンライナーで充分ですね。
あとはシェルワンライナーをPHPに貼り付けて
<?php $url = http://matome.naver.jp/odai/2135350364969742801 $html = `curl $url | grep -o "<img src=\"http://rr.img.naver.jp:80/[^\"]*\" class=\"MTMItemThumb\"[^>]*>"` echo "<body>{$html}</body>";
ハイ出来上がり。
作ったものを再利用しましょう
大事なのが「繰り返し」です。プログラムはループと変数出てきています。簡単に再利用ができます。作ったものを改造します。再利用とが出来るようにします。再利用性を高めておけば、何度も繰り返し使えます。
matome_eroimage_downloader
#!/usr/bin/env php <?php if(sizeof($argv)<0){ echo "使い方\n"; echo "$argv[1] アドレス";exit; } foreach($argv as $url){ $html = `curl $url | grep -o "<img src=\"http://rr.img.naver.jp:80/[^\"]*\" class=\"MTMItemThumb\"[^>]*>"` echo "<body>{$html}</body>"; }
このようなReady to Useな状態をつくり、維持しましょう。
なんども使う。
簡単に使えるようにし、どんどん活用する。
./matome_eroimage_downloader "http://matome.naver.jp/odai/2135350364969742801"
再利用する。この発想が大事
再利用可能なら、一度と言わず、何度でも使える。
./matome_eroimage_downloader "http://matome.naver.jp/odai/2135350364969742801" ./matome_eroimage_downloader "http://matome.naver.jp/odai/2135350364969742801" ./matome_eroimage_downloader "http://matome.naver.jp/odai/2135350364969742801" ./matome_eroimage_downloader "http://matome.naver.jp/odai/2135350364969742801"
URLを変えれば、何度も何度も実行できます。
ページ処理だって
次ページ以降の処理処理も「1ページを処理する」を繰り返せば簡単ですね。複数ページだってへっちゃらです。
url=http://matome.naver.jp/odai/2135350364969742801 for i in {1..10}; do ./matome_eroimage_downloader $url?page=$i ;done
っていうかHTML作るのすら面倒じゃん。
画像が欲しいんだから、画像を直接保存しようぜ。
matome_url=http://matome.naver.jp/odai/2135350364969742801;\ cnt=0;\ for i in `curl $matome_url | grep 'MTMItemThumb' | grep -o "src=\"[^\"]*" | cut -d \" -f 2 `;\ do \ curl -o $cnt.jpg $i;\ cnt=`expr $cnt + 1 `;\ done
そのままフォトストリームに放り込んで、AppleTVに流すとか楽しそうだよね。
ポイント
改造の際に注意することがあって、使い方をシンプルにすることが大事です。
機能追加よりシンプルさを目指します。
シンプルな部品を組み合わせて使うのが大事なんです。
シンプルなプログラムは実行しても同じ結果が返ってきます。
同じURLを指定したら、同じ結果が何度も得られます。結果が違うのは違うURLを指定した時だけ。
冪等性といいます。プログラムで一番大事なことですね。*1
感想
ruby でやろうとおもったけど、画像だけなら、curl+grep がお手軽だった。
とりあえず、シェルで出来るようになるのがお手軽と思うんだ。言語選ばないし。
元ネタでは、URLがPHP変数に直接書かれていてなんだかなーと思ったり
*1:某銀行のように、実行する度に結果が違う。戻る禁止・F5禁止なサイトがあってそういうのはクソ