perl初心者がおっぱい画像を1000枚ダウンロードするまでにやったこと


こんにちは、おひさしぶりです。突然ですがゆーすけべーさんのブログにある「いかにして効率よく大量のおっぱい画像をダウンロードするか〜2012」をご存知でしょうか。これは題名の如くいかにして数多くのおっぱい画像を楽してダウンロードするかのスクリプトを紹介しています。僕もこのスクリプトを使ってウフフな生活を夢みたわけですが、ひとつ問題がありました。

それはこのスクリプトが・・・Perlで書かれていたのです!

ご存知の通りperlは$,#,%,@こんな記号をたくさん使う言語(はじめはこのくらいの知識しかなかった)です。日本にも有名なperler達がたくさんいます。しかしながら、僕はいままでそのperl闇の集団を怖がるあまりperlを避けてきました。
ところが、僕の前に突如現れた素敵なスクリプトを前にもう我慢ができなくなりました。というわけで、Perlをはじめることを決意したわけです。ここでは僕同様、同じ夢を描いている方のためにこのスクリプトを理解するまでに僕が見てきたサイトやブログなどをまとめておこうとおもいます。



Perlの基本文法

これに関しては色々とみましたが、主なサイトは
Perlノート講義
perldoc.jp
サンプルコードよるperl入門
こんな感じです。あとわからない言葉がでてきたら、とりあえず検索、検索、検索。リファレンスとかその辺は苦労しまっせ・・・。
それと、ラクダ本とかリャマ本とかがお勧めされてますが、ぼくにはむかない気がしたのでちょっと立ち読みしてやめました(やっぱオライリーはまだ早いか)。無理しないで自分のレベルにあったものを使うのって大事ですよね。



さあスクリプトを読もう

さて、ある程度文法を理解できてきたらスクリプトを読もうー。以下がゆーすけべーさんのスクリプト
oppai.pl

use strict;
use warnings;
use LWP::UserAgent;
use URI;
use JSON qw/decode_json/;
use Digest::MD5 qw/md5_hex/;
use Path::Class qw/dir file/;
use Encode;
use utf8;

my $appid = '';
my $uri = URI->new('http://api.bing.net/json.aspx');
my $ua = LWP::UserAgent->new;
my $dir = dir('./data');

my $page_count = 0;
my $download_count = 0;

while(1){
	my $offset = $page_count*50;
	$uri->query_form(
		AppId =>$appid,
		Version =>'2.2',
		Markert =>'ja-JP',
		Sources => 'image',
		'Image.Count' =>50,
		'Image.Offset' =>$offset,
		Adult => 'off',
		Query => 'おっぱい'
	);
	
	my $res = $ua->get($uri);
	die $res->status_line if $res->is_error;
	my $ref = decode_json($res->content);
	last unless defined @{$ref->{SearchResponse}{Image}{Results}};
	
	for my $entry(@{$ref->{SearchResponse}{Image}{Results}}){
		next unless $entry->{MediaUrl} =~ /\.jpg$/;
		$download_count++;
		my $filename = md5_hex(encode_utf8($entry->{MediaUrl})).'.jpg';
		my $filepath = $dir->file($filename);
		next if -f $filepath;
		print encode_utf8("$download_count:Download...$entry->{MediaUrl}\n");
		$res = $ua->get($entry->{MediaUrl},':content_file'=> $filepath->stringify);
		unless ($res->content_type =~ m/^image/){
			unlink $filepath;
		}
	}
	$page_count++;
}

とまあこんな具合なんですが、読めないですね。原因はuse以下のところ。これを攻略せないかんわけです。





標準モジュール・関数、CPANを学ぶ
標準モジュール・関数ですが、このスクリプトを読むためにはさきほどのサンプルコードよるperl入門の該当項目を読めば大丈夫です。問題はCPANです。僕はMACなんですが、上のスクリプトJSONでつまづきます。これを使うためには、まず
1:CPANを使えるようする
2:JSONのインストール
と、この2つをクリアする必要があります。
1は「MACでCPANを使ってPerlモジュールをインストール」を参考にします。CPANとはなんぞやが知りたい人はここも読みます。僕はもちろん読みました。
そしてこのイントールがおわったら「PerlでJSONを使う」を見て2をクリアします。

さてと、これで準備万端・・・と思いきや1つやり忘れていますね。bingのAPIを使えるようにしないといけません。



bingの登録
まずは、ここからbingに登録します。僕は新規登録しました。
そして、自分専用ページが現れます。そこにappidを発行するところがあるので適当にaddします。そうしてしばらく待つとappidが手に入ります。意外にここが一番苦労するポイントだったりします。

あとは、手に入れたappidをスクリプトのmy appidの所にコピペして、unix上からperl oppai.pl をすれば、晴れてこんな夢のようなフォルダの完成です。10分弱かかりますが(笑)


こうして、おっぱい画像は手に入るはPerlに入門できるはでいいことづくめなのでみなさんもぜひやってみましょう。
(ゆーすけべーさん他サイトやブログ運営者の方々ありがとうございました。)