最近、はいふり関連のイベントをGoogleカレンダーから取得し、自動で呟き続けるTwitterBotを作成した。ミケちゃん目印のアカウント、気に入った方はぜひフォローしてほしい。
こいつを作るために何をやったかについて、備忘録として残しておく。
IFTTTを用いてGoogleカレンダーの情報をTwitterに投稿
まずやりたかったことは以下の2つ。
- 期間中のイベントを一定時間間隔でツイートする
- イベントの開始時間になったらその旨ツイートする
とりあえずこれだけできればいいか。という考えでTwitterBotを実現できる技術がないか探してみたところ。IFTTT(イフト)というサービス同士を結びつける素晴らしいサービスがあった。
このサービスはGoogleカレンダーとTwitterに限らず様々なサービスを連結させることができる。詳しくは調べてほしい。
GoogleカレンダーとTwitterとの連携に関しては以下の記事が詳しい。
IFTTTでGoogleカレンダーを用いる場合、以下のアクションでTwitterへの投稿が可能となっている。
- イベントを追加したとき
- イベントの開始時間になったとき
- 指定された文言を含むイベントの開始時間になったとき
2番目がやりたいことにドンピシャである。さらに、「イベント追加時にツイートできるならそれもいいな!」と思って1番目の設定も入れた。
実際のツイートがこんな感じ。
[イベント開始!]りっちゃんお誕生日メニュー発売 神奈川県横須賀市 衣笠商店街 ファリーヌ October 12, 2017 https://t.co/FI6Kz1HQTo
— はいふりイベントBot (@haifuri_event_b) 2017年10月11日
前後十五分くらい時間がずれるけど、十分十分。
GASを用いてGoogleカレンダーの内容を定期的にツイート
続いて、定期的にGoogleカレンダーの内容をツイートすることはできないか調べてみた。するとGoogle Apps Script(GAS)というこれまた素晴らしいサービスが!
GASはJavascriptを用いてgoogleドキュメントに対する操作を行うためにあるらしいが、Googleカレンダーの操作やTwitterへの投稿も可能なのである。
さらに素晴らしいのがトリガ機能。「一時間ずつ実行」とかトリガを設定してやることで、その間隔で自動的にスクリプトを動かすことができる。サーバをこちらで立てる必要などないのである。
んで、GASによるTwitterへの投稿処理が詳しく書いてあるのが以下のサイト。感謝極まりない。
上記サイトの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」の取得方法は以下。
- Googleカレンダーの右端にある▽ボタンの押下し、「Calendar settings」を選択
- 開いたページで「Calendar ID」の記載があるのでそれを取得
これだけで簡単にGoogleカレンダーの内容をTwitterに投稿できてしまう。便利な世の中になった・・・。ちなみにTwitterには重複投稿の規制があるので、過去10ツイートぐらいを見て、同じ投稿は拒否されるようだ。なので「~時のお知らせ」という文言をつけて、これを乱暴に回避している。
[11時のお知らせ][期間中!]ハイスクール・フリート ぷにきゃらパネル受注生産受付期間-神奈川県横須賀市 さかくら総本家横須賀中央店-
— はいふりイベントBot (@haifuri_event_b) 2017年10月15日
https://t.co/FI6Kz1ZrKW
GASはまだまだいろいろなことが出来そうなので、はいふりイベントBotも機能拡張していく予定。