はてなハイクAPIを使用して、指定キーワードのタイムラインを取得する
さっき小一時間くらい使ってちょこっと書いてみた。
Net::Twitterを継承したパッケージを書いた方が良さそうですが・・・。
#!perl use strict; use warnings; use URI::Escape; use XML::TreePP; use Data::Dumper; # 初期化系 my $keyword = uri_escape('ひとりごと'); # このタイムラインを取得する my $api_uri = 'http://h.hatena.ne.jp/api/'; my $api_method = 'statuses/keyword_timeline/'; my $api_format = '.xml'; my $date_time; my $datetime_filename = 'datetime'; my $param_count = '200'; my $param_since; # 前回取得した時間を読込む open my $datetimefile, '<', $datetime_filename or $param_since = '2001-01-01T00:00:00Z'; if(! $param_since) { while(<$datetimefile>) {chomp; $param_since = $_;} } # 指定キーワードのタイムラインを取得 $api_uri = $api_uri . $api_method . $keyword . $api_format; $api_uri .= "?count=$param_count"; $api_uri .= "&since=$param_since" if($param_since); # ページ指定は使わないかな〜? my $xtpp = XML::TreePP->new(force_array => [qw(status)]); my $contents = $xtpp->parsehttp(GET => $api_uri); my $status = $contents->{statuses}->{status}; foreach my $hash (@$status) { $date_time = $hash->{created_at}; last; } # ダンプってみる print Dumper $contents; # タイムライン取得した日時を保存 if($date_time) { open(OUT, ">$datetime_filename") or die; print OUT $date_time; close(OUT); } exit;
あいかわらずアレですが・・・。
GETもPOSTも処理できるようなので(といってもLWP::UserAgentをラップしてるのかな)、XML::TreePPを選択してみました。JKL.ParseXMLを使ったこともあるのでw
JSONの方が世の中的には良いんですかね・・・。まあ、本質的な操作は行わないと思うのでいつでも変えられるかな。
前回取得した時の最後の記事の時間を記録して、次回はAPIにその時間を渡して以降の記事を取得するようにしてます。秒単位なのでタイミングによってはこぼしそうなんですけど・・・。別にいっか。
あとで、各ユーザーIDとかを纏めて、それぞれの過去タイムラインを取得する処理を加える。
本文は、keyword=本文になっているものもあるので=前がキーワードと一致したら削除。
本文纏めてyahoo apiに渡す。そういえばあそこの戻りってXMLだよね。じゃあ、XMLでいいか。
カミナリこえ〜。=