次を取るにはどうしたら?
YahooのAPIを叩いて、ひとまず結果が帰ってくるようになった。サンプルで付いていたコードはCGIとして叩かれる前提で作られていたので、単なるバッチ処理として動くように若干修正したのが↓のソース。
use LWP::Simple; use XML::Simple; use Encode; use strict ; my $appID = "YaAppID::hogefuga" ; my $query = "ICHIMI" ; # Construct a Yahoo! JAPAN Web Search my $base_url = "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch"; my $type = "all"; #alternates: any, phrase. my $results = 50; my $language = "ja"; my $results_sort = "rank"; #alternate: date. my $req_url = "$base_url?appid=$appID&query=$query&results=$results"; $req_url .= "&language=$language&sort=$results_sort"; # Make the request my $yahoo_response = get($req_url); #print $yahoo_response ; # Parse the XML my $xmlsimple = XML::Simple->new(); my $yahoo_xml = $xmlsimple->XMLin($yahoo_response, ForceArray=>['Result']); # Set some variables my $out; my $result_count = 0; # Add the column header my $totalresult = $yahoo_xml->{totalResultsAvailable}; #top link $out .= "result : $totalresult\n"; # Loop through the items returned foreach my $result (@{$yahoo_xml->{Result}}) { $result_count++; my $y_title = encode('shiftjis',decode('utf-8',$result->{Title})); my $y_summary = encode('shiftjis',decode('utf-8',$result->{Summary})) ; my $y_url = $result->{Url}; my $y_click_url = $result->{ClickUrl}; my $y_modificationdate = $result->{ModificationDate}; (my $sec,my $min,my $hour,my $mday,my $mon,my $year) = localtime($y_modificationdate); $year += 1900; $mon++; my $y_mimetype = $result->{MimeType}; my $y_cache = $result->{Cache}{Url}; my $y_cachesize = $result->{Cache}{Size}; print "$y_title\t\n" ; print "\t$y_summary\n" ; print "\t$y_url\n" ; print "\t$y_click_url\n" ; print "\t$year/$mon/$mday $hour:$min:$sec\n" ; } # No result if ($result_count eq 0) { # If no result print "No result\n"; } else { # footer print "Web Services by Yahoo! JAPAN\n"; }
これで"ICHIMI"で検索した結果が得られる。ページのタイトルやサマリーはutf-8でエンコードされていたので、コンソールに直出力する為にshiftjisに変換。でもちょっと不満。これ、結果は得られるんだけど、50件までなんだよね。全部読み取るにはどうすればいいんだ?
・・・わかった、results=50とか書いてあるわw ということは結果は一発で返すってことか!