Google Ajax Feed APIを使わないでRSSを取得してみた

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の図形描画で描いてみました。単純な図でもあると無いとでは大違い!?) 無題図形描画 (2)
肝心のソースはこちら。
javascriptはクロスドメイン制限(自HP以外のデータにはアクセスできない)されているので、Google Ajax Feed APIを使わない場合は自分で代用サーバを用意しないといけません。
今回はPHPを使いました。

<?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形式にしてみました。

<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>