それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

たった1行コードでひたすらアイドル水着画像をあつめる。(シェルで再利用可能に)

たった10行のコードでひたすらアイドル水着画像をあつめる - UT Startup Gymを見てて思った。

やっぱりPHPなのかなと思って。シェルでやってみた。

シェルのデータ処理は偉大ですね。

grepcurl だけで書けるよ

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禁止なサイトがあってそういうのはクソ