メタ情報とジャケットを集める
楽曲名とアーティスト名のセットは取れたので、このセットから楽曲を検索し、その楽曲のメタ情報と、ジャケット画像を取ってきます。メタ情報とジャケット画像はどちらかしか取れない場合は、同じ楽曲で別のサービスを利用して検索しもう一方を取得することができますが、メタ情報は大体どこでもくれる一方、ジャケット画像をバンバンDLさせてくれるところは実は希少です。
今回はレートのバランスとDBの豊富さなどを鑑みて、殆どの情報はGracenoteから取得しました。
iTune Search API
Appleの提供するiTune StoreのAPI。かなり条件がいいがドキュメントが控えめに言ってクソ。
- URL : https://affiliate.itunes.apple.com/resources/documentation/itunes-store-web-service-search-api/
- APIキー :不要
- 取れるメタ情報 : ジャンル、価格、国、発売日など
- ジャケット取得 :可(600x600まで)
- Rate limit : 基準はないが、負荷をかけるとIPに対するレスポンスがどんどん遅くなるらしい
- Pythonとの連携 : URL作ってrequestsで叩く
- コメント :曲の量は非常に豊富で、APIキーが不要というのも非常に良い。しかしドキュメントが不完全で異常に不親切かつソートが変更不可。隠しクエリが存在しファミコンの裏技探しに近い苦行を強いられる。
Gracenote Web API
Gracenoteは会社の管理する音楽データベース。iTuneでCDを入れると自動でタグ付けされるのは、このサイトからメタ情報を取ってきているから。ユーザが登録もできるので、同人音楽とかでもメタ情報はかなりある。
- URL : https://developer.gracenote.com/ja
- APIキー :要
- 取れるメタ情報 : tracks(track_name,mood,tempo),genres,country,artist_type(男性複数のグループみたいな情報),released year
- ジャケット取得 :可(だいたい450x450ぐらい。あったりなかったり。)
- Rate limit : 発行したアプリケーションごとの規制で、メタ情報は数千/day、画像は数百/day。詳細はサーバの状況依存。
- Pythonとの連携 : https://github.com/cweichen/pygn
- コメント :曲は大抵あるがジャケットが意外とない。6割ぐらい。あとtempoはあったりなかったり。コンシューマキー発行から5分程度はキーが有効にならず、user accountの登録は出来るが検索は130 Hello Errorとかいう謎のエラーを返すという初心者殺しのトラップがあるので注意。
Discogs API
Discogsはユーザ投稿型の音楽データベースサイト。ジャケット画像などもユーザ投稿のもの。
- URL : https://www.discogs.com/developers/
- APIキー : 要
- 取れるメタ情報 : country,released,genre,styles(より詳細なジャンル),lowest_price,tracklist(trackname,duration)
- ジャケット取得 : 可(サイズは投稿者依存、ないものもある)
- Rate limit : IPごとの規制で、メタ情報は240/min、画像の取得は1000/day
- Pythonとの連携 : https://github.com/discogs/discogs_client
- コメント :ユーザ投稿型だけあって、投稿が洋楽、アイドル、同人、オタクカルチャーなどにかなり偏っている。メタデータに関してはDiscogsのジャケット画像を除いたダンプが毎月xmlで配布されているので、こちらをDLしてAPIでimageだけ取得するとエコ。
Spotify Web API
Spotifyはストリーミング音楽配信サービスの一つ。最近日本にも進出したらしい(割に日本の曲があんまり登録されていないように見えるが大丈夫だろうか)。データベースはDiscogsに並び巨大なデータを要するEcho Nestを買収して得たものらしい。
- URL https://developer.spotify.com/web-api/
- APIキー : 必須ではないがないとrate limitが下がる。
- 取れるメタ情報 : genre,popularity,release_date,trackes(track,duration)
- ジャケット取得 : 可
- Rate limit : 明記がないが、stackoverflowなどを見るに数回/secレベルは大丈夫らしい。
- Pythonとの連携 : https://github.com/plamere/spotipy
- コメント : 日本語のCDが見つからないというか、そもそも日本語では検索できないのではという感じがある。日本進出に時間を書けているし日本向けのDBはまだ本番に乗っていないのかも。APIキー不要なのでAPIを試すのはすぐできる。
Amazon Product Advertising API
Amazonの商品検索APIで、「曲名」で検索してヒットする商品のサムネは多分ジャケットになっているということを利用しジャケットの画像を得ることができます。CDのタグ付けソフトで画像のリストから選ぶように言ってくる奴はこれを利用しているようです。
- URL http://webservices.amazon.com/scratchpad/index.html
- APIキー : 要
- 取れるメタ情報 : たぶん発売年度とかは取れるのでは
- ジャケット取得 : 可(たまにない)
- Rate limit : 1/secかつ3600/hour
- Pythonとの連携 : https://github.com/lionheart/bottlenose
- コメント : APIキーとしてAWSのルートアカウントのアクセスキーを使うことになる。したがって、このAPIのキーが漏れるとAWSの権限も漏れてクレジットカードも漏れるのは怖い。また、Amazon associates Idも必要になるため、アフィリエイトプログラムに参加する必要もある。あとなぜかrate limitを守っていてもたまに503を返すので、成功するまで1秒おきにtry catchで繰り返す必要がある。謎。
Google Custom Search API(を通してGoogle画像検索を使う)
「曲名 ジャケット」で画像検索エンジンでググればGoogleの検索結果の上位にジャケットが来るだろうというアレ。直接google画像検索のurlを叩いてスクレイピングするとgoogle先生からアク禁を食らうので、Google Custom Search APIを介して検索をしなくてはならない。
- URL : https://www.google.co.jp/search?q=hogehoge&tbm=isch
- APIキー :要
- 取れるメタ情報 : なし
- ジャケット取得 :可(サイズはまちまち)
- Rate limit : 100req/day
- Pythonとの連携 : やってないけどURLを叩いてjsonだかが返ってくるらしい
- コメント :rate limitがちょっとこころもとないのでやってない。Yahooなどでの類似サービスも一時はAPIがあったが現在では軒並み閉鎖している模様。