iTunes のアートワーク機能を探る 其の弐

2009-05-06 00:20:42 | iPhone, iPod & iTunes
「X-Apple-Store-Front ヘッダの正体を暴く」の巻

iTunes の通信をシミュレートする上で最も重要となるのが X-Apple-Store-Front ヘッダ。iTunes ストアは国ごとに管理されており、どの国のストアにアクセスするかはこのヘッダで指定することになる。データはハイフンで区切られた二つのフィールドから構成され、最初のフィールドはアクセスする iTunes ストアの国コード、二番目のフィールドはストアの表示言語となっている。日本語版の iTunes で日本のストアにアクセスするときは以下のヘッダが送出される。
X-Apple-Store-Front: 143462-9

"143462" が日本のストア、"9" が日本語のインターフェイスを表すコードである。これらの組み合わせでストアの表示が決定する。例えば Proxomitron などで X-Apple-Store-Front ヘッダを 143462-1 に書き換えれば日本のストアを英語表示させることもできる("1" は英語のインターフェイスを表す)。反対に 143441-9 とすれば US のストアを日本語表示にもできる。ストアコードの詳細は以下のページにまとめられているので参照されたし。

http://blogs.oreilly.com/iphone/2008/08/scraping-appstore-reviews.html

アートワークの取得において、表示言語の指定は省略することも可能だが、国コードのほうは重要な鍵を握っている。というのもアートワークの有無はストアごとに異なるため、US のストアにしかないアルバムは US の国コードでアクセスしないとアートワークが取得できないのである。

まずは前回試した Boston の "Third Stage" であるが、以下の二つのリクエストメッセージを Ship-a-tie にインポートしてそれぞれ試して欲しい。上は US のストア、下は日本のストアである(表示言語は省略)。
GET /WebObjects/MZStoreServices.woa/wa/coverArtMatch?an=Boston&pn=Third%20Stage HTTP/1.1
User-Agent: iTunes
X-Apple-Store-Front: 143441
Host: ax.itunes.apple.com

GET /WebObjects/MZStoreServices.woa/wa/coverArtMatch?an=Boston&pn=Third%20Stage HTTP/1.1
User-Agent: iTunes
X-Apple-Store-Front: 143462
Host: ax.itunes.apple.com

両者とも返された XML データにおいて status には 0 がセットされ、cover-art-url には何らかの URL が指定されているはずである。では Journey の "Escape" で試してみよう。
GET /WebObjects/MZStoreServices.woa/wa/coverArtMatch?an=Journey&pn=Escape HTTP/1.1
User-Agent: iTunes
X-Apple-Store-Front: 143441
Host: ax.itunes.apple.com

GET /WebObjects/MZStoreServices.woa/wa/coverArtMatch?an=Journey&pn=Escape HTTP/1.1
User-Agent: iTunes
X-Apple-Store-Front: 143462
Host: ax.itunes.apple.com

US のストアでは status に 0 が返るが、日本のストアでは 3004 がセットされ、cover-art-url も空データである。おそらく 3004 は "Not Found" を表すエラーコードであろう。つまり日本のストアのアカウントでログインしている限り、iTunes では Journey の "Escape" のアートワークを取得できないということである。日本のストアを直接覗いてみても、やはり "Escape" アルバムは見つからない(US のストアにはちゃんとあった)。

US のアカウントでログインしてアートワークを取得すればこの問題は解決するが、日本に居住している者が US のアカウントを取得するのはかなり難しい。一番楽な方法は Proxomitron などを利用したヘッダの書き換えとなるだろう。例えば以下のようなフィルタを作成して適時有効にさせれば US のストアからもアートワークをダウンロードすることができるようになる。ただし常時有効にしてはいけない。なぜなら今度は日本のストアのみに存在するアートワークを取得できなくなるからである。
[HTTP headers]
In = FALSE
Out = TRUE
Key = "X-Apple-Store-Front: iTunes Store (United States)"
URL = "ax.itunes.apple.com/"
Replace = "143441"


[本章のまとめ]
アートワークを効率よく取得するには、いくつかの国コードでリクエストを試行する必要があるだろう。

最新の画像もっと見る