imabari.hateblo.jp
IDとアクセストークンを取得
Facebook Developers
https://developers.facebook.com/
アクセストークンの有効期限確認
https://developers.facebook.com/tools/debug
Expiresに有効期限
extend access tokenをクリックすると60日間有効になる。
facebook.gsを作成
function facebook() { var sheet = SpreadsheetApp.getActiveSheet(); sheet.clear(); var row = 1; var message, title; var page_id = [ '1581803415398707', //今治市 '529355933789876', //しまなみアースランド・今治自然塾 // '451654508329008', //愛顔つなぐえひめ国体今治市実行委員会 // '846734798739895', //今治市海事都市推進室・ 今治市海事都市交流委員会 '1584197405165144', //今治市勤労青少年ホーム '315810218457131', //FM Radio BariBari '552863164757010', //公益社団法人今治地方観光協会 '552863164757010', //今治市民のまつり「おんまく」 '101284090065667' //FC今治 ]; var url = 'https://graph.facebook.com/v2.3/'; var access_token = 'アクセストークン入力'; for (var i = 0; i < page_id.length; i++) { Logger.log(url + page_id[i] + '/feed?access_token=' + access_token); var result = UrlFetchApp.fetch(url + page_id[i] + '/feed?access_token=' + access_token); var json = result.getContentText(); var data = JSON.parse(json); for (var j = 0; j < 10; j++) { if (data.data[j].message) { message = data.data[j].message.replace(/(^\s+)|(\s+$)/g, ''); title = message.split("\n"); sheet.getRange(row, 1).setValue(title[0]); } else { message = 'なし'; title = data.data[j].from.name; sheet.getRange(row, 1).setValue(title); } sheet.getRange(row, 2).setValue(data.data[j].actions[0].link); sheet.getRange(row, 3).setValue(data.data[j].created_time); sheet.getRange(row, 4).setValue(message); row++; } sheet.sort(3, false); } }
facebook関数をトリガーに登録
imabari.hateblo.jp
を参考に作成
rssTemplate.htmlを作成
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/"> <channel> <title><?= getSpreadSheetTitle() ?></title> <link><?= getSpreadSheerLink() ?></link> <description /> <? for(var i=0;i<50;i++){ if(!getRowData(i)[1]) continue; ?> <item> <title><?= getRowData(i)[0] ?></title> <link><?= getRowData(i)[1] ?></link> <pubDate><?= getRowDate(i) ?></pubDate> <dc:creator>ore</dc:creator> <category /> <description><?= getRowData(i)[3] ?></description> </item> <? } ?> </channel> </rss>
server.gsを作成
var spreadSheetId = "シートID"; var spreadSheet; var range; function doGet() { // スプレッドシート取得 spreadSheet = SpreadsheetApp.openById(spreadSheetId); // 50x4セルのデータを一度に取得しておく range = spreadSheet.getSheetByName('Reader').getRange(1, 1, 50, 4); // テンプレート呼び出し(rssTemplate.html) var output = HtmlService.createTemplateFromFile('rssTemplate'); var result= output.evaluate(); // コンテントタイプ指定 return ContentService.createTextOutput(result.getContent()).setMimeType(ContentService.MimeType.XML); } // 行データ取得 function getRowData(rowNum){ return range.getValues()[rowNum]; } // 日付取得 function getRowDate(rowNum){ var text = range.getValues()[rowNum]; var date = new Date(text[2].substr(0,19).replace('T',' ').replace(/-/g,'/')); return Utilities.formatDate(date, 'JST', 'EEE, d MMM yyyy HH:mm:ss Z'); } // シートのタイトル取得 function getSpreadSheetTitle(){ return spreadSheet.getName(); } // シートのリンク取得 function getSpreadSheerLink(){ return spreadSheet.getUrl(); }
ウェブアプリケーションに登録
v2.4だと記事のURLも取得できない。
feedで取得できるのmessageとcreated_timeだけ
まだしばらくはv2.3使えるのでいいけどFacebookはFacebook以外から見せたくないのかな?
指定された URL に送信されているトラフィックの量が多すぎるため、UrlFetch に失敗しました。
とエラーがでて取得できなくなった。