読者です 読者をやめる 読者になる 読者になる

HTTP::Tinyを使う

perl http

Perl 5.14.0が出ました。気になるものとして、新しい標準モジュールに入った
HTTP::Tinyがあります。cpanmも使っているモジュールです。
標準モジュールで HTTPクライアントが簡単にかけると、助かる場面と
いうのは多いのではないでしょうか。

ソース

指定した URLから jpeg, gifのリンクを抜き出すというものです。
LWPを意識していると思われ、簡単なことをやるならほぼ同じです。
getの戻り値が HTTP::Responseのようなオブジェクトではなく、
ハッシュとして返ってくるというぐらいですかね。

#!/usr/bin/env perl
use strict;
use warnings;

use HTTP::Tiny;

my $url = shift or die "Usage $0 url\n";

my $ua = HTTP::Tiny->new(
    agent => 'sample ua',
);

my $res = $ua->get($url);
die "Can't download $url\n" unless $res->{success};

my $content = $res->{content};
while ($content =~ m{src="([^"]+)"}gxmsi) {
    my $src = $1;
    if ($src =~ m{\.(?:jpg|gif|jpeg|png)$}) {
        print "Image link: $src\n";
    }
}

実行

% perl http_tiny.pl http://d.hatena.ne.jp/syohex/
Image link: http://d.hatena.ne.jp/images/hatena_dg.gif
Image link: http://d.hatena.ne.jp/images/diarydg.gif
Image link: http://d.hatena.ne.jp/images/search_diarydg.gif
Image link: http://d.hatena.ne.jp/images/searchdg.gif
Image link: http://d.hatena.ne.jp/images/dot.gif
Image link: http://d.hatena.ne.jp/images/hatenadg.gif
Image link: http://d.hatena.ne.jp/images/dot.gif
Image link: http://d.hatena.ne.jp/images/dot.gif
Image link: http://b.st-hatena.com/images/entry-button/button-only.gif
Image link: http://a1.twimg.com/profile_images/1151953348/gfx_normal.jpg
Image link: http://b.st-hatena.com/images/entry-button/button-only.gif
Image link: http://www.st-hatena.com/users/sy/syohex/profile.gif

おわりに

HTTP::Tinyの使い方を書きました。昨今の perlbrew等の環境を考えると
モジュールのインストールが問題になるということはあまりないと思うのですが、
標準モジュールで簡単な HTTPクライアントが書けるというのは、いろんな
意味でありがたいことなんじゃないかなと思います。


まあ Perl 5.14が普及したときの話なんですけどね。
ディストリにもよるのだろうけど、数年後の話でしょうけどね。
Redhat, CentOSはもっとかもしれないですが・・・。