概要
この記事は 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 を要求している箇所に貼り付けます。
次にプロジェクトIDを聞かれますので、https://cloud.google.com/console#/project をブラウザで開き、自分の適当なプロジェクトを開いて左上の Overview をクリックします。すると、プロジェクトIDが表示されますので、それをコピーして貼り付けます。
これで gsutil が使えるようになりました。試しに、以下のコマンドを実行してみましょう。
% gsutil ls gs://<report bucket ID>/reviews/
なお、<report bucket ID>
は自分のアプリの「評価とレビューのページ」に行き、一番下にスクロールすると書いてありますので、その値で置き換えてください。
上記のコマンドを実行すると、(レビューがあれば)月ごとのレビューが 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
コマンドを用いて、以前のファイルと新しいファイルを比較して差分を出力します。注意点として、
- レビューの CSV ファイルの先頭には BOM (Byte Order Mark) が含まれているので、予め除去してやる必要がある
- 以前のレビューはどこかに取っておく必要がある
- 以前のレビューが消されたり更新されている場合がある
が挙げられます。1 については nkf
コマンドで、2 については、ディレクトリを1つ作ってそこにいま存在する CSV ファイルを移動させてからダウンロードすることにしました。また、3 については消されたものは無視して更新されたものは再び投稿する、という挙動にしました。
また、今回は社内で使っているチャットシステムの HipChat に通知するために、出力を awk
で整形し、 jq
で JSON 形式にエンコーディングしてから curl
コマンドで投稿しています。
自動化スクリプト
以上をスクリプトにしたものを Gist に公開しておきます。
https://gist.github.com/hkurokawa/1b8c2f4321397b9b26cd
このスクリプトの使い方を簡単に説明しておきます。
-
printNewReviews.sh
とpostNewReviewsHipchat.sh
をパスが通っているところに保存します -
コンソール上で以下の環境変数をセットします
-
GOOGLE_BUCKET_ID
上で述べた report bucket ID です -
APP_PACKAGE
レビューを取得したい Android アプリのパッケージ名です -
HIPCHAT_TOKEN
HipChat の API を実行するために使用するトークンです -
ROOM_ID
HipChat のルーム ID です
-
-
適当なディレクトリに移動します
ある程度、ディスクの空き容量が必要です。50MB 程度は確保しておきましょう。 -
postNewReviewsHipchat.sh
を実行します
CSV ファイルがダウンロードされ、通知が順次 HipChat に投稿されます
定期実行
自動化は、どこかのサーバーで cron
などで定期的に実行するのが一番お手軽でしょう。あるいは、ボットがいるなら、そこで動かしても良いかもしれません。予め gsutil
などのツールのインストールや設定を忘れないようにしましょう。