元★ネタ
- たった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をブラウザで開くとアイドル水着写真ばかりが見れるぜ!
まとめ
水着はすごくいいですが、危険なツイートをむやみに実行しないようにしましょう!