2008-11-29 00:06:56
一昨日だったか、Google Gadgetを作ろうとして失敗したときに、これならRSSフィードを作った方が簡単じゃないかなどと書いたのだった。ということで、PHPにRSSフィードを作らせることにした。
<?php
$keyword = $_GET["q"];
$url = "http://ajax.googleapis.com/ajax/services/search/news?v=1.0&q=".urlencode($keyword)."&hl=ja&scoring=d&rsz=large";
$toptitle = "Google News ".$keyword;
$xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>
<rss version=\"2.0\">
<channel>\n";
$xml .= "<title>".$toptitle."</title>\n";
$xml .= "<link>http://news.google.com/news?tab=wn&l=ja&ned=&q=".$keyword."&ie=UTF-8&scoring=n</link>\n";
$xml .= "<description>Google News: ".$keyword."に関する検索結果</description>
<language>ja</language>\n
";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_REFERER, "http://nakano.no-ip.org/lege/news/gglnewsRSS.php");
$body = curl_exec($ch);
curl_close($ch);
$json = json_decode($body);
foreach($json->responseData->results as $item){
$url = $item->url;
$title = $item->title;
$pubdate = $item->publishedDate;
$publisher = $item->publisher;
$content = strip_tags($item->content);
$xml .= "<item>\n";
$xml .= "<title>".$title."【".$publisher."】</title>\n";
$xml .= "<link>".$url."</link>\n";
$xml .= "<description>".$content."</description>\n";
$xml .= "<pubDate>".$pubdate."</pubDate>\n";
$xml .= "</item>\n";
}
$xml .= "</channel>\n";
$xml .= "</rss>\n";
echo $xml;
?>
Google AJAX Search APIを利用して、curlで受け取ってjson_decodeで処理。google ajax APIの使い方においては、refererの明記が厳しく指示されているので、気をつけなければならない。8件ずつ日付順の検索結果を得て、RSS2.0の書式で出力する。URLは「http://xxxxx?書籍」(ここではRSSフィーダのURLそのもののhttp://nakano.no-ip.org/lege/news/books/gglnewsRSS.phpを記している)というような感じで作ればどんなキーワードもこのファイル一つで対処できる(ような気がする)。これで、どんなRSSリーダでも読み込めるかどうかは解らない。少なくとも私が使ったLiferea(Linux)とNewswire(Mac)では読めた。
いま、このページをご覧になってゐる方は、本RSSフィーダを自由に使ってみていただいて構はない。上記のURLの末尾に?XXXXXといふやうに?に続けて自分の検索したい語や句を付加して、http://nakano.no-ip.org/lege/news/books/gglnewsRSS.php?q=%E6%96%87%E5%AD%A6 といふやうにして、RSSリーダに登録すればいい。もしも、アクセス数が多すぎたら考へ直さざるを得ないが、多分、そんなに人気が出ることもないと思ふ。