6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-12-04

はじめに

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

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

6
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?