Google Ajax Feed APIを使わないでRSSを取得してみた
Google Ajax Feed APIを使ってみた(RSS表示するAPI)
先日、Google Ajax Feed APIを使ってRSSを取得できるようにしたのだが、Googleからもらえるフィードの更新がやたらと遅く、半日以上経っても更新されない(>_<)
どうやらGoogle側でキャッシュしているために、最新のデータが取得できないようだ(RSSを取得するAPIなのに、この仕様って…。)
RSSのアドレスの後ろに「現在時刻」を追加すれば、キャッシュを回避できるよ~という話があったので追加してみるが、イマイチ上手く行かない。
http://d.hatena.ne.jp/m_ogawa/20100301/1267423085
だんだん面倒臭い感じになってきたので、自分でRSS取得プログラムを作った方が早そうだと思い、作ってみました!(毎回こんなんばっか)
変更点は以下の図を参照(Google Docsの図形描画で描いてみました。単純な図でもあると無いとでは大違い!?)
肝心のソースはこちら。
javascriptはクロスドメイン制限(自HP以外のデータにはアクセスできない)されているので、Google Ajax Feed APIを使わない場合は自分で代用サーバを用意しないといけません。
今回はPHPを使いました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
//明示的に時差を表記する | |
date_default_timezone_set('Asia/Tokyo'); | |
// カレントの言語を日本語に設定する | |
mb_language("ja"); | |
// 内部文字エンコードを設定する | |
mb_internal_encoding("UTF-8"); | |
// RSSのソース元(RSS1=RDF専用) | |
$rss = simplexml_load_file("http://~~~~"); | |
//RSSフィードの取得指定数 | |
$rss_num = $_GET["rss_num"]; | |
// RSSフィードの分だけループ | |
$i=0; | |
foreach ($rss->item as $item) { | |
//名前空間接頭辞の定義を取得 | |
$dc = $item->children('http://purl.org/dc/elements/1.1/'); | |
//詳細・リンク・日付を、変数に格納する | |
$json[$i]['desc'] = (string)$item->description; | |
$json[$i]['link'] = (string)$item->link; | |
//日付を見やすくする | |
$arr_week = Array( "日","月","火","水","木","金","土" ); | |
//先に曜日だけ算出 | |
$japanese_week = $arr_week[date("w", strtotime((string)$dc->date))]; | |
$date_format = sprintf("Y.m.d(%s) H:i", $japanese_week); | |
// 最終的に整形 | |
$json[$i]['date'] = date($date_format, strtotime((string)$dc->date)); | |
//指定数になったら、取得を止める | |
$i++; | |
if($rss_num <= $i) break; | |
} | |
//ヘッダーを吐き出して終了 | |
header('Content-Type: application/json; charset=UTF-8'); | |
echo $_GET['callback'] . "(" . json_encode($json). ")"; | |
?> | |
上記のPHPを呼び出すHTML(javascript)は、こちら。
せっかくなので、JSONP形式にしてみました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<html> | |
<head> | |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"> </script> | |
<script> | |
$.getJSON( | |
"http://localhost/rss/rss.php?callback=?", | |
{ rss_num : 5 }, | |
function(json) { | |
alert('b'); | |
//出力先要素(ID指定)を変数に格納 | |
var container = document.getElementById("feed"); | |
var htmlstr = ""; | |
//フィードの分だけループ | |
for (var i = 0; i < json.length; i++) { | |
//日付を表示 | |
htmlstr += '' + json[i]['date'] + '<br>'; | |
//タイトルとリンクを表示 | |
htmlstr += '<b><a href="' + json[i]['link'] + '" target="_blank">' + json[i]['desc'] + '</a></b><br><br>'; | |
} | |
// 要素に出力 | |
container.innerHTML = htmlstr; | |
} | |
); | |
</script> | |
</head> | |
<body> | |
<div id="feed"></div> | |
</body> | |
</html> |