IFTTTとGASを使用してGoogleカレンダーと連動するTwitterBotを作成した(はいふりイベントBot)

最近、はいふり関連のイベントをGoogleカレンダーから取得し、自動で呟き続けるTwitterBotを作成した。ミケちゃん目印のアカウント、気に入った方はぜひフォローしてほしい。

twitter.com

こいつを作るために何をやったかについて、備忘録として残しておく。

 

IFTTTを用いてGoogleカレンダーの情報をTwitterに投稿

まずやりたかったことは以下の2つ。

  • 期間中のイベントを一定時間間隔でツイートする
  • イベントの開始時間になったらその旨ツイートする

とりあえずこれだけできればいいか。という考えでTwitterBotを実現できる技術がないか探してみたところ。IFTTT(イフト)というサービス同士を結びつける素晴らしいサービスがあった。

ifttt.com

このサービスはGoogleカレンダーTwitterに限らず様々なサービスを連結させることができる。詳しくは調べてほしい。

GoogleカレンダーTwitterとの連携に関しては以下の記事が詳しい。

hearthstone-dojo.blogspot.jp

IFTTTでGoogleカレンダーを用いる場合、以下のアクションでTwitterへの投稿が可能となっている。

  • イベントを追加したとき
  • イベントの開始時間になったとき
  • 指定された文言を含むイベントの開始時間になったとき

2番目がやりたいことにドンピシャである。さらに、「イベント追加時にツイートできるならそれもいいな!」と思って1番目の設定も入れた。

実際のツイートがこんな感じ。

前後十五分くらい時間がずれるけど、十分十分。

 

GASを用いてGoogleカレンダーの内容を定期的にツイート

続いて、定期的にGoogleカレンダーの内容をツイートすることはできないか調べてみた。するとGoogle Apps Script(GAS)というこれまた素晴らしいサービスが!

GASはJavascriptを用いてgoogleドキュメントに対する操作を行うためにあるらしいが、Googleカレンダーの操作やTwitterへの投稿も可能なのである。

さらに素晴らしいのがトリガ機能。「一時間ずつ実行」とかトリガを設定してやることで、その間隔で自動的にスクリプトを動かすことができる。サーバをこちらで立てる必要などないのである。

んで、GASによるTwitterへの投稿処理が詳しく書いてあるのが以下のサイト。感謝極まりない。

kijtra.com

上記サイトのTwitter投稿スクリプトをそのまま使わせていただいているが、以下のように1文でTwitterに投稿できてとても便利!

function cal_notice() {
    var res = Twitter.tweet("\[定期\]はいふり色々カレンダーでははいふりイベントをまとめています。\n是非ご活用ください! https://goo.gl/dXBybb");
}

 さらにここからGoogleカレンダーとの連携を行った。

function event_notice() {
  //カレンダーIDを指定して、対象のカレンダー情報を読み込み
  var cals = CalendarApp.getCalendarById("XXXXXXXXXXXXXXXXXXX@group.calendar.google.com");
  var d1 = new Date();
  var d2 = new Date();
  d2.setMinutes(d2.getMinutes()+1);
  
  //指定した日時の間で行われているイベントを取得
  var evts = cals.getEvents(d1,d2);
  
  if (evts.length > 0){
    //イベント一覧の中から対象を選択してツイート
    var r = Math.floor( d1.getHours() % evts.length);
    var res = Twitter.tweet("\["+d1.getHours()+"時のお知らせ\]\[期間中!\]"+evts[r].getTitle()+"-"+evts[r].getLocation()+"-\n https://goo.gl/dXBybb");
  }
}

 

上で出ている「カレンダーID」の取得方法は以下。

  1. Googleカレンダーの右端にある▽ボタンの押下し、「Calendar settings」を選択

    f:id:no_known:20171015122419j:plain

  2. 開いたページで「Calendar ID」の記載があるのでそれを取得

    f:id:no_known:20171015122433j:plain

これだけで簡単にGoogleカレンダーの内容をTwitterに投稿できてしまう。便利な世の中になった・・・。ちなみにTwitterには重複投稿の規制があるので、過去10ツイートぐらいを見て、同じ投稿は拒否されるようだ。なので「~時のお知らせ」という文言をつけて、これを乱暴に回避している。

 

GASはまだまだいろいろなことが出来そうなので、はいふりイベントBotも機能拡張していく予定。