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']); //ごにょごにょ }