iTunesConnectからアプリダウンロード数レポートを取得する方法
iPhoneアプリのダウンロード数などは、iTunesConnect内のSales and Trendsからレポートを参照・ダウンロードできます。が、データを保持してくれる期間も短い上に、フィルタ機能が貧弱という、なんか使いにくいもの。
そこで、ダウンロードできるタブ区切りデータを毎日自動取得してみようというわけです。
最初は、PerlのMechanizeとか使って自動ログイン後、データを取得しようとしていたんですが、どうにも上手く行かず彷徨っていたら、普通にApple謹製の自動取得プログラムがありました。
iTunes Connect Sales and Trends Guide
この中の Auto-Ingest Instructions という項目で説明があります。
JAVAプログラム
http://www.apple.com/itunesnews/docs/Autoingestion.class.zip
使い方は、ガイドにある通り
java Autoingestion <username> <password> <vendorid> <report_type> <date_type> <report_subtype> <date_yyyymmdd>
です。
| 名前 | 値 | 備考 |
|---|---|---|
| username | iTunesConnectユーザID | |
| password | iTunesConnectパスワード | |
| vendorid | 8####### | Sales and Trendsの右上にある8から始まる数字 |
| report_type | Sales | 現在はこれだけ? |
| date_type | Daily or Weekly | 日別レポートか、週別レポートか。毎日ダウンロードするなら日別 |
| report_subtype | Summary or Opt-In | 通常はSummary |
| date | YYYYMMDD | 指定をしないと最新の日付。 |
これで
java Autoingestion hoge@example.com password 8100000 Sales Daily Summary 20111106
とすれば自動的にgzipなレポートが保存されます。
レポートファイルをPHPで毎日自動取得
あとはshとかperlとかでプログラムをcronで動かせば良いんですが、今回はPHPでやってみます。
<?php
$date = date('Ymd', strtotime('-2 day'));
$command = 'java -cp "/home/zaru/itunes_report" Autoingestion hoge@example.com password 8100000 Sales Daily Summary ' . $date;
exec($command,$result);
exec('gunzip ' . $result['0']);
$filename = str_replace('.gz','',$result['0']);
これで、$filenameにレポートテキストファイルが格納されます。
はまったのは、javaのパス指定の仕方。-cp “プログラムの置いてあるパス” と指定しないとエラーになります。後は、タブ区切りのデータから必要なものを抜き出してDBに入れるなりなんなりしてください。
2011-11-09 追記:上記PHPプログラムだと、cronで正常に取得できません
普通にコマンドラインで実行すると、正常に取得できるんですが、cronで実行すると環境変数の問題で正常にjavaを動かせませんでした。なので、素直にshで実行するものを作りました。
get.sh
#!/bin/bash
#環境変数をセット
export PATH=/usr/kerberos/bin:/usr/java/default/bin:/usr/local/bin:/bin:/usr/bin:/home/zaru/bin
export JAVA_HOME=/usr/java/default
DIR=/home/zaru/itunes_report
GETDAY=`date +%Y%m%d -d '2 days ago'`
cd $DIR
RESULT=`java -cp "$DIR" Autoingestion hoge@example.com password 8100000 Sales Daily Summary $GETDAY`
arr=(`echo $RESULT`)
gunzip $DIR/${arr[0]}
php -f $DIR/import.php ${arr[0]/.gz/}
import.php
<?php
$dir = '/home/zaru/itunes_report';
if(file_exists($dir . $argv['1'])){
echo $argv['1'] . "¥n";
$data = file($dir . $argv['1']);
//ごにょごにょ
}