「クリオ」を含む日記 RSS

はてなキーワード: クリオとは

2008-04-23

4Uの画像が美しすぎてPerlプログラム組んでみた

4Uって知ってるかい?

http://4u.straightline.jp/

世界中の美女画像を皆でシェアするソーシャルイメージブックマークサービス

とのことさ。それはほんともう美しい画像が満載で毎日見てても飽きないわけさ。

そこでローカル画像を保存しようと思い、ちょっくら実装してみた。


#!/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;
    }
}

それPlaggerでで・・・」モウココウハザン!ドスッ!

貴様、うるせーんだよ。

今回俺としてはWeb::Scraper使いたかったので自力実装してみますた

使い方を試しながらだったので製作時間2時間くらいかかたお。次からはもっと短縮できそうだ。

まーがーっと書いた後に整理してないからコード自体はかなり汚ねぇのでご了承を。ふへ。

とりあえず4u.plを叩くとカレントディレクトリのimgフォルダに取得した画像を次々書き込んでいく。

ちゃんと次のページにも遷移しながらどんどんがんがん書き込んでいくのさ。

で、以前取得したことのある画像にぶつかるとそこでプログラム終了。

ちゅーかなんつってもWeb::Scraperってばスゲエよな。俺のクリオアがびんびん反応するぜ。え?クオリアだって?うっせぇ野暮なこと言うなよ。

プログラ増田のあなぐら

ログイン ユーザー登録
ようこそ ゲスト さん