PHP
JavaScript
JSON
GoogleFeedAPI

PHP用 Google Feed API が完全に廃止されてしまった時の対応方法

More than 3 years have passed since last update.


はじめに

2015年12月02日にGoogle Feed APIが突如として利用できなくなり、

RSSフィードが表示されないという事態に陥った方が多いかと思います。(12/4現在は復活した模様)

筆者もその一人で急ぎ代替手段を探しましたが、調査当時は対応方法が見つからなかったり

古いバージョン(1.0系)RSSでの取得方法だったりと、欲しい代替手段を中々見つけられませんでした。

今回調査して得られた様々な対応方法を組み合わせ Google Feed API を使わない

RSS表示方法をどうにか確立出来たので、代替手段を探してる方向けに共有いたします。

JQueryを使った方法もありますが、prototype.jsを使っているページがあると競合により表示されなくなるので使用しませんでした。

実装前提は以下のとおりです。


言語: PHP5.4

RSSバージョン: 2.0

json,javascript も使用



処理の流れ


  1. RSSフィードを取得してjsonファイルで保存 (rss.php)

  2. フィードのjsonファイルを読み込みid=feedが指定されたhtmlタグを整形 (loadrss.js)

  3. ページアクセス時にjsを読み込ませる (hoge.html)


rss.php

<?php

//時差表記
date_default_timezone_set('Asia/Tokyo');
// 言語を日本語に設定
mb_language("ja");
// 文字エンコードを設定
mb_internal_encoding("UTF-8");
// RSSのソース元
$feed_url = "http://~~~~~~~~~~~"; <=ここに今まで使っていたRSS取得のURLを格納する
$rss = simplexml_load_file($feed_url);
//RSSフィードの取得指定数
$rss_num = 4;
// RSSフィードの分だけループ
$i=0;
foreach ($rss->channel->item as $item) {
//詳細・リンク・日付を、変数に格納する
$json[$i]['desc'] = (string)$item->title;
$json[$i]['link'] = (string)$item->link;
$json[$i]['date'] = (string)$item->pubDate;
//指定数になったら、取得を止める
$i++;
if($rss_num <= $i) break;
}

$fp = fopen('feed.json', 'w');
fwrite($fp, json_encode($json));
fclose($fp);
?>



loadrss.js

var data = new XMLHttpRequest();

data.open("GET", "feed.json", true);

data.onload = function() {
var json = JSON.parse(this.responseText);
//出力先要素(ID指定)を変数に格納
var container = document.getElementById("feed");
//フィードの分だけループ
for (var i = 0; i < json.length; i++) {
var entry = json[i];
var div = document.createElement("li");
var a = document.createElement("a");a.href = entry.link;
a.target = "_blank" ;
a.appendChild(document.createTextNode(entry.desc));
div.appendChild(a);
container.appendChild(div);
}
}
data.send(null);



hoge.html

<html lang="ja">

<head>
<script type="text/javascript" src="loadrss.js">
</script>
</head>
<body>
<ul id="feed"></ul>
</body>
</html>

cronスケジュールでrss.phpを毎時実行に設定すれば、1時間ごとに自動的に最新情報が読まれます。

/etc/crontab

0 * * * * hoge php /path/to/rss.php

実行タイミングはお好みでどうぞ。