Google Apps ScriptでSlackに毎朝Google Calendarの予定を流す

"王様達のヴァイキング"の9巻が出てる!と思ったら8巻を買ってなかった…

買い忘れないように

新刊.netを使う。 キーワードを登録すると発売日のリストを出してくれる。Kindle版の発売日にも対応していて便利。 iCal形式のカレンダーも作ってくれるので、Google Calendar等から参照すると使ってるカレンダーアプリから通知が来る。 これで買い忘れることは無くなった。

すぐ買えるように

発売日だと分かっても、購入するまでに

  1. amazonに行って、
  2. タイトル入力して検索かけて、

を毎回繰り返すのは面倒。 早く読みたいというのが真の願いなので、発売日が知れるだけでなく、少しでも早く購入出来るようになっている方が便利。 ASINが分かれば最高だったけど、さすがに望めなそうなので検索結果ページヘのリンクを付けることにする。 通知先はまたもSlack。自分の中では自分宛にpush通知したいときにとりあえず使うもの、という扱いになっている気がする。

前と同じように下のコードを日タイマーで動くように設定した。

function notifyNewBooks() {
  var date = new Date();
  var titles = titles_(date);
  if (titles.length > 0) {
    var mmdd = Utilities.formatDate(date, 'GMT+0900', 'MM/dd');
    var text = mmdd + "の新刊\n" + titles.map(function(x) { return x + "\n" + url_(x) }).join("\n");
    notify_(text);
  }
}

function notify_(text) {
  var payload = {
    text: text,
    channel: '#general',
    username: '新刊通知',
    icon_emoji: ':books:'
  }
  var url = 'https://hooks.slack.com/services/xxxxxxxxxx/xxxxxxxxxx/xxxxxxxxxx';
  UrlFetchApp.fetch(url, { method: 'POST', payload: JSON.stringify(payload) });
}

function titles_(date) {
  var id = 'xxxxxxxxxx';
  return CalendarApp.getCalendarById(id).getEventsForDay(date).map(function(x) { return x.getTitle(); });
}

function url_(title) {
  var x = 'http://www.amazon.co.jp/s/ref=nb_sb_noss?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&url=search-alias%3Daps&field-keywords=';
  return x + encodeURIComponent(title);
}

これで、

  1. 発売日になったら通知がきて、
  2. リンクから(わりと)すぐに買う

ことができるようになった。便利。