ShellScript
Android

アプリのレビューを HipChat で自動通知する

More than 3 years have passed since last update.


概要

この記事は Google Play に公開されている自分のアプリのレビューを定期的に取得し、前回からの更新分を通知する仕組みの作り方について説明しています。本稿では、HipChat に投稿するやり方を説明しますが、多少手を加えることで Slack やメールなど、お好みの方法で通知が可能です。


アプリのレビューの取得

まず、Google Play からレビューを自動で取得しなければなりません。レビューは CSV 形式で提供されており、ダウンロードのやり方はアプリの評価とレビューを確認する - Android デベロッパー ヘルプに解説してあります。


gsutil のインストール

https://cloud.google.com/storage/docs/gsutil の手順に従って gsutil をインストールし、設定しましょう。pip がすでにインストールされていれば、以下のコマンドでインストールされます。

$sudo pip install gsutil


gsutil の設定

gsutil configを実行すると、以下のように表示され、https://accounts.google.comで始まるURLへのアクセスが求められるのでブラウザで開きます。

% gsutil config

This command will create a boto config file at /home/hiroshi/.boto
containing your credentials, based on your responses to the following
questions.
Please navigate your browser to the following URL:
https://accounts.google.com/o/oauth2/auth?scope=...

そうすると、以下のようなコードが表示されますので、それをコピーして、コンソールの authorization code を要求している箇所に貼り付けます。

Selection_002.png

次にプロジェクトIDを聞かれますので、https://cloud.google.com/console#/project をブラウザで開き、自分の適当なプロジェクトを開いて左上の Overview をクリックします。すると、プロジェクトIDが表示されますので、それをコピーして貼り付けます。

Selection_003.png

これで gsutil が使えるようになりました。試しに、以下のコマンドを実行してみましょう。

% gsutil ls gs://<report bucket ID>/reviews/

なお、<report bucket ID>は自分のアプリの「評価とレビューのページ」に行き、一番下にスクロールすると書いてありますので、その値で置き換えてください。

Selection_006.png

上記のコマンドを実行すると、(レビューがあれば)月ごとのレビューが CSV ファイル形式で保存されたファイル一覧が表示されるはずです。ファイルを実際にダウンロードするには、以下のコマンドを用います。ここで、<package name>は、自分のアプリのパッケージ名で置き換えてください。

% gsutil cp -r "gs://<report bucket ID>/reviews/reviews_<package name>*" /path/to/your/local/dir

本来であれば、リモートとローカルの差分だけ取得したいところです。実際、gsutil には rsync コマンドが用意されているのですが、なぜか gsutil rsync -d -r "gs://<report bucket ID>/reviews/" /path/to/your/local/dir を実行しても、すべてのファイルをダウンロードしてしまいました。


CSV ファイルの差分の出力と通知

さて、レビューのダウンロード方法は分かりましたが、実際に運用する際には、定期的に更新を調べ、その差分をどこかに通知したいところです。

ここでは、Unix コマンドの comm コマンドを用いて、以前のファイルと新しいファイルを比較して差分を出力します。注意点として、


  1. レビューの CSV ファイルの先頭には BOM (Byte Order Mark) が含まれているので、予め除去してやる必要がある

  2. 以前のレビューはどこかに取っておく必要がある

  3. 以前のレビューが消されたり更新されている場合がある

が挙げられます。1 については nkf コマンドで、2 については、ディレクトリを1つ作ってそこにいま存在する CSV ファイルを移動させてからダウンロードすることにしました。また、3 については消されたものは無視して更新されたものは再び投稿する、という挙動にしました。

また、今回は社内で使っているチャットシステムの HipChat に通知するために、出力を awk で整形し、 jq で JSON 形式にエンコーディングしてから curl コマンドで投稿しています。


自動化スクリプト

以上をスクリプトにしたものを Gist に公開しておきます。

https://gist.github.com/hkurokawa/1b8c2f4321397b9b26cd

このスクリプトの使い方を簡単に説明しておきます。



  1. printNewReviews.shpostNewReviewsHipchat.sh をパスが通っているところに保存します

  2. コンソール上で以下の環境変数をセットします



    • GOOGLE_BUCKET_ID 上で述べた report bucket ID です


    • APP_PACKAGE レビューを取得したい Android アプリのパッケージ名です


    • HIPCHAT_TOKEN HipChat の API を実行するために使用するトークンです


    • ROOM_ID HipChat のルーム ID です



  3. 適当なディレクトリに移動します

    ある程度、ディスクの空き容量が必要です。50MB 程度は確保しておきましょう。


  4. postNewReviewsHipchat.sh を実行します

    CSV ファイルがダウンロードされ、通知が順次 HipChat に投稿されます



定期実行

自動化は、どこかのサーバーで cron などで定期的に実行するのが一番お手軽でしょう。あるいは、ボットがいるなら、そこで動かしても良いかもしれません。予め gsutil などのツールのインストールや設定を忘れないようにしましょう。