2015年12月2日に「Google Feed API」が「This API is no longer available.」になり、RSSをJSONP形式で簡単に取得することができなくなりました。
そこで、「Googleスプレッドシート」を使って、RSSを定期取得して、JSONPで吐き出す実験をして、上手くいきましたので、その方法をまとめておきます。
●スプレッドシートの作成
・「Googleドライブ」で「Googleスプレッドシート」を作成する。
・スプレッドシートのタイトルを入力する。
●スクリプトの入力と初回実行
・メニューの[ツール]→[スクリプトエディタ]で、スクリプトエディタを開く。
・以下のコードを入力する。
/*
* プロジェクト名「rss_hatena」
*
* 「はてブ 新着エントリー」からRSSを取得
* 参考:
* gas - Google Apps ScriptでTwitter botを作ってみた - Qiita
* http://qiita.com/abe-perorist/items/2cedc0f577b4f10b4ccb
*/
function myFunction() {
var url = "http://b.hatena.ne.jp/entrylist?sort=hot&threshold=&mode=rss";
clear();
scraiping(url);
}
function clear() {
// シートを扱う準備
var myActiveSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var myActiveSheet = myActiveSpreadSheet.getSheets()[0];
// 取得したurlを全てクリアする
myActiveSheet.clear();
}
function scraiping(url) {
// シートを扱う準備
var myActiveSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var myActiveSheet = myActiveSpreadSheet.getSheets()[0];
// RSSを取得
var response = UrlFetchApp.fetch(url);
var myRegexp = /<item [^>]+>([\s\S]*?)<\/item>/gi;
var match = response.getContentText().match(myRegexp);
// タイトルとURLを抽出してドライブシートに貼り付け
for (var i in match) {
var txt = match[i];
var ttl = "";
var url = "";
try {
ttl = txt.match(/<title>([\s\S]+?)<\/title>/)[1];
url = txt.match(/rdf:about="(.+?)"/)[1];
} catch(e) {}
myActiveSheet.getRange(myActiveSheet.getLastRow()+1, 1).setValue(ttl);
myActiveSheet.getRange(myActiveSheet.getLastRow(), 2).setValue(url);
}
}
・[Ctrl+S]で保存。プロジェクト名は「rss_hatena」にして[OK]ボタンを押す。
・[右三角](実行)ボタンを押す。
・「承認が必要です」とダイアログが出るので[続行]ボタンを押す。
・[許可]ボタンを押す。(外部との連携のために、最初の1回は承認が必要)
●スクリプトの定期実行
・「時計マーク」(現在のプロジェクトのトリガー)を押す。
・「現在のプロジェクトのトリガー」と出るので、「トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。」リンクを押す。
・[実行]は「myFunction」、[イベント]は[時間主導型][分タイマー][30分ごと]を選ぶ。
・[保存]ボタンを押す。
●スプレッドシートをJSON形式で外部に公開
・スプレッドシートのページに戻る。
・メニューの[ファイル]→[ウェブに公開]を押す。
・「ウェブに公開」ダイアログが表示されるので、[公開]ボタンを押す。
・リンクが選択状態になって表示されるのでコピーする。
・「https://docs.google.com/spreadsheets/d/[key]/pubhtml」の「[key]」の部分をコピーする。
・「https://spreadsheets.google.com/feeds/cells/[key]/od6/public/values?alt=json」の「[key]」の部分をに貼り付ける。
・このURLがJSON形式(JSONP対応)の外部URLになる。
●jQueryで読み込む
・以下のコードを実行すれば、「[{title: "hoge", link: "hoge"}, {…}, {…}, …]」形式の「dArr」を得ることができる。
var url = "上記で作成したURL";
$.getJSON(url, function(data) {
try {
var dArr = [];
$.each(data.feed.entry, function(i, x) {
var pos = i / 2 | 0;
if (i % 2 == 0) {
dArr[pos] = {};
dArr[pos].title = x.content.$t;
} else {
dArr[pos].link = x.content.$t;
}
});
} catch(e) {
console.log("rss load", e);
}
});
●実行サンプル
【
Routine News】
●参考
・
GoogleスプレッドシートのデータをJSONで取得してみた | アライドアーキテクツのクリエイターブログ・
gas - Google Apps ScriptでTwitter botを作ってみた - Qiita