みなさん、こんにちは!
GASでチャットワークに色々と通知しまくってますタカハシ(@ntakahashi0505)です。
さて、前回はGoogle Apps Scriptでスプレッドシートにリストしてある名言をランダムに選んでチャットワークに送るbotを作成しました。
引き続き色々なものを送りつけるべくプログラミングなどんどを進めていきたいと思いますが、今回はGoogle Apps Scriptを使ってTwitterのエゴサーチ結果をチャットワークに通知する方法を紹介していきます。
ハブサービスIFTTTと前回の内容の応用でこれまた比較的簡単にできますので、ぜひチャレンジ頂ければと思います。
では行ってみましょう!
なぜGoogle Apps ScriptでTwitterとチャットワークの連携を組むのか?
自分や自分のブログなどの言及を検索することをエゴサーチなどと言いますが、企業やブロガーなどにとってはかなり重要な情報源となります。
自分でいちいち検索するのは面倒なので、こういうのはコンピュータに任せて自動でやるのが一番!
ということで、定期的にTwitterでエゴサーチをした結果をチャットワークに送信して教えてくれる方法をこちらの記事で紹介していました。
では、なぜわざわざGoogle Apps Scriptを使って同じ機能を実現する必要があるのでしょうか?
以前紹介した方法は、Zapierというハブサービスを利用しています。
Zaiperに「Twitterでの特定のキーワードでの検索結果で新しいものがあった」というのをトリガーとして、アクションとして「チャットワークにその内容を送る」というルール(ZapierではZapと言いますが)を登録しておくことで、自動でその動作をしてくれるようになります。
ですが、このZapier。無料で登録している場合は毎月にこのZapを動作させられる回数(ZapierではTaskと言いますが)が100回までと決められているのです。
この2015年10月は、ありがたいことに皆さんからのツイートによる紹介を頂けました関係で、このTaskの上限に達してしまったのです。
おかげで通知が止まってしまいました…。
ここでとるべき手段は有料に登録するか、別の方法を模索するかなのですが、当然お金は払いたくありませんので、別の方法を検討した次第です。
そこで、出てきたのがGoogle Apps Scriptです。
GASによるTwitterエゴサーチのチャットワーク通知システム
まず、今回のシステムの方針をまとめます。
Twitterのエゴサーチについては、Zapierとは別のハブサービスIFTTTを使います。Zapierより連携アプリや機能が若干劣りますが、無料登録でも動作回数などの制限はなく使用できます。
トリガーとしては、以前の方法と同様「Twitterでの特定のキーワードでの検索結果で新しいものがあった」を設定します。
アクションとして何を使うか?なのですが、これをGoogleスプレッドシートをアクションとします。
該当のツイートについて、アカウント名、ツイート内容、リンクURLなどをスプレッドシートに一行ずつ追加してもらうわけです。
GASではイベントトリガーを使って自動でスクリプトを動作させることができますから、一定間隔の時限式でGASが動作するように設定して、もしスプレッドシートに未送信のツイートが含まれていればその内容を整形してチャットワークに通知をします。
動作の流れをまとめますと
- Twitterでの特定のキーワードでの検索結果で新しいものがあった場合にIFTTTのトリガーが発火
- アクションとしてそのツイート内容がスプレッドシートに追加される
- 時限式でスクリプトを動作させる
- チャットワークに送信していないツイートについてチャットワークに送信する
という手順となります。
では、それぞれの手順について解説をしていきますね。
IFTTTでレシピを作成する
まずIFTTTでTwitterのエゴサーチ結果をスプレッドシートに書き込むレシピを作成していきます。
今回は、ポイントのみお伝えしていきますので、IFTTTでのレシピの作り方についての丁寧に知りたい場合はこちらの記事をご覧ください。
TwitterをIFTTTのトリガーとして設定
さて、まずIFTTTのトリガーとしては特定のキーワードによるTwitterでの新たな検索結果「New tweet from search」を選択します。
検索内容としては自分のアカウントからのツイートは除外したブログのURLということで
「tonari-it.com -from:@ntakahashi0505」
と設定しました。
GoogleスプレッドシートをIFTTTのアクションとして設定
次にアクションとしてGoogleドライブの「Add row to spreadsheet」を選択しまして、設定項目はこちらです。
スプレッドシート名、フォルダ名はGoogleドライブ内に準備されたスプレッドシートのものを指定します。
記録内容はユーザー名「UserName」、ツイート内容「Text」、ツイートURL「Link To Tweet」、ツイート日次「CreatedAt」の4項目ですが、これはデフォルトで入力されていますので、そのままでOKです。
これにてIFTTTでのレシピが完成です。
レシピを直接追加されたい場合はこちらをどうぞ。
スプレッドシートへのツイートの記録を確認
これは実際に自分以外の誰かがツイートしないとテストができないのですが、複数アカウントを持っていればそれで試してみても良いかも知れません。
ツイートがあると、スプレッドシートに記録がされているはずです。
一つのツイートが一行に記載され、新たなものは逐次リストの下に追加されていきます。
Google Apps Scriptでチャットワークにツイートを通知する
次にGoogle Apps Scriptでスプレッドシートに記録されたツイートをチャットワークに通知するスクリプトを組んでいきます。
これには前回のこちらのスクリプトを再利用しますよ。
function ssBot() { var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得 var maxRow=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 var numRow=Math.floor(2+Math.random()*(maxRow-1)); //2~maxRowの間のランダムの整数をチョイス /* チャットワークに送る文字列を生成 */ var strBody = "[info][qt]n" + mySheet.getRange(numRow,1).getValue() + "n[hr]" + mySheet.getRange(numRow,2).getValue() + "n(" + mySheet.getRange(numRow,3).getValue() + ")[/info]"; /* チャットワークにメッセージを送る */ var cwClient = ChatWorkClient.factory({token: '------------------------'}); //チャットワークAPI cwClient.sendMessage({ room_id:XXXXXXXX, //ルームID body: strBody }); }
これはスプレッドシートの名言リストからランダムに行を選んでチャットワークに送信するというものです。
今回の場合、チャットワークに送信する行は、ランダムでチョイスするわけではなくて「まだチャットワークに送信したことがない行」が対象となります。
従いまして、一度チャットワークに送信した行については5列目に「send」と記載して、すでに送信したことを記録するようにします。
つまり「send」と記載がない行についてチャットワークに送信する、という動作をさせればOKです。
それでは具体的にスクリプトを組んでいきます。
for文でスプレッドシートを行を全てチェックする
まずスプレッドシートの全ての行について、その5列目に送信済みの記録つまり「send」
が記入されていないかを確認しますので、繰り返し処理を使います。
Google Apps ScriptはJavaScriptの記述がベースになっていますから、繰り返しの処理にはfor文を使うことができます。
書き方としてはカウント用変数のiを用いて
// 処理~
}
と書きます。条件式が成り立っている間は波括弧内の処理を行います。
例えば今回の場合は、1行目から最終行までを繰り返しますので、最終行が変数maxRowに格納されているとすると
for(var i=1;i<=maxRow;i++){ //処理 }
変数iをカウント用の変数として
- 初期条件:最初は1行目からなのでi=1から始まります
- 条件式:iが最終行maxRowと同じ値になるまで繰り返します
- 更新式:iは繰り返すたびに1ずつ増えます(i++はi=i+1の簡略した書き方)
という意味です。
if文で5列目に値が入力されているかどうかを判別する
次に5列目に値が入力されていれば処理をしない、値が入力されていなければ処理をする、という部分をif文による条件分岐で組んでいきます。
if文は
// 処理
}
と書きます。条件式が成り立っていれば波括弧内の処理を行います。
今回の場合は、現在の行番号をiとして
if(mySheet.getRange(i,5).getValue()==""){ ~処理~ }
とします。現在の行についてその5列目のセルに何も入力されていなければ、まだチャットワークへの送信は行われていないので、送信の処理を行うということです。
setValueメソッドで完了の印を入力する
チャットワークへの送信が完了したら、その行についてはその証拠を残します。
スプレッドシートで使われていない5列目に「send」と値を入力したいと思います。
GASでセルに値を入力する場合はRangeオブジェクトに対するsetValueメソッドを使いまして
と書きます。
ですから今回の記述としては
mySheet.getRange(i,5).setValue("send");
と書きます。
スクリプトを実行する
では今回のプログラムをまとめますね。
function cwFromTweet() { var mySheet=SpreadsheetApp.getActiveSheet(); //シートを取得 var maxRow=mySheet.getDataRange().getLastRow(); //シートの使用範囲のうち最終行を取得 /* 全ての列について繰り返し */ for(var i=1;i<=maxRow;i++){ //5列目がnullであればチャットワークにメッセージを送信 if(mySheet.getRange(i,5).getValue()==""){ /* チャットワークに送る文字列を生成 */ var strBody = "[info][title]Tweet from " + mySheet.getRange(i,1).getValue() + "[/title]" + mySheet.getRange(i,2).getValue() + "n[hr]" + mySheet.getRange(i,3).getValue() + "n" + mySheet.getRange(i,4).getValue() + "[/info]"; /* チャットワークにメッセージを送る */ var cwClient = ChatWorkClient.factory({token: '----------------'}); //チャットワークAPI cwClient.sendMessage({ room_id:XXXXXXXX, //ルームID body: strBody }); /* 送信済みのツイートには5列目に"send" */ mySheet.getRange(i,5).setValue("send"); } } }
for文で全ての行について繰り返しを行いつつ、各行について5列目に値がなければチャットワークへの送信と5列目への「send」のセル入力を行います。
これを実行すると
無事にツイート内容が通知されました。
またスプレッドシートのほうは
5列目に「send」が記入されます。次回以降はif文の条件からは外れるようになります。
イベントトリガーを時限式で動作するように設定
動作確認ができたところで、スクリプトが自動動作するようにイベントトリガーを設定します。
IFTTTの動作間隔は「15分」ですので、GASもそれに合わせて「15分ごと」に設定をします。
スクリプトエディタのメニューから「リソース」→「現在のプロジェクトのトリガー」を選択してウィンドウを開きます。
ここで、イベントを「時間主導型」「分タイマー」「15分ごと」に設定をします。
まとめ
これにてTwitterのエゴサーチをチャットワークに自動で通知することができるようになりました。しかも無料です。
今回も相変わらず詰め込んでしまいましたが
- for文による繰り返し
- if文による条件分岐
- セルへの値の入力
など、超重要な内容で盛りだくさんでした。ぜひマスター頂ければと思います。
またIFTTTでスプレッドシートに行を追加するアクションを活用することで、例えばTwitter以外にもInstagram、Trello、Rescue TimeなどIFTTTで連携可能な様々なアプリケーションの動作をトリガーとしてGASを動作させることができるという点に注目してください。
工夫次第でもう無限大の可能性を秘めていますね…!
次回はこちらの記事でスプレッドシートの入力完了通知をチャットワークに送る方法です。
引き続き色々なアイデアについてお伝えできればと思いますので、どうぞお楽しみに!
連載目次:初めてのGoogle Apps Scriptで自動でチャットワークに色々と送る
最初のお題にも限らずチャットワークを中心に操作していきます。スプレッドシートやカレンダーをはじめとするGoogleサービスはもちろん、Twitterなどの外部のサービスともAPIで連携させて色々なものをチャットワークに通知してみますよ。- Google Apps Scriptの第一歩、初心者でもチャットワークにメッセージを送れる
- Google Apps Scriptでチャットワークの名言botを作る方法
- Google Apps ScriptでTwitterの検索結果を自動でチャットワークに通知
- 【幹事必見!】スプレッドシートの入力が完了したらチャットワークに自動で通知する方法
- スプレッドシートのリストアップ件数をGASでチャットワークに通知する
- GASでチャットワークにGoogleアナリティクスの前日レポートを自動送信
- GASでGoogleアナリティクスの記事ランキングをチャットワークに送る
- Google Apps ScriptでWordPressの更新情報をチャットワークに送る
- 毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る
- 【Google Apps Script】天気予報をWeb APIで取得する方法
- 【GAS】JSON形式のデータを取り出してチャットワークに天気予報を送る
コメント
すごく分かりやすくまとめられており、
他の記事含め5時間程熟読していまいました!!
有難う御座います。
枝豆様
コメントありがとうございます!
引き続き、お役に立てる情報を提供していければと思っておりますので、今後ともよろしくお願いいたします!