id:gamella こと大学の同期のお友達「ともちゃん」がErogeekチックなことをしていたのを発見。
今、ちょっと作成を考えているWebサービスがあって、その練習のためにFlickrから画像を取得するスクリプトを書きました。
(中略)
何をしたかったかと言うと、Flickrにどれくらいグラビアアイドルの画像がアップされているかを調べたかったのです。理由は聞かないでください。
とりあえず、グラビアアイドルのリストを作成します。個人的に気に入っているグラビアアイドルを50人ほどピックアップしてみました。…
理由は聞きません。でも、そのともちゃんチョイスのグラビアアイドルリスト、貸して下さい! というわけで、ともちゃんはPythonでスクリプトを書いてたけど、俺はPerlでダウンローダー作った(Plaggerでもできそうだけど素で書いてみたかった)。
お決まりの iPod touch にいれるとこんな感じアイドルまみれ
それで、最後にそのスクリプトを貼り付けておくけど、面白かったのはともちゃんも調べたかったという、各グラビアアイドルの画像が何枚 Flickr にアップされているかという数。
Flickr API 初めて使ってあんまよく理解していないかもしれないけど、 「flickr.photos.search」メソッドにアイドル名を text クエリーとして渡すと上限500でURLが返ってくる仕組みらしい。ともちゃんはそのURL数、上限500で写真の数をカウントしていたけれど、APIの返り値に total というのがあって、それは500以上でも Flickr 内にあるそのクエリーにヒットした画像の数を返してくれる。Perlのコードだとこんな感じ(XML::Simpleでパースしているのは好みっす)。
use Flickr::API; use XML::Simple; my $api_key = ""; my $api = new Flickr::API( { key => $api_key, forcearray => ['photo'] } ); my $xs = XML::Simple->new( keyattr => [] ); warn "total_count is " . &search("query"); sub search { my ($query) = @_; warn "searching $query ..."; my $res = $api->execute_method( 'flickr.photos.search', { text => $query } ); my $ref = $xs->XMLin( $res->{_content} ); return 0 unless $ref->{photos}->{total}; return $ref->{photos}->{total}; }
このコードを使い、日本語の名前とアルファベット名でそれぞれ検索して total のカウントを足して数えてみると、一位はダントツ2670枚で小倉優子りん。2位が沢尻エリカの633枚だからすごい差。ちなみに、1枚しかなかったのは最下位、和希沙也ちゃんだった。
リストには47人のグラビアアイドルがいて、その全てのFlickr画像の数を足すと8407枚になった。なるほど、Flickr にはユーザー撮影した写真がばかりであまりそのような画像は少ないと思ったけど、そこそこあるんだな。いや、ってかぶっちゃけ多いのか少ないのかよくわからないな。とにかく小倉優子りんがダントツなのは把握した。
結果をDumpしたのを以下に貼り付けておきます。ともちゃんはこの結果からどのような考察をしてくれるのだろうか。
total_count: 8407 --- count: 2670 en: Ogura Yuko ja: ' 小倉優子' --- count: 633 en: Sawajiri Erika ja: ' 沢尻エリカ' --- count: 614 en: Minami Akina ja: ' 南明奈' --- count: 507 en: Hoshino Aki ja: ' ほしのあき' --- count: 362 en: Toda Erika ja: ' 戸田恵梨香' --- count: 304 en: Kawamura Yukie ja: ' 川村ゆきえ' --- count: 278 en: Ayase Haruka ja: ' 綾瀬はるか' --- count: 264 en: Nagasawa Masami ja: ' 長澤まさみ' --- count: 252 en: Yamamoto Azusa ja: ' 山本梓' --- count: 238 en: Morishita Chisato ja: ' 森下千里' --- count: 233 en: Nagasaki Rina ja: ' 長崎莉奈' --- count: 190 en: Natsukawa Jun ja: ' 夏川純' --- count: 187 en: Irie Saaya ja: ' 紗綾' --- count: 168 en: Kosaka Yuka ja: ' 小阪由佳' --- count: 159 en: Hara Fumina ja: ' 原史奈' --- count: 148 en: Takizawa Nonami ja: ' 滝沢乃南' --- count: 109 en: Yasu Megumi ja: ' 安めぐみ' --- count: 107 en: Tsugihara Kana ja: ' 次原かな' --- count: 98 en: Yuki Maomi ja: ' 優木まおみ' --- count: 87 en: Isoyama Sayaka ja: ' 磯山さやか' --- count: 84 en: Akiyama Rina ja: ' 秋山莉奈' --- count: 77 en: Mitsuya Yoko ja: ' 三津谷葉子' --- count: 74 en: Aibu Saki ja: ' 相武紗季' --- count: 74 en: Iwasa Mayuko ja: ' 岩佐真悠子' --- count: 55 en: Komatsu Ayaka ja: ' 小松綾夏' --- count: 49 en: Anzu Sayuri ja: ' 杏さゆり' --- count: 45 en: Sugimoto Yumi ja: ' 杉本有美' --- count: 36 en: Okubo Mariko ja: ' 大久保麻梨子' --- count: 34 en: Tokito Ami ja: ' 時東あみ' --- count: 33 en: Kumada Yoko ja: ' 熊田曜子' --- count: 32 en: Nakamura Miu ja: ' 仲村みう' --- count: 28 en: Yabuki Haruna ja: ' 矢吹春奈' --- count: 23 en: Ando Sayaka ja: ' 安藤沙耶香' --- count: 21 en: Nakagawa Shoko ja: ' 中川翔子' --- count: 19 en: Hamada Shoko ja: ' 浜田翔子' --- count: 19 en: Sato Hiroko ja: ' 佐藤寛子' --- count: 17 en: Yasuda Misako ja: ' 安田美沙子' --- count: 14 en: Shiratori Yuriko ja: ' 白鳥百合子' --- count: 13 en: Aizawa Hitomi ja: ' 相澤仁美' --- count: 11 en: Natsume Rio ja: ' 夏目理緒' --- count: 11 en: Wakatsuki Chinatsu ja: ' 若槻千夏' --- count: 9 en: Morishita Yuri ja: ' 森下悠里' --- count: 8 en: Kiguchi Aya ja: ' 木口亜矢' --- count: 5 en: Suzuki Akane ja: ' 鈴木茜' --- count: 5 en: Yamazaki Mami ja: ' 山崎真実' --- count: 2 en: Kinoshita Yukina ja: ' 木下優樹菜' --- count: 1 en: Kazuki Saya ja: ' 和希沙也'
ところで、よくよく、リストとか写真とか見てみると、「三津谷葉子」とか「夏川純」、そして「磯山さやか」とうまいこと俺の趣向に合っていることが判明した。ともちゃんGJ! もちろん、ゲットした画像は iPod touch でくぱぁしたよ!
では最後にダウンローダーのPerlスクリプトを貼り付け。Flickrに過度な負荷を与えないようにね。 あ、あとダウンロードしなくても画像見たいだけだったらともちゃんがWebアルバム作ってくれてるよ→idol album。
#!/usr/bin/perl use strict; use warnings; use Flickr::API; use XML::Simple; use LWP::UserAgent; use Digest::MD5 qw(md5_hex); use Path::Class; use Text::CSV::Simple; my $api_key = ""; my $dir_path = "photos"; # http://d.hatena.ne.jp/gamella/20080112#1200105210 にあるグラビアアイドルリストをcsvで保存 # もちろん好みに合わせるのもOK my $csv_filename = "idol.csv"; my $api = new Flickr::API( { key => $api_key } ); my $xs = XML::Simple->new( keyattr => [] , forcearray => ['photo'] ); my $ua = LWP::UserAgent->new(); my $param = { per_page => '500', sort => 'date-posted-desc', extras => 'date_upload', }; my $csv = Text::CSV::Simple->new( { binary => 1 } ); $csv->field_map(qw/en ja/); my @list = $csv->read_file($csv_filename); foreach my $idol (@list) { my $subdir_path = $idol->{en}; $subdir_path =~ s/\s//; &search( $idol->{ja}, $subdir_path ); &search( $idol->{en}, $subdir_path ); } sub search { my ( $query, $subdir_path ) = @_; $param->{text} = $query; my $res = $api->execute_method( 'flickr.photos.search', $param ); my $ref = $xs->XMLin( $res->{_content} ); return unless $ref->{photos}->{total}; foreach my $photo ( @{ $ref->{photos}->{photo} } ) { my $url = sprintf "http://farm%s.static.flickr.com/%s/%s_%s.jpg", $photo->{farm}, $photo->{server}, $photo->{id}, $photo->{secret}; my $dir = Path::Class::Dir->new( $dir_path, $subdir_path ); mkdir $dir->relative if !-d $dir->is_absolute; my $file = $dir->file( md5_hex($url) . ".jpg" ); my $res = $ua->mirror( $url, $file->absolute ); print "try to fetch : " . $res->status_line . " : $url\n"; } }
お決まりの iPod touch アサマシ
- エレクトロニクス / アップルコンピュータ (2007/09/25)
- Amazon 売り上げランキング: 50
- エレクトロニクス / アップルコンピュータ (2007/09/25)
- Amazon 売り上げランキング: 53