はじめに
iTunes の Search API を使うと、iTunes Storeで販売されているコンテンツを検索することができます。
iTunes Search API – Partner Resources
検索用のAPI自体は、デベロッパーとしての登録やAPIトークンが必要ないため、手軽に利用できます。
この記事では、Python で iTunes Search API を叩いてiTunes Storeで販売されている音源を検索する方法を紹介します。
iTunes Search API の使い方
エンドポイント
GETメソッドで以下のURIを叩きます。
検索のためのクエリの詳細をparameterkeyvalue
に与えることで、所望の検索を実行できます。
クエリパラメタ(音楽検索向け)
利用頻度の高そうなクエリパラメータをまとめてみました。
term: 検索キーワード
一番重要な、検索キーワードを渡すための Parameter key です。
URL-encoded された文字列を与えます。また、スペース(空白文字)は"+"で表現します。
例:back number => term:back+number
country: 国コード
検索対象国を国コードで指定します。
国コードは ISO Country Codes を参照してください。 ISO 3166-1 alpha-2 - Wikipedia
国によって検索順位が変わるようであり、注意が必要なパラメタです。
media
メディアの種類を以下のキーワードの中から指定できます。デフォルトではall
となっています。
entity
mediaで選択したコンテンツで、さらに細かくコンテンツ内容を指定できます。
media="music"
の場合、以下のentity
を指定できます。
- musicArtist
- musicTrack
- album
- musicVideo
- mix
- song
attribute
検索キーワードについての指定です。
media="music"
の場合、以下のentity
を指定できます。
- genreIndex
- artistTerm
- albumTerm
- ratingIndex
- songTerm
指定がない場合、すべての属性で検索されます。
limit:
返される検索結果の数を指定できます。
デフォルトでは 50 で、1~200の範囲で指定できます。
lang:
返される検索結果の言語を指定できます。
英語もしくは日本語が指定でき、それぞれen_us
、 ja_jp
を文字列として与えてください。
JSON result の見方
主要な key を掲載します。
- kind:
- 検索結果として帰ってきたコンテンツの種類
- media とは異なるので注意が必要
- trackName: 楽曲のタイトル
- artistName: アーディスト名
- collectionName: (音楽の場合) アルバム名
- trackViewUrl: 楽曲の再生ページへのURL
- previewUrl
- 30秒のプレビュー音源への直リンク
- artworkUrl100, artworkUrl60
- アートワークへの直リンク
- artistId, collectionId, trackId: 各ID
その他、音楽の場合は、販売金額や時間長なども取得できます。
python で API を叩く
実装
import json import requests import urllib from pprint import pprint def itunes_api_search_encoder(d): s = "" for k, v in d.items(): if k == "term": v.replace(" ", "+") s += k + "=" + v + "&" s = s[0:-1] #s = urllib.parse.quote(s[0:-1]) return s def itunes_api_song_parser(json_data): lst_in = json_data.get("results") lst_ret = [] for d_in in lst_in: d_ret = { "title": d_in.get("trackName"), "artist": d_in.get("artistName"), "album": d_in.get("collectionName"), "title": d_in.get("trackName"), "id_track": d_in.get("trackId"), "id_artist": d_in.get("artistId"), "id_album": d_in.get("collectionId"), "no_disk": d_in.get("discNumber"), "no_track": d_in.get("trackNumber"), "url": urllib.parse.unquote(d_in.get("trackViewUrl")), } lst_ret.append(d_ret) return lst_ret uri = 'https://itunes.apple.com/search' params = { "term": "あいみょん", "attribute": "artistTerm", "entity": "song", "country": "JP", "lang": "ja_jp", #"en_us", # "limit": "3", } """ params = { "term": "カントリーロード", "attribute": "songTerm", "entity": "song", "country": "JP", "lang": "ja_jp", #"en_us", # "limit": "3", } """ uri = uri + "?" + itunes_api_search_encoder(params) res = requests.get(uri) json_data = json.loads(res.text) data = itunes_api_song_parser(json_data) print("URI:\t" + uri + "\n") pprint(data)
結果
アーティスト検索
$>python call_itunes_search_api.py URI: https://itunes.apple.com/search?term=あいみょん&attribute=artistTerm&entity=song&country=JP&lang=ja_jp&limit=3 [{'album': 'マリーゴールド - Single', 'artist': 'あいみょん', 'id_album': 1402042886, 'id_artist': 1165017710, 'id_track': 1402042897, 'no_disk': 1, 'no_track': 1, 'title': 'マリーゴールド', 'url': 'https://music.apple.com/jp/album/マリーゴールド/1402042886?i=1402042897&uo=4'}, {'album': '青春のエキサイトメント', 'artist': 'あいみょん', 'id_album': 1273709789, 'id_artist': 1165017710, 'id_track': 1273709797, 'no_disk': 1, 'no_track': 3, 'title': '君はロックを聴かない', 'url': 'https://music.apple.com/jp/album/君はロックを聴かない/1273709789?i=1273709797&uo=4'}, {'album': '愛を伝えたいだとか - EP', 'artist': 'あいみょん', 'id_album': 1218860381, 'id_artist': 1165017710, 'id_track': 1218860394, 'no_disk': 1, 'no_track': 1, 'title': '愛を伝えたいだとか', 'url': 'https://music.apple.com/jp/album/愛を伝えたいだとか/1218860381?i=1218860394&uo=4'}]
楽曲検索
[{'album': 'Country Road - EP', 'artist': 'ASIAN2', 'id_album': 262802696, 'id_artist': 41297187, 'id_track': 262802698, 'no_disk': 1, 'no_track': 1, 'title': 'Country Road', 'url': 'https://music.apple.com/jp/album/country-road/262802696?i=262802698&uo=4'}, {'album': 'ジブリ・ジャズ', 'artist': 'All That Jazz', 'id_album': 513714253, 'id_artist': 274522804, 'id_track': 513714264, 'no_disk': 1, 'no_track': 7, 'title': 'カントリーロード', 'url': 'https://music.apple.com/jp/album/カントリーロード/513714253?i=513714264&uo=4'}, {'album': '耳をすませば サウンドトラック', 'artist': '野見祐二', 'id_album': 667855209, 'id_artist': 193510669, 'id_track': 667855313, 'no_disk': 1, 'no_track': 22, 'title': 'カントリー・ロード', 'url': 'https://music.apple.com/jp/album/カントリー-ロード/667855209?i=667855313&uo=4'}]
まとめ
Python で iTunes Search API を叩いてiTunes Storeの音楽を検索しました。
大量楽曲の iTunes Storeへのリンク作成や、販売されているかどうかを調べる際に役立つと思います。