つばくろぐ @takamii228

知は力なり

App StoreとGoogle Playの評価を日時で通知する

自分たちが関わっているサービスに関する世の中からのフィードバックを確認することは、そのアプリのマーケットでの立ち位置の把握や開発チームのモチベーションを維持する上で重要です。

iOSであればAppStore、AndroidであればGoogle Play上でユーザから5段階評価とコメントが載せられています。

ここの情報をチャット上に日時で通知する仕組みを作ってみたのでまとめます。

Nodeのモジュールでスクレイピング結果を取得する

いろいろ検索してみたら、ちょうどよさそうなnpmモジュールがあったので、Node.jsで書くことにしました。

www.npmjs.com

www.npmjs.com

こんな感じでアプリケーションのIDと言語を指定するだけでスクレイピング結果をJSONオブジェクトとして取得できます。今回はサンプルとしてChromeアプリを使います。

const store = require('app-store-scraper');

const iosAppId = '535886823';
const iosReview = store.app({id: iosAppId, country: 'jp'});

iosReview.then(function(value){
    console.log(value);
});

Google Playの場合

const gplay = require('google-play-scraper');

const androidAppId = 'com.android.chrome';
const androidReview = gplay.app({appId: androidAppId, lang: 'ja', country: 'jp'})

androidReview.then(function(value){
    console.log(value);
});

Androidの方はscoreGoogle Playで表示されている値がとれそうですが、iOSの方はappではscoreの値は0.5刻みで丸め込まれているようなので、ratingsから自分で平均点を計算します。

const store = require('app-store-scraper');

const iosAppId = '535886823';
const iosRatings = store.ratings({id: iosAppId, country: 'jp'});

iosRatings.then(function(value){
    console.log(value);
   // 自分で平均点を計算
    var rate = (1*value['histogram']['1'] + 2*value['histogram']['2']
    + 3*value['histogram']['3'] + 4*value['histogram']['4'] + 5*value['histogram']['5']) / value['ratings'];
    console.log(rate);
});

結果

{
  ratings: 8103,
  histogram: { '1': 1998, '2': 918, '3': 1269, '4': 1426, '5': 2492 }
}
3.184622979143527

チャットへPOSTする

あとはこの結果をSlackやMattermostへ連携するだけです。それぞれWebhookのURLを発行し、POSTのリクエストを組めばOKです。

slack.com

docs.mattermost.com

今回はMattermost用に作っていて、Slackでも使えるように拡張しようと調べたときに気づいたのですが、Slackの投稿領域のMarkdownって結構制約があるんですね。表が使えない。

www.markdownguide.org

コード一式はGitHubにまとめました。よかったら参考にしてみてください。

github.com

実行するときはnodeコマンドでスクリプトを実行すればOKです。

$ npm install
$ node app.js

f:id:takamii228:20200223163229p:plain

f:id:takamii228:20200225123453p:plain

無事表示されました。

これをAWS LambdaやGitLab CI/JenkinsのScheduledジョブに設定しておくことで、毎日のストア評価の変化を追うことができるようになります。