Androidのメモとか

ポキオの日記です。今日も遅延してない。

Google Apps ScriptでブログのRSSを監視して新しい投稿があったらIFTTTのトリガーを発火させる

すごいどうでもいいんですが。

はてなブログってIFTTTに対応してないんですよね

自動化したいけど、IFTTT未対応。それならGASでスクリプトを書けば良いのでは。そう思い立ってスクリプトを書いてみました。

相変わらずのクソコードをお許し下さい。

var rssHatena = "http://relativelayout.hatenablog.com/rss";
var sheetId = "(Google SpreadsheetのID)";
var iftttUrl = "(IFTTTのURL)";


function checkHatena() {
  var lastPost = getLastPost(rssHatena);
  var lastPostGuid = getGuid(lastPost);
  var savedPostGuid = getGuidOnSheet('hatena');
  
  if(lastPostGuid == savedPostGuid){
    return;
  }
  
  triggerIfttt(getTitle(lastPost), getLink(lastPost));
  setGuidOnSheet('hatena', lastPostGuid);
}

function getLastPost(url){
  var xml = XmlService.parse(UrlFetchApp.fetch(url).getContentText());
  var root = xml.getRootElement();
  var channel = root.getChildren('channel');
  var items = channel[0].getChildren('item');
  return items[0];
}

function getGuid(post){
  return post.getChildren('guid')[0].getValue();
}

function getLink(post){
  return post.getChildren('link')[0].getValue();
}

function getTitle(post){
  return post.getChildren('title')[0].getValue();
}

function getGuidOnSheet(sheetName){
  var spreadsheet = SpreadsheetApp.openById(sheetId);
  var sheet = spreadsheet.getSheetByName(sheetName);
  var data = sheet.getSheetValues(1, 1, 1, sheet.getLastColumn()); 
  return data[0][0];
}

function setGuidOnSheet(sheetName, guid){
  var spreadsheet = SpreadsheetApp.openById(sheetId);
  var sheet = spreadsheet.getSheetByName(sheetName);
  var array = [guid];
  sheet.clear();
  sheet.appendRow(array);
}

function triggerIfttt(title, link){
  var payload =
      {
        "value1" : title,
        "value2" : link
      };
  
  var options =
      {
        "method" : "post",
        "payload" : payload
      };
  
  UrlFetchApp.fetch(iftttUrl, options);
}

ざっくり言うと、RSSの最新投稿のGUIDをSpreadsheetに保存しておく。定期的にRSSの最新投稿のGUIDをチェックして、保存しているGUIDと違ったら新しい投稿があったと判断して、IFTTTにHTTP POSTをするというもの。こんなんで良いのかな・・・。

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。