Google Feed API を YQL で置き換え

yql.jpg


RSSフィードを読み込むためのGoogleライブラリ「Google Feed API」が正式に廃止されたのは2017年1月ということなので、もう2年近く放置してたってことになりますが、サイトをいろいろ直しているついでにそれも何とかしておこうと言うことで代替手段を探すとYQLで代替するのが一番スマートそう。



参考にした記事はこちら。

Google Feed API から YQL API へ移行したお話 – Qiita


これを参考に実際に組み立てたソースはこんな感じ(抜粋)

var yqlFR = function(url,target,show=7){
$.getJSON("https://query.yahooapis.com/v1/public/yql?callback=?", {
q: "select * from feednormalizer where url = '"+url+"' AND output='atom_1.0'",
format: "json"
}, function(json) {
var entry,li,a;
var container = $('#'+target).get(0);
var ul = document.createElement('ul');
var items = json.query.results.feed.entry;
for (var i = 0; i < items.length; i++) {
entry = items[i];
li = document.createElement('li');
a = document.createElement('a');
a.href = entry.link;
a.target = '_blank';
a.appendChild(document.createTextNode(entry.title));
li.appendChild(a);
ul.appendChild(li);
if(ul.childNodes.length >= show) {
break;
}
}
container.appendChild(ul);
});
};


引数として、

  • url …… RSSフィードのURL
  • target …… 結果を表示させるコンテナのID
  • show …… 表示数(最大)

を与えることで、urlで指定されたRSSフィードを取ってきてリストに整形し、指定されたコンテナに指定された数だけ表示するってことをやってます。


JSON取得部分は参考にした記事と同じくjQueryのgetJSON関数を使いました。この関数はjQuery3.x系のslimバージョンでは削除されているようなので、注意が必要です。本当はjQueryも使わないようにしたかったんですけど、あいにく他のライブラリでjQueryを要求されてるしまあ良いかなと。


クエリ内「SELECT * FROM rss」ではなく「SELECT * FROM feednormalizer」を使っています。取得するだけならrssで十分なんですが、色んなURLを突っ込むことを考えると出力の形式を一定にしておいた方が便利だし、rssにFeedBurnerのurlを読み込ませると、上手く処理してくれない(query.resultsが空になる)ようなので、feednormalizerを採用しました。出力形式はATOMにしてますが、別に何でも良いです。その後の処理が変わるだけなので。

feednormalizerについてはこちらを参考にしてください。

YQL Blog » The powerful YQL feednormalizer table


後の処理は適当にHTML要素を組み立てているだけですね。簡単。