元★ネタ
- たった10行のコードでひたすらアイドル水着画像をあつめる - UT Startup Gym
- たった3行のコードでひたすらアイドル水着画像をあつめる(Rubyだよ) - maeharinの日記
- たった数行のコードでひたすらアイドル水着画像をあつめるのをGoutteで書いてみた - iakioの日記
やること
なんだかよく分からないタイトルだと思うけど、間違っていないと思う! 目的の仕様としてはNAVERまとめに張られた水着写真のimgタグを持って来て、 imgタグだらけの.htmlをダンプすれば嬉しいよね〜っていうスクリプトを少ない行数で書けるか? 他の言語ではどう書くのか?みたいなことなんだけど...
Perlでワンライナー書いてたら、Twitterのツイートに収まる文字数、つまり140文字以内になった。 コードをツイートするって言うと、なんか昔miyagawaさんが変態的なことをやっていたなと思い出す。
「Run a tweet like Perl」=「ツイートをPerlのように実行しますぉ」とそのままのことなんだけど、 これはどういうことか!?とりあえず今回の課題を元にやってみる。
ツイートする
コードをつぶやく。URLがt.coで圧縮されているけど、これはNAVERまとめのアイドル水着記事ね。
print for get('http://t.co/C4CkxAaD') =~ m!<img.+?class="MTMItemThumb".+?/>!g
そしてこのツイートは実行される
twitter.pm を用意する
上記でとりあげたmiyagawaさんのBlog記事にある「twitter.pm」を用意する。 一部、TwitterのAPIのアドレスが変更になっていたり、HTMLエンティティの扱いを施すために手を加える(このdiffちょっと正確じゃないかも)。
*** twitter.pm.org 2012-12-15 01:50:17.000000000 +0900 --- twitter.pm 2012-12-15 01:50:00.000000000 +0900 *************** *** 4,9 **** --- 4,10 ---- package twitter; use JSON; use LWP::Simple; + use HTML::Entities; my $id; use overload "/" => sub { $id = $_[1]; $_[0] }, fallback => 1; *************** *** 15,22 **** END { if ($id) { ! my $t = JSON::decode_json(LWP::Simple::get("http://twitter.com/status/show/$id.json")); my $e; if ($t->{text} =~ /^\#?perl\s/) { system $t->{text}; $e = $!; } else { --- 16,24 ---- END { if ($id) { ! my $t = JSON::decode_json(LWP::Simple::get("http://api.twitter.com/1/statuses/show/$id.json")); my $e; + $t->{text} = decode_entities($t->{text}); if ($t->{text} =~ /^\#?perl\s/) { system $t->{text}; $e = $!; } else {
ツイートを実行する
いよいよツイートを実行する。引数はツイートのURLになる。クール!
$ perl -Mtwitter -e http://m.twitter.com/yusukebe/status/279638603611664384 > photos.html
ダンプされたphotos.htmlをブラウザで開くとアイドル水着写真ばかりが見れるぜ!
まとめ
水着はすごくいいですが、危険なツイートをむやみに実行しないようにしましょう!