Google Feed APIが廃止に!? PHPでクロスドメイン対策する。

 

昨日2015年12月2日、クライアントから「ブログの記事ニュースがトップページのインフォメーションに表示できなくなった。」と連絡がありました。
なにも変えていないとのことだったので、緊急調査することに。

Google Feed APIが403エラーをリターン

HTMLソース上は特に問題なさそうだったので、ブログのRSSアドレスを変更してテスト。
やっぱりダメです。

そこで、リターンコードを確認し、403エラーがリターンしていることが分かりました。

ネットサーチすると騒ぎになっているようです。

参照 【不具合報告】もしかして Google Feed API が廃止か?(fanblogs.jp)

一応、トップページからブログそのものにリンクするよう仮対策して様子を見ることに…

やっぱり廃止されたようです。

1日おいて、先ほどの参照ページを見てみるとやはり、廃止されたようですね。
しかし、多くのユーザーが突然のことだったようで、ネットで大騒ぎになっています。
勝手に使っている私たちの問題ですかね?

いずれにしても、様々なjQueryプラグインもGoogle Feed APIを使っていたようで軒並みデモが動いていませんでした。

しようが無いのでプラグインや他のASPを使用せず、独自対策することにしました。

クロスドメインの問題

問題はクロスドメインをどう処理するかということです。
私のクライアントは自社サーバーでブログを構築しているわけではなく、他社のサービスを使っています。

クロスドメインの解決には様々な方法があるのですが、今回はPHPを利用することにしました。

PHPファイル

PHPファイルは、RSSからxmlをテキストとして読み込み、ヘッダをつけて、リターンするだけの簡単なものです。
ファイル(このページの例では、ファイル名「blog1.php」)をつくって、利用するHTMLと同階層に設置します。

これをjQueryのajaxで処理します。


<?php $url = "rssアドレス"; $xml = file_get_contents($url); header("Content-type: application/xml; charset=UTF-8"); print $xml; ?>

※printはechoでも処理出来ました。

HTMLのjQuery

HTML側はjQueryで先ほどのPHPファイルを呼び出します。


$(function() {
$.ajax({
url: 'blog1.php',
dataType: 'xml',
success: function(data) {
$(data).find('item').each(function(){
//ここにXMLを処理するコードを書く
});
},
error: function(data) {
//ここでエラー処理を行う
}
});
});

※実際のXMLの処理はrssの形式によって要素名が若干異なります(ブログによってはdateがpubDateだったりします)。独自処理を記述してください。

XMLの処理は以下のページの「HTML生成関数」が参考になると思います。

参照 jQueryで外部ファイル(XMLデータ)を解析し、HTMLに表示する(ezgate-mt.sakura.ne.jp)

 

以上でとりあえず対策できました。

困ったら試してみてね。

(追記)

12.4にはGoogle Feed APIが回復してました。
これからどうなるのでしょうね?

by T.Y.