[Technorati] テクノラティのブログ検索API
<<
作成日時 : 2006/08/10 00:01
>>
ブログ気持玉 0 /
トラックバック 0 /
コメント 0
米テクノラティは、ブログ検索のWeb APIを提供しています。REST-fulとのこと。
検索クエリをフォームと同じ application/x-www-form-urlencoded 形式で投げると、
日本中または世界中のブログを検索した結果が XML(またはRSS)で返ってきます。
つい30分前に更新された最新ブログも検索結果として返ってきたりするので、
今さら自前でブログのクローラーを組む気がうせるほど、ありがたいです。
以下のようなプログラムで、Perlからカンタンに検索できます。
#!/usr/bin/perl
use strict;
use HTTP::Lite;
use XML::TreePP;
&search_technorati();
sub search_technorati {
my $APIURL = 'http://api.technorati.com/search';
my $APIKEY = '0123456789abcdef0123456789abcdef';
my $USER_AGENT = 'kawa.net ';
my $QUERY = '検索フレーズ';
my $query = {};
$query->{query} = $QUERY;
$query->{key} = $APIKEY;
$query->{format} = 'xml'; # or 'rss'
$query->{language} = 'ja';
$query->{start} = 0;
$query->{limit} = 10;
my $body = &www_form_urlencode( $query );
my $tpp = XML::TreePP->new();
$tpp->set( user_agent => $USER_AGENT );
$tpp->set( force_array => [qw( item )] );
my( $tree, $xml ) = $tpp->parsehttp( POST => $APIURL, $body ) or return;
# print STDERR $xml;
return unless ref $tree;
return unless ref $tree->{tapi};
return unless ref $tree->{tapi}->{document};
return unless ref $tree->{tapi}->{document}->{item};
foreach my $item ( @{$tree->{tapi}->{document}->{item}} ) {
print "permalink=", $item->{permalink}, "\n";
print "title=", $item->{title}, "\n";
print "name=", $item->{weblog}->{name}, "\n";
print "lastupdate=", $item->{weblog}->{lastupdate}, "\n";
}
}
sub www_form_urlencode {
my $hash = shift;
my $list = [];
foreach my $key ( sort keys %$hash ) {
my $val = $hash->{$key};
$key =~ s/([\&\=\;\s\+])/sprintf("%%%02X",ord($1))/ge;
$val =~ s/([\&\=\;\s\+])/sprintf("%%%02X",ord($1))/ge;
push( @$list, $key."=".$val );
}
my $text = join( "&", @$list );
$text;
}
API Keyの取得が必要なので、会員登録してこちらからAPI Keyを取得して下さい。
その上で、適当な $QUERY の値を入れて検索実行すると、
permalink=http://d.hatena.ne.jp/YuichiTanaka/20060623/p1
title=[読書]Ajax 実装の...
name=YuichiTanakaの日記
lastupdate=2006-08-05 12:29:35 GMT の形式で結果が表示します。
日本語キーワードも、UTF-8 でそのまま検索できます。
詳しい仕様は http://technorati.com/developers/api/search.html (英語)
※HTTP::Liteなら動くけど、LWP::UserAgentを使うとなぜか『Invalid query.』となる。原因不明。
→リクエストContent-Typeの問題だった模様。LWPを使うと自動では付与されない。
XML::TreePP バージョン 0.18 以降で対応しました。
|