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

2009-05-09 02:31:41 | iPhone, iPod & iTunes
後回しにしてきた artistId と playlistId であるが、試してみるにしてもパラメータ名がわからない。さてどうしたものか。coverArtMatch コマンドのまとめページでもあれば一発なのだが、そんな都合の良いページは見当たらない。さすがにネタがマニアック過ぎるのだろう。とはいえ今は根気良く検索を続けるしかないわけで・・・。

かなり粘ったように記憶しているが、運良く手掛かりとなりそうなコマンドに出会うことができた。それが initiateSession である。

http://ax.itunes.apple.com/WebObjects/MZInit.woa/wa/initiateSession

上記 URL にアクセスすると、初期化情報と思われるデータが XML 形式で返される。実際に iTunes がこの URL にアクセスしているかは未確認であるが、その可能性はありそうである。取り合えず受け取った XML データの中から cover-art-url に関する情報をピックアップしてみた。
a
p
id
cddb-tuid
cddb
an
aan
pn

"an", "aan", "pn" についてはそれぞれアーティスト名、アルバムアーティスト名、アルバム名(プレイリスト名)であることはすでにわかっている。残りのパラメータに関してだが CDDB はあまり当てにしていないので cddb-tuid と cddb はスルー。気になるのは a,p,id である。artistId や playlistId が使えそうなパラメータ名ではないか。まずは以下のリクエストを送信して、Boston の artistId と "Third Stage" の playlistId を調べておく。
GET /WebObjects/MZStoreServices.woa/wa/coverArtMatch HTTP/1.1
User-Agent: iTunes
X-Apple-Store-Front: 143441-1
Host: ax.itunes.apple.com

an=Boston
pn=Third Stage

次に "an" の代わりに "a=artistId" で試してみる。
GET /WebObjects/MZStoreServices.woa/wa/coverArtMatch HTTP/1.1
User-Agent: iTunes
X-Apple-Store-Front: 143441-1
Host: ax.itunes.apple.com

a=60960
pn=Third Stage

ダメだった・・・。"p" や "id" に渡してもマッチしない。では気を取り直して "p=playlistId" を試してみる。
GET /WebObjects/MZStoreServices.woa/wa/coverArtMatch HTTP/1.1
User-Agent: iTunes
X-Apple-Store-Front: 143441-1
Host: ax.itunes.apple.com

an=Boston
p=96968

おっ、今度はちゃんとマッチするぞ。こいつはもしや・・・。
GET /WebObjects/MZStoreServices.woa/wa/coverArtMatch HTTP/1.1
User-Agent: iTunes
X-Apple-Store-Front: 143441-1
Host: ax.itunes.apple.com

p=96968

思ったとおりだ。"p=playlistId" はアルバムを一意に指定できるパラメータらしい。やっと探していたものが見つかった。おそらく playlistId は iTunes が独自で管理している ID であろう。アップルのサーバに存在するアルバムであればプレイリスト ID は付けられていると推測できる。つまり "p" さえ指定できればアーティスト名やアルバム名の送信は不要となるわけで、表記のゆれも気にする必要がなくなる。しかし XML データを取得しなければ プレイリスト ID がわからないというのでは本末転倒である。なんといっても XML データを取得するためにプレイリスト ID が必要なのだから・・・。

さて「どのようにしてプレイリスト ID を取得するか」が次の悩みどころとなった。iTunes の通信をトラップしたり、色々と手の込んだ調査をしてみたのだが、中々いい結果は得られない。しかし灯台下暗し、答えは意外にも身近なところに転がっていた。実は iTunes ストアでは右クリックメニューから "Copy iTunes Store URL" でページの URL をコピーすることができるのだが、この操作をアルバムに対して行った場合、URL にはプレイリスト ID が含まれているのである。例えば Boston のアルバムをストアで一覧表示させ、"Third Stage" の画像を右クリックすると次のような URL がコピーされる。
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?id=96968&s=143441

ここで "id" はまさに "Third Stage" のプレイリスト ID である(ちなみに "s" はストアの国コードのようだ)。ただし気をつけて欲しいのは viewAlbum コマンドのときの "id" に限られるということ。アーティストのリンクをコピーした場合、コマンドは viewArtist であり、"id" はアーティスト ID を示している。
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewArtist?id=60960

さて前回どうしてもマッチさせることができなかった Kansas の "Kansas" であるが、プレイリスト ID を指定すれば一発である。
GET /WebObjects/MZStoreServices.woa/wa/coverArtMatch HTTP/1.1
User-Agent: iTunes
X-Apple-Store-Front: 143441-1
Host: ax.itunes.apple.com

p=192658145

Proxomitron を使うのであれば iTAW-Substitute リストに以下のようなコマンドを追加すればよい(あくまでテスト用なのでフィルタとしての正確さを期すならばもう一工夫必要)。
$URL((*pn=Kansas)1) $RDIR(1&p=192658145)

ここまで辿りついたのだから、完璧まであともう一歩である。できればローカルプロキシというトリッキーな手は使いたくない。もしプレイリスト ID をタグに埋め込むことが可能で、それを iTunes が自動的に送信してくれるとしたら、我々の手間は単に iTunes ストアでプレイリスト ID を調べて、それを MP3 に書き込むだけでよいことになる。HTTP がどうのとか、Proxomitron がどうのとか言わずに、MP3 を普通に扱う知識だけで iTunes ストアにあるアルバムのアートワークを確実に反映させる手法として確立できるのである。無論「アップルのサーバに存在しないアートワークをトラックに埋め込むことなく登録することは可能か?」に関してはトリッキーにならざるを得ないだろうが、それはまた先の話ということで・・・。

[本章のまとめ]
coverArtMatch ではプレイリスト ID (p) を使ってアルバムを一意に指定できる。この ID は iTunes ストアで該当アルバムの URL をコピーして取得することが可能。現時点では iTunes にプレイリスト ID を自動送信する機能が実装されているかは不明。

最新の画像もっと見る