後回しにしてきた artistId と playlistId であるが、試してみるにしてもパラメータ名がわからない。さてどうしたものか。coverArtMatch コマンドのまとめページでもあれば一発なのだが、そんな都合の良いページは見当たらない。さすがにネタがマニアック過ぎるのだろう。とはいえ今は根気良く検索を続けるしかないわけで・・・。
かなり粘ったように記憶しているが、運良く手掛かりとなりそうなコマンドに出会うことができた。それが initiateSession である。
http://ax.itunes.apple.com/WebObjects/MZInit.woa/wa/initiateSession
上記 URL にアクセスすると、初期化情報と思われるデータが XML 形式で返される。実際に iTunes がこの URL にアクセスしているかは未確認であるが、その可能性はありそうである。取り合えず受け取った XML データの中から cover-art-url に関する情報をピックアップしてみた。
"an", "aan", "pn" についてはそれぞれアーティスト名、アルバムアーティスト名、アルバム名(プレイリスト名)であることはすでにわかっている。残りのパラメータに関してだが CDDB はあまり当てにしていないので cddb-tuid と cddb はスルー。気になるのは a,p,id である。artistId や playlistId が使えそうなパラメータ名ではないか。まずは以下のリクエストを送信して、Boston の artistId と "Third Stage" の playlistId を調べておく。
次に "an" の代わりに "a=artistId" で試してみる。
ダメだった・・・。"p" や "id" に渡してもマッチしない。では気を取り直して "p=playlistId" を試してみる。
おっ、今度はちゃんとマッチするぞ。こいつはもしや・・・。
思ったとおりだ。"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 がコピーされる。
ここで "id" はまさに "Third Stage" のプレイリスト ID である(ちなみに "s" はストアの国コードのようだ)。ただし気をつけて欲しいのは viewAlbum コマンドのときの "id" に限られるということ。アーティストのリンクをコピーした場合、コマンドは viewArtist であり、"id" はアーティスト ID を示している。
さて前回どうしてもマッチさせることができなかった Kansas の "Kansas" であるが、プレイリスト ID を指定すれば一発である。
Proxomitron を使うのであれば iTAW-Substitute リストに以下のようなコマンドを追加すればよい(あくまでテスト用なのでフィルタとしての正確さを期すならばもう一工夫必要)。
ここまで辿りついたのだから、完璧まであともう一歩である。できればローカルプロキシというトリッキーな手は使いたくない。もしプレイリスト ID をタグに埋め込むことが可能で、それを iTunes が自動的に送信してくれるとしたら、我々の手間は単に iTunes ストアでプレイリスト ID を調べて、それを MP3 に書き込むだけでよいことになる。HTTP がどうのとか、Proxomitron がどうのとか言わずに、MP3 を普通に扱う知識だけで iTunes ストアにあるアルバムのアートワークを確実に反映させる手法として確立できるのである。無論「アップルのサーバに存在しないアートワークをトラックに埋め込むことなく登録することは可能か?」に関してはトリッキーにならざるを得ないだろうが、それはまた先の話ということで・・・。
[本章のまとめ]
coverArtMatch ではプレイリスト ID (p) を使ってアルバムを一意に指定できる。この ID は iTunes ストアで該当アルバムの URL をコピーして取得することが可能。現時点では iTunes にプレイリスト ID を自動送信する機能が実装されているかは不明。
かなり粘ったように記憶しているが、運良く手掛かりとなりそうなコマンドに出会うことができた。それが 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 を自動送信する機能が実装されているかは不明。