週末には少しPerlを。

Perlスクリプトの学習日記です。

いかにしてメイドさん画像をダウンロードするか~2013

元ネタ

ゆーすけべーさんの有名なブログエントリ 「いかにしておっぱい画像をダウンロードするか~2012」 をほとんどそのまま利用して「おっぱい」を「メイド」に置き換えれば 大量のメイドさん画像を得ることができます。

この元ネタはゆーすけべーさんの以下の著書でも取り上げられています。

しかしながらこの方法で集めたメイドさん画像はマイクロソフトの検索エンジンの限界なのか、 いまひとつ刺激が足りず、中にはテイラーメイドの スポーツ用品の写真なども混じって来てしまう。

そこで、これも既に先人がいることだろうとは思いますが 練習を兼ねて tumblr.com から「メイド」のtagがついた画像のポストを 集めるスクリプトを書きました。

tumblr

まずはtumblr.com の API についての ドキュメントを 読みます。

一番最後に記されている Tagged Methodで「メイド」のタグが ついたポストを取得し、その画像をダウンロードするのが目標です。

利用には、まずは自分の「アプリケーション」を何かしら登録して API Keyの取得が必要です。

taggedメソッド

tumblrのtaggedメソッドには必須パラメータとして「api_key」「tag」 の指定が必要ですが、さらにオプションとして「before」を指定可能です。

tumblrの各投稿にはタイムスタンプがついており、「before」を指定する ことで指定日時以前の投稿を取得できます。

taggedメソッドの1回の問い合わせに対して最大20個の投稿が返ってきますので、 その中からもっとも古いタイムスタンプを選び、次の問い合わせを 投げるときには「before」にそのタイムスタンプを指定することで より過去に遡って投稿情報を取得できます。

1回の問い合わせのコードは抜粋すると以下のようになります。

my $ua = LWP::UserAgent->new();

# 途中略

sub tumblr {
    my $t = shift;
    my $url = URI->new('http://api.tumblr.com/v2/tagged');
    my $query = 'メイド';
    my $api_key = 'MyAPI_Key';

    $url->query_form(
        'tag' => $query,
        'api_key' => $api_key,
        'before' => $t,
        );

    my $req = HTTP::Request->new(GET => $url);
    my $res = $ua->request($req);

# (以下略)

}

画像のダウンロード

画像のダウンロードはオリジナルのおっぱい取得スクリプトを ほとんどそのまま使います。 画像は「photos」リストに格納されますので、原寸の画像のみを ダウンロードすることにします。 前記のサブルーチンの続きは以下のようなコードになります。

    if ($res->is_success) {

        my $j = decode_json $res->content;
        my $items = $j->{"response"};

        foreach my $item (@$items) {

            my $phs;
            if ($phs = $item->{'photos'}) {
                if ($t > $item->{'timestamp'}) {
                    $t = $item->{'timestamp'};
                }
                foreach my $ph (@$phs) {
                    &get_photo($ph->{'original_size'}->{'url'});
                } # foreach photo
            }
        } # foreach item
        return $t;

    }
# 以下略

途中、timestamp値を最小値に更新して返すようにしています。 サブルーチン get_photo は指定URLのJPGファイルをダウンロードして 保存する内容を別に設けています。

成果

画像を含まない投稿もあるわけですが、二次元と三次元を取り混ぜて 500枚余りのメイドさんを収集できました。 さらなる成果を得るには、もう少し何か工夫が必要なようです。