iTunes ConnectからSalesを取得するスクリプト

売り上げ推移を毎日記録しておきたいなぁと思ったので、iphoneアプリで稼げるのかさんで公開されているRubyスクリプトベースで、iTunes ConnectからSalesを取得するRubyスクリプトを自分用に作り直してみました。
AppSales-Mobileで見やすくiPhoneでチェックできるのですが、まぁ、自己満足みたいなものです。

特徴としては、

  • 今のiTunes Connectの今(2010/01/11)の構成に対応
  • リストからすべてのDaily/Weeklyのレポートをいったん取得
  • ダウンロード済みのファイルと内容の差異を確認して、異なればファイルに保存

するようにしたので、毎日実行しなくても大丈夫なはず。

require 'rubygems'
require 'mechanize'

####################
#itunes conncetアカウント
$id = 'foo'
$pass = 'bar'
####################
 
def login(agent)
  login_page = agent.get("https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa")
  login_form = login_page.forms[0]
  login_form['theAccountName'] = $id
  login_form['theAccountPW'] = $pass
  home = agent.submit(login_form)
end

def checkAndSave(filename, body)
  original = String.new filename
  i = 1
  while true do
    if(File.exist?(filename)) then
	  f = open filename
	  s = f.read
	  f.close
	  if(s == body) then
	    return
	  end
	  filename = "#{original}.#{i}"
	  i += 1
	else
      f = open(filename, "wb")
      f.write body
      f.close
	end
  end
end

def download(agent)
  sales_page = agent.get("https://itts.apple.com/cgi-bin/WebObjects/Piano.woa")
  sales_form = sales_page.forms[1]
  sales_form['11.9']='Summary'
  sales_form['11.11'] = 'Daily'
  sales_form['hiddenSubmitTypeName'] = 'ShowDropDown'
  
  download_page = agent.submit(sales_form)
  download_form = download_page.forms[1]
  download_form.field_with(:name => '11.13.1').options.each do |option|
    download_form['11.9']='Summary'
    download_form['11.11'] = 'Daily'
    download_form['11.13.1'] = option.value
    download_form['hiddenSubmitTypeName'] = 'Download'
    download_form['download'] = 'Download'
	filename = "#{option.text.gsub('/', '_').downcase}.txt"
	body = agent.submit(download_form).body
	checkAndSave(filename, body)
  end
  
  sales_page = agent.get("https://itts.apple.com/cgi-bin/WebObjects/Piano.woa")
  sales_form = sales_page.forms[1]
  sales_form['11.9']='Summary'
  sales_form['11.11'] = 'Weekly'
  sales_form['hiddenSubmitTypeName'] = 'ShowDropDown'
  
  download_page = agent.submit(sales_form)
  download_form = download_page.forms[1]
  download_form.field_with(:name => '11.15.1').options.each do |option|
    download_form['11.9']='Summary'
    download_form['11.11'] = 'Weekly'
    download_form['11.15.1'] = option.value
    download_form['hiddenSubmitTypeName'] = 'Download'
    download_form['download'] = 'Download'
	filename = "#{option.text.gsub('/', '_').downcase}.txt"
	body = agent.submit(download_form).body
	checkAndSave(filename, body)
  end
end

agent = WWW::Mechanize.new

login agent
download agent

$id = 'foo', $pass = 'bar'に自分のアカウントを設定し、事前に保存対象のディレクトリにcdして使ってください。また、事前にgemでMechanizeをインストールする必要があります。手元のWindows(Cygwin), Mac環境で動作しました。