Tripadvisorで管理している店舗のランキングをGASでSlackに毎日自動で通知するようにしてみた

GASでTripadvisorのランキングを自動で取得・Slackに投稿する

お久しぶりです。すべての作業をSlack上で完結させたいと最近思案しているうりりんです。
題してSlack上で引きこもる作戦。

その第一歩として、カンボジアで観光系のお仕事をされている方のサイト運営をお手伝いしているのですが、Google Apps Scriptを用いてTripadvisorのランキングをSlackに毎日自動で取得・通知するようにしてみました。

背景:Tripadvisorのランキングを自動で取得・通知したい

なぜTripadvisor(以下TA)のランキングを自動で取得・通知したいと思うに至ったかというと、その背景には3つの要因があります。

ひとつ目は、約93%の旅行者は予約の意思決定に口コミを参考にしていること。*3
ふたつ目は、TAが世界で最も閲覧されている旅行サイトであること。*4
みっつ目は、ランキングを確認する際に都度TAの管理ページを訪問するのはめんどくさかったこと。

つまり、「Tripadvisorのランキングで上位に入れるかがカンボジアで観光業を営む上で重要な要素となっており、何度もサイトを訪れてランキングを確認していたが、毎回サイトを訪問するのは手間だったのでランキング取得〜通知までを自動化したいと思った」という訳です。

ブックマークに登録しておけば良いのでは?と思われた方も多いと推測しますが、ぼくはブラウザを開いてブックマークを押すその作業すらもめんどくさいと思ってしまいました。
日々データを取得して記録していくとなるとポチポチやるだけと言えど手間ですし、いつも同じ作業をするのであれば自動化させたいなとも思いました。

すべての作業をSlack上で完結させたい。Slackに引きこもりたいと。

やり方:Google Apps ScriptでTripadvisorのランキングを毎日自動でスクレイピングし、Slackに投下させる

さきほどから出ているSlackが何か分からない方に簡単に説明すると、ビジネス用のLINE、外国製のChatworkといった感じのものです。
様々なツールと連携させられるのが特徴で今回のTAのランキングを自動取得・通知させるのも、その連携の事例のひとつです。

今回のやり方は、“Google Apps ScriptでスクレイピングしてSlackに定期ポストするbotを瞬殺で作った”を参照しました。
(参照というかほぼStackShare.ioがTAになっただけという。。)

今回の作業に必要な持ち物は以下の2つです。

持ち物

  1. Slackアカウント
  2. Googleアカウント

Slackを利用されたことがないという方もいらっしゃるかと思いますが、今回はSlackを利用されていること、Googleのアカウントを持っていることを前提に話を進めます。
持っていない方は事前にSlack、Googleのアカウントを取得してから読み進めて下さい。

手順は以下の3ステップです。

手順

  1. Google DriveでGoogle Apps Scriptを新規作成する
  2. Google Apps Scriptで自動取得・通知させるコードを記す
  3. 毎日実行するトリガーを付与する

1. Google DriveでGoogle Apps Scriptを新規作成する

Google Driveを開き、「新規 > その他 > Google Apps Script」をクリックしてGoogle Apps Script(以下GAS)を新規作成します。

Google Apps Scriptを新規作成

以下のような画面が表示されていればGASの新規プロジェクト作成に成功しています。

Google Apps Scriptの編集画面

GASは何かというと、Javascriptベースのスクリプト言語でGoogleのサービスをいろいろカスタマイズできるよというものです。GASが何かはTAのランキングを自動取得・通知させる上で重要なことではないので、なんか便利なツールなのねという認識で問題ないです。

Apps Script is versatile. Among other things, you can: Add custom menus, dialogs, and sidebars to Google Docs, Sheets, and Forms. … Interact with other Google services, including AdSense, Analytics, Calendar, Drive, Gmail, and Maps.

Overview of Google Apps Scriptより

2. Google Apps Scriptで自動取得・通知させるプログラムを記す

さて、GASを開いたらTAのランキングを自動で取得してSlackに投下するためのプログラムを書いていきます。

まずはプロジェクト名を無題のプロジェクトから任意の名前に変更しましょう。
ぼくはtripadvisor_rankとしました。

次に、GASでスクレイピング、Slackに投稿するために2つライブラリを追加します。
ライブラリは何かというと、いろんな機能をまとめてくれている有り難い物とでもイメージしていてください。
ライブラリを利用することで、いちから自分でプログラムを書く必要がなくなります。

SlackAppライブラリ

プロジェクトキー: M3W5Ut3Q39AaIwLquryEPMwV62A3znfOO
出展: Slack BotをGASでいい感じで書くためのライブラリを作った

Parserライブラリ

プロジェクトキー: M1lugvAXKKtUxn_vdAG9JZleS6DrsjUUV
出展: Easy data scraping with Google Apps Script in 5 minutes

ライブラリは、以下の手順で追加できます。

  1. GASプロジェクトの編集画面で「リソース > ライブラリ…」をクリック
  2. ライブラリを追加

  3. 上に記したプロジェクトキーを「ライブラリを検索」に入力
  4. プロジェクトキーを入力しライブラリを検索

  5. 最新バージョンを選択しライブラリを追加
  6. 最新バージョンを選択

  7. 保存ボタンをクリック
  8. 保存ボタンをクリック

SlackAppライブラリ、Parserライブラリを追加したらプログラムを書き進めます。

プログラムの全文はこちらです。

function tripadvisor_rank() {
  var prop = PropertiesService.getScriptProperties().getProperties();
  
  // html文字列を取得
  var html = UrlFetchApp.fetch("あなたの店舗のページURL").getContentText(); 
  
  //取得した文字列からランクを取得
  var rank = Parser.data(html)
                    .from('<span class="">#')
                    .to("</span>")
                    .build()
  
  
  //今日のランキングをSlackに出力
  var today = new Date();
  var yesterday = new Date(new Date - 86400000);
  var fromDate = Utilities.formatDate(today, Session.getTimeZone(), 'yyyy-MM-dd');
    
  var text = "";
  
  text = "\n" + "[Reporting あなたの店舗のお名前 Daily Rank " + "Day: ";
  text += fromDate + "]\n";
  text += "Rank : " + rank + "\n";

  var slackApp = SlackApp.create(prop.token);
  
  slackApp.postMessage("投稿したいSlackのチャンネル名", text , {username : "tripadvisor.com"});
}

「あなたの店舗のページURL」の部分にランキングを取得したい店舗のTripadvisorにおけるURLを代入します。
※tripadvisor.jpではなくtripadvisor.com上の店舗ページURLを入力してください
「あなたの店舗のお名前」の部分にあなたの店舗の名前を代入します。
「投稿したいSlackのチャンネル名」に投稿したいSlackのチャンネル名を代入します。

各プロパティに値を代入

実行ボタンをクリックすると

実行ボタンをクリック

承認を求められるので、「許可を確認」ボタンをクリックします。

「許可を確認」ボタンをクリック

すると次のような確認画面が表示されるのでさらに「許可」ボタンをクリックします。

「許可」ボタンをクリック

次の画像のように指定したSlackのチャンネルに、スクリプト実行時点でのTripadvisorのランキングが通知されます。

スクリプトの実行結果
※ぼかしていますが、実際は「Rank:」の右横にランクが表示されています

3. 毎日実行するトリガーを付与する

ここまでの作業でTripadvisorのランキングをスクレイピングしてSlackで通知するプログラムが組めました。
ここからは毎日自動で本プログラムを実行してくれるよう設定します。

まずは、GASの編集画面で「リソース > 現在のプロジェクトのトリガー」をクリックします。

現在のプロジェクトのトリガーをクリック

次に、「現在のプロジェクトのトリガー」をクリックすると「トリガーが設定されていません。今すぐ追加するにはここをクリックしてください。」と表示されるので支持に従ってクリックします。

言われるがままにクリック!

すると下の画像のようにトリガーの設定画面が出てきますので、実行をtripadvisor_rankに、イベントを左から時間主導型/日タイマー/午前7~8時に設定します。

トリガーを設定

これはtripadvisor_rankのプログラムを毎日午前7~8時の間に実行しますよという設定です。
週に一度で良いよ〜という場合や、ランチ後に通知させたいといった場合はこれらのパラメーターを変更すればOKです。

以上でTripadvisorのランキングを毎日自動でSlackに通知する設定は終わりです。
設定した時間になればピコーンとSlackに通知が届くはずです。

注意点

「<span class=””>#」と「</span>」の間にある文字列を取得して出力させているため、Tripadvisorの仕様が変わりランキング前後のコードが変更されるとランキングが取得できなくなります。

tripadvisor.jpではなくtripadvisor.com上での店舗ページURLを利用したのは、tripadvisor.jpではランキング前後が「<span class>」「位</span>」となっておりtripadvisor.jpとtripadvisor.comとで異なるためです。

まとめ

Google Apps Scriptを用いることで、Tripadvisorのランキングを自動で取得、Slackに通知できるようになりました。
Slack上で引きこもる生活に一歩前進です。

ランキングをSlackに通知するだけだとただTripadvisorのページにランキングを確認しにいくという作業を自動化しただけなので、実際にはランキングに合わせてレビュー数も取得し、Slackに通知するだけでなくスプレッドシートにも出力してストックしています。

トリップアドバイザーのランキング、レビュー数をスプレッドシートに出力

こんな感じで出力されるようにしています。

スプレッドシートへの出力方法はまたいずれ書こうと思います。
また、Tripadvisorのランキングは毎日めまぐるしく変動するものではないので、Slackへの通知はランキングが変動したときにのみ行うよう改善したいと思います。これもまたいずれ。

以上です。

今回お世話になった記事一覧