iTunes Connect Daily Report Auto Download Script


んや集計するほどのアプリまだないんだけど。準備。集計アプリっていろいろあるけどどれも勝手にやってくれるわけじゃないっぽいので、せめてダウンロードだけでも自動でやっとくやつ。ほっとくと消えてくしね。cron で 1 日 1 回適当な時間に走らせればダウンロードしといてくれる。Google Analytics みたいにメールで送るとか iTunes Connect 側でやってくれたらいいのになー。

#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize;
use Config::Pit;
use Web::Scraper;
use IO::File;

# config
my $config = pit_get('iTunesConnect', require => {
    'username' => 'username',
    'password' => 'password'
});

# login
my $url = 'https://itts.apple.com/cgi-bin/WebObjects/Piano.woa';
my $mech = WWW::Mechanize->new();
$mech->agent_alias('Windows IE 6');
$mech->get($url);
$mech->submit_form(
    form_number => 1,
    fields  => {
        'theAccountName'    => $config->{username},
        'theAccountPW'      => $config->{password}
    }
);
if ($mech->title() ne 'iTunes Label Connect') {
    die "cannot loged in: " . $mech->title();
}

# select daily
$mech->submit_form(
    form_name   => 'frmVendorPage',
    fields      => {
        '9.7'   => 'Summary',
        '9.9'   => 'Daily',
        'hiddenDayOrWeekSelection'  => 'Daily',
        'hiddenSubmitTypeName'      => 'ShowDropDown'
    }
);


# download
my $opts = scraper {
    process 'select#dayorweekdropdown > option', 'date[]' => 'TEXT';
}->scrape($mech->content, $mech->uri);

my $latest = $opts->{date}[0];

$mech->submit_form(
    form_name   => 'frmVendorPage',
    fields      => {
        '9.7'   => 'Summary',
        '9.9'   => 'Daily',
        '9.11.1'    => $latest,
        'download'  => 'Download',
        'hiddenDayOrWeekSelection'  => $latest,
        'hiddenSubmitTypeName'      => 'Download'
    }
);

if ($mech->res()->header('Content-Disposition') =~ /filename=(.*)/) {
    print $1 . "\n";
    my $file = new IO::File($1, 'w');
    if (defined $file) {
        print $file $mech->content();
        $file->close;
    }
}

パッケージ足りなかったら CPAN で入れる。ログイン ID & PW は
perl -MConfig::Pit -e'Config::Pit::set("iTunesConnect", data=>{username=>"hoge\@example.com",password=>"hoge"})'
てな感じで設定。