天然パーマです。

たった一つのツイートでひたすらアイドル水着画像を集める

元★ネタ

やること

なんだかよく分からないタイトルだと思うけど、間違っていないと思う! 目的の仕様としては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

スクリーンショット 2012-12-15 2.28.42.png

そしてこのツイートは実行される

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をブラウザで開くとアイドル水着写真ばかりが見れるぜ!

まとめ

水着はすごくいいですが、危険なツイートをむやみに実行しないようにしましょう!