はてなキーワード: クリオとは
4Uって知ってるかい?
”世界中の美女画像を皆でシェアするソーシャルイメージブックマークサービス”
とのことさ。それはほんともう美しい画像が満載で毎日見てても飽きないわけさ。
そこでローカルに画像を保存しようと思い、ちょっくら実装してみた。
#!/usr/local/bin/perl -w use strict; use warnings; use Web::Scraper; use LWP::UserAgent; use Perl6::Say; use MIME::Type; use URI; use Data::Dumper; sub p { print Data::Dumper::Dumper(@_) }; my $page = shift || 1000; unless ( $page =~ /^\d+$/ ) { die 'perl 4u.pl [page as int]'; } for my $i (1..$page) { my $url = sprintf 'http://4u.straightline.jp/?page=%s' , $i; say "request url>".$url; my $tmp = scraper { process 'ul.entry-list>li>div.entry-body>div.entry-photo>a', 'link[]' => '@href'; process 'ul.entry-list>li>div.entry-footer>div.wrapper-entry-description>div.entry-description>p.entry-img-src', 'img[]' => 'TEXT'; result 'link','img'; }->scrape( URI->new($url) ); my $links = $tmp->{link}; my $imgs = $tmp->{img}; if ( ref $links ne 'ARRAY' ) { say "end program."; exit; } for my $link (@$links) { $link =~ m{/([^/]+)$}; my $sesid = $1; sleep 1; my $image_url = shift @$imgs || next; $image_url = 'http://'.$image_url; say "get image url >".$image_url; my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new(GET => $image_url); my $res = $ua->request($req); my $content = $res->content; my $content_type = $res->headers->header('content-type'); my $ext = MIME::Type->new( type => $content_type )->subType || 'bin'; my $write_path = './img/'.$sesid.'.'.$ext; if ( -f $write_path ) { say "file exsits end program >".$write_path; exit; } open my $FH, '>', $write_path; binmode $FH; print $FH $content; close $FH; say "write image >".$write_path; } }
貴様、うるせーんだよ。
今回俺としてはWeb::Scraper使いたかったので自力実装してみますた。
使い方を試しながらだったので製作時間2時間くらいかかたお。次からはもっと短縮できそうだ。
まーがーっと書いた後に整理してないからコード自体はかなり汚ねぇのでご了承を。ふへ。
とりあえず4u.plを叩くとカレントディレクトリのimgフォルダに取得した画像を次々書き込んでいく。
ちゃんと次のページにも遷移しながらどんどんがんがん書き込んでいくのさ。
で、以前取得したことのある画像にぶつかるとそこでプログラム終了。
ちゅーかなんつってもWeb::Scraperってばスゲエよな。俺のクリオアがびんびん反応するぜ。え?クオリアだって?うっせぇ野暮なこと言うなよ。