プログラミングノート

一からものを作ることが好きなエンジニアの開発ブログです。

iTunes Connectのダウンロードレポートを解析するスクリプト

個人のアプリはappfiguresというサイトを使って管理しているのですが、会社で必要となったのでさくっと書いてみました。ウィークリーレポートのみですが、ちょっと直せば色々使えると思います。


こんな感じでダウンロード数、アップデート数が出力されます。

...
2010/11/29     3418      125
2010/12/6     3387       20
2010/12/13     3405    14868
2010/12/20     8266     5346
2010/12/27    10083     2041
2011/1/3     6577     2589

total download  105406
total update    30268


アプリ名を指定するとそのアプリのみの数字が出力されます。

ruby report.rb "Best Album"


ご自由にどうぞ。

# -*- coding: utf-8 -*-
PATH = '/path/to/report/dir/*S_W*.txt'

target_app = ARGV[0]
total = { :download => 0, :update => 0 }
weekly_report = []

Dir.glob(PATH).each do |file|
  weekly = { :download => 0, :update => 0 }
  week = nil
  report_type = -1

  open(file, 'r') do |f|
    f.each_with_index do |l, index|
      e = l.split("\t")

      if index == 0
        report_type = (e.size == 18) ? 0 : 1 and next
      elsif index == 1
        tmp = ((report_type == 0) ? e[9] : e[11]).split('/')
        week = Time.local(tmp[2], tmp[0], tmp[1])
      end

      if report_type == 0
        n = { :name => e[4], :type => e[6].to_i, :unit => e[7].to_i }
      elsif report_type == 1
        n = { :name => e[6], :type => e[8].to_i, :unit => e[9].to_i }
      end
      next if target_app && n[:name] != target_app

      sym = (n[:type] == 1) ? :download : :update
      total[sym] = total[sym] + n[:unit]
      weekly[sym] = weekly[sym] + n[:unit]
    end
  end

  weekly_report << [week, weekly[:download], weekly[:update]]
end

weekly_report.sort{ |a, b| a[0] <=> b[0] }.each do |w|
  puts sprintf("%d/%2d/%2d %8d %8d", w[0].year, w[0].month, w[0].day, w[1], w[2])
end

puts "\n"
puts "total download  #{total[:download]}"
puts "total update    #{total[:update]}"
puts "\n"