Google Apps ScriptでTwitterの検索結果を自動でチャットワークに通知

bird

photo credit: chirp via photopin (license)

みなさん、こんにちは!
GASでチャットワークに色々と通知しまくってますタカハシ(@ntakahashi0505)です。

さて、前回はGoogle Apps Scriptでスプレッドシートにリストしてある名言をランダムに選んでチャットワークに送るbotを作成しました。

429 Too Many Requests

引き続き色々なものを送りつけるべくプログラミングなどんどを進めていきたいと思いますが、今回はGoogle Apps Scriptを使ってTwitterのエゴサーチ結果をチャットワークに通知する方法を紹介していきます。

ハブサービスIFTTTと前回の内容の応用でこれまた比較的簡単にできますので、ぜひチャレンジ頂ければと思います。

では行ってみましょう!

スポンサーリンク

なぜGoogle Apps ScriptでTwitterとチャットワークの連携を組むのか?

自分や自分のブログなどの言及を検索することをエゴサーチなどと言いますが、企業やブロガーなどにとってはかなり重要な情報源となります。

自分でいちいち検索するのは面倒なので、こういうのはコンピュータに任せて自動でやるのが一番!

ということで、定期的にTwitterでエゴサーチをした結果をチャットワークに送信して教えてくれる方法をこちらの記事で紹介していました。

【祝】Zapier連携!Twitterのツイートをチャットワークに通知するぞ
チャットワークがZapier経由でGmailや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が動作するように設定して、もしスプレッドシートに未送信のツイートが含まれていればその内容を整形してチャットワークに通知をします。

動作の流れをまとめますと

  1. Twitterでの特定のキーワードでの検索結果で新しいものがあった場合にIFTTTのトリガーが発火
  2. アクションとしてそのツイート内容がスプレッドシートに追加される
  3. 時限式でスクリプトを動作させる
  4. チャットワークに送信していないツイートについてチャットワークに送信する

という手順となります。

では、それぞれの手順について解説をしていきますね。

IFTTTでレシピを作成する

まずIFTTTでTwitterのエゴサーチ結果をスプレッドシートに書き込むレシピを作成していきます。

今回は、ポイントのみお伝えしていきますので、IFTTTでのレシピの作り方についての丁寧に知りたい場合はこちらの記事をご覧ください。

毎日絶対やる!と心に決めたタスクを自動でTrelloのToDoに追加する方法
Trelloはカンバン方式のタスク管理ツールです。タスクの中には定期的に発生するものがあります。IFTTTを使えばTrelloへの定期タスクの自動追加が簡単にできますので、その方法をお伝えします。

TwitterをIFTTTのトリガーとして設定

さて、まずIFTTTのトリガーとしては特定のキーワードによるTwitterでの新たな検索結果「New tweet from search」を選択します。

IFTTTのトリガーをツイッターの検索結果に設定

検索内容としては自分のアカウントからのツイートは除外したブログのURLということで

「tonari-it.com -from:@ntakahashi0505」

と設定しました。

GoogleスプレッドシートをIFTTTのアクションとして設定

次にアクションとしてGoogleドライブの「Add row to spreadsheet」を選択しまして、設定項目はこちらです。

IFTTTのアクションをスプレッドシートに記入に設定

スプレッドシート名、フォルダ名はGoogleドライブ内に準備されたスプレッドシートのものを指定します。

記録内容はユーザー名「UserName」、ツイート内容「Text」、ツイートURL「Link To Tweet」、ツイート日次「CreatedAt」の4項目ですが、これはデフォルトで入力されていますので、そのままでOKです。

これにてIFTTTでのレシピが完成です。

IFTTTのレシピが完成

レシピを直接追加されたい場合はこちらをどうぞ。

IFTTT Recipe: Twitterエゴサーチの結果をスプレッドシートに追加する connects twitter to google-drive

スプレッドシートへのツイートの記録を確認

これは実際に自分以外の誰かがツイートしないとテストができないのですが、複数アカウントを持っていればそれで試してみても良いかも知れません。

ツイートがあると、スプレッドシートに記録がされているはずです。

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を用いて

for(初期条件;条件式;更新式){
// 処理~
}

と書きます。条件式が成り立っている間は波括弧内の処理を行います。

例えば今回の場合は、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文は

if(条件式){
// 処理
}

と書きます。条件式が成り立っていれば波括弧内の処理を行います。

今回の場合は、現在の行番号をiとして

if(mySheet.getRange(i,5).getValue()==""){
 ~処理~
}

とします。現在の行についてその5列目のセルに何も入力されていなければ、まだチャットワークへの送信は行われていないので、送信の処理を行うということです。

setValueメソッドで完了の印を入力する

チャットワークへの送信が完了したら、その行についてはその証拠を残します。

スプレッドシートで使われていない5列目に「send」と値を入力したいと思います。

GASでセルに値を入力する場合はRangeオブジェクトに対するsetValueメソッドを使いまして

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分ごとに設定

ここで、イベントを「時間主導型」「分タイマー」「15分ごと」に設定をします。

まとめ

これにてTwitterのエゴサーチをチャットワークに自動で通知することができるようになりました。しかも無料です。

今回も相変わらず詰め込んでしまいましたが

  • for文による繰り返し
  • if文による条件分岐
  • セルへの値の入力

など、超重要な内容で盛りだくさんでした。ぜひマスター頂ければと思います。

またIFTTTでスプレッドシートに行を追加するアクションを活用することで、例えばTwitter以外にもInstagram、Trello、Rescue TimeなどIFTTTで連携可能な様々なアプリケーションの動作をトリガーとしてGASを動作させることができるという点に注目してください。

工夫次第でもう無限大の可能性を秘めていますね…!

次回はこちらの記事でスプレッドシートの入力完了通知をチャットワークに送る方法です。

【幹事必見!】スプレッドシートの入力が完了したらチャットワークに自動で通知する方法
複数人でスプレッドシートを入力している際に入力完了をチャットワークに自動で通知できたら便利ですよね。今回は、Google Apps Scriptを使ってた力完了通知ツールの作り方について解説をします。

引き続き色々なアイデアについてお伝えできればと思いますので、どうぞお楽しみに!

連載目次:初めてのGoogle Apps Scriptで自動でチャットワークに色々と送る

最初のお題にも限らずチャットワークを中心に操作していきます。スプレッドシートやカレンダーをはじめとするGoogleサービスはもちろん、Twitterなどの外部のサービスともAPIで連携させて色々なものをチャットワークに通知してみますよ。
  1. Google Apps Scriptの第一歩、初心者でもチャットワークにメッセージを送れる
  2. Google Apps Scriptでチャットワークの名言botを作る方法
  3. Google Apps ScriptでTwitterの検索結果を自動でチャットワークに通知
  4. 【幹事必見!】スプレッドシートの入力が完了したらチャットワークに自動で通知する方法
  5. スプレッドシートのリストアップ件数をGASでチャットワークに通知する
  6. GASでチャットワークにGoogleアナリティクスの前日レポートを自動送信
  7. GASでGoogleアナリティクスの記事ランキングをチャットワークに送る
  8. Google Apps ScriptでWordPressの更新情報をチャットワークに送る
  9. 毎朝、当日の予定をGoogleカレンダーから取得してチャットワークに送る
  10. 【Google Apps Script】天気予報をWeb APIで取得する方法
  11. 【GAS】JSON形式のデータを取り出してチャットワークに天気予報を送る

コメント

  1. 枝豆 より:

    すごく分かりやすくまとめられており、
    他の記事含め5時間程熟読していまいました!!

    有難う御座います。

    • 枝豆様

      コメントありがとうございます!
      引き続き、お役に立てる情報を提供していければと思っておりますので、今後ともよろしくお願いいたします!

タイトルとURLをコピーしました