Web系のこととかー。

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']);
    //ごにょごにょ
}
§402 · 11月 8, 2011 · iPhoneアプリ開発 · · [Print]

Leave a Reply