クイック エンジニアリングブログ

株式会社クイック Web事業企画開発本部のエンジニアリングチームが運営する技術ブログです。

アプリの新着レビューをChatworkに通知する【GAS】

yumeです。スマホアプリの設計も担当してます。
最近はbotに興味があります。
響きと存在がかわいいですよね。もっとたくさん働いてほしいです。

ということで、
アプリストアに新しいレビューが投稿されたら
その内容をChatworkに通知する

使ったもの

developer.searchman.com
Zapier | The easiest way to automate your work

流れ

  1. GASでSearchMan APIにリクエストを飛ばし、アプリのレビューデータを取得
  2. 取得したレビューのうち新しいものだけをスプレッドシートに出力
  3. Zapierで、「スプレッドシートが更新されたらChatworkに通知する」ZAPを作成
  4. 作成したGASを定期実行させればOK!

SearchMan APIに登録する

ストアレビューの取得ですが、以下の理由からこのAPIを使うことにしました。

  • iTunesConnectのRSSは、Zapierでうまくparseできない
  • GooglePlayは調べたけどよくわからん

Google Play Android Developer APIを使えばいいのかと思いましたが、
情報が少なかったので途中でめげました

てそもそもiOSAndroidで別の処理するのめんどくさい。
そこまで時間をかけたくもなかった。
「新着レビューがついたらメール通知」って機能、意外とないんですね。

SearchMan APIは、無料版のアカウントで月100リクエストいけるということだったので、
4日おきに1回リクエストすることにしました。


登録したり試しにAPI叩いたりするところは結構すんなり通りました٩(๑′∀ ‵๑)۶

GAS書いてみる

Javascriptはいつも雰囲気でなんとかしている初心者ですが、
LINEbotをGASで作って以降、GASは好きになってきました。
ちょっとしたスクリプト書くのは全部GASでやってしまいそうです。

エラー処理してないし、穴はいっぱいありますが、動くことは動きます。

function getAppliReview() {
  var platform = '【iosまたはandroid】',
      appId = '【アプリID】';

  return searchmanApiCall(platform,appId);
}  

function searchmanApiCall(platform,appId) {
//SerchManのAPIにリクエストをする
  
  var baseUrl = 'http://api.searchman.io/v1/',
      APIKey = '【SearchManのマイページで確認したAPIKey】';
  
  //記録用のスプレッドシートの準備
  var sheet = SpreadsheetApp.openById('【記録用スプレッドシートのID】').getSheetByName('【シート名】');
  
  //リクエストURLの作成
  var APIUrl = baseUrl + platform + '/jp/app/reviews?appId=' + appId + '&apiKey=' + APIKey;
  //Logger.log(APIUrl);
  
  var result = UrlFetchApp.fetch(APIUrl);
  
  //結果をparse
  var resjson = JSON.parse(result.getContentText());
  var today = new Date();
  //4日前の時間を算出
  var startdate = new Date(today.getTime()-1000*60*60*24*4);
  
  for(var i=0; i<resjson.data.length; i++) {
    var resdata = resjson.data[i];
    //レビュー投稿日時をミリ秒に変換
    var reviewdate_ms = Date.parse(resdata.timestamp.replace( /-/g , '/' ));
    var reviewdate = new Date(reviewdate_ms);
    
    //直近4日より新しいレビューのみの処理
    if(reviewdate.getTime() > startdate.getTime()){
      var star = '';
      //レートを星表記に変更
      for(var j=0; j<resdata.rating; j++){
        star += '★';
      }
      //シートの最終行に挿入
      sheet.appendRow([platform,resdata.title,star,resdata.body,resdata.author,resdata.timestamp]);
    }
  }
  
  return 0;
}

Zapierでぽちぽち設定

Zapierは元々使っていたので、新しいZAPを作るだけでした!
スプレッドシートの連携とか超簡単にできてびっくりです。

ChatworkのAPI使ってもよかったんですが、投稿内容とかGUIで制御できたほうが楽しいかなと思いました。
Zapierもマイブーム(ㆁᴗㆁ✿)

こんな感じ

f:id:aimstogeek:20160603182855p:plain

かわいいいいいいいい(*´ω`*)
アプリ開発グループに通知させるように設定。
みんなのモチベーションあがるといいな~


ですが、Zapier無料アカウントのリクエスト制限にひっかかっていたので、
ZAPのステータスをONにできず。
テスト投稿はできたので、実用化はもう少しだけ先のようです。
悲しい。