Spotify Web APIをPythonで利用してアルバム名を取得してみた
アーティストの楽曲に関する統計情報が欲しいなと思い、Spotifyからデータを抽出できないか?と思い調べてみました。
Spotify Web APIなるものがありました。
Web API Tutorial | Spotify for Developers
こっからデータを持ってきて、Pythonで弄れるようにします。
準備
APIを利用するために、アカウントを作ります。
①Spotifyのアカウント
私はフリーの方でアカウントを作成しました。
②アプリケーションの登録
APIを呼び出すアプリケーションを登録する必要します。ダッシュボードにログインし、CREATE A CLIENT IDからアプリケーションを登録します。
My Dashboard | Spotify for Developers
登録後、Client IDとClient Secretが表示されるので、メモします。これで準備OK!
spotipyを利用してみる
実際にAPIから必要な情報を抽出してみます。
PythonでSpotify Web APIを利用するには、spotipyというライブラリを使うのが良さそうです。
spotipy.readthedocs.io
import spotipy from spotipy.oauth2 import SpotifyClientCredentials import pprint client_id = '**************************************' client_secret = '************************************' client_credentials_manager = spotipy.oauth2.SpotifyClientCredentials(client_id, client_secret) spotify = spotipy.Spotify(client_credentials_manager=client_credentials_manager) name = 'flumpool' result = spotify.search(q='artist:' + name, type='artist') pprint.pprint(result) # 辞書型を見やすく表示
上のコードを実行すると、nameで指定したflumpoolの検索結果?が辞書型で得られます。resultを表示した結果↓
{'artists': {'href': 'https://api.spotify.com/v1/search?query=artist%3Aflumpool&type=artist&offset=0&limit=10', 'items': [{'external_urls': {'spotify': 'https://open.spotify.com/artist/5Kpt1mryjiwHa9goYPQG1o'}, 'followers': {'href': None, 'total': 147911}, 'genres': ['anime', 'anime rock', 'j-pop', 'j-rock', 'japanese r&b'], 'href': 'https://api.spotify.com/v1/artists/5Kpt1mryjiwHa9goYPQG1o', 'id': '5Kpt1mryjiwHa9goYPQG1o', 'images': [{'height': 640, 'url': 'https://i.scdn.co/image/a832f83bcd1d3e9b17c94fdde824c8590a1e38a3', 'width': 640}, {'height': 320, 'url': 'https://i.scdn.co/image/d98972d1599aeaaf1a7acc62a3c0be28f5043ed6', 'width': 320}, {'height': 160, 'url': 'https://i.scdn.co/image/cc0feebed941834b7c041d07b975c8f2f3301fd7', 'width': 160}], 'name': 'flumpool', 'popularity': 54, 'type': 'artist', 'uri': 'spotify:artist:5Kpt1mryjiwHa9goYPQG1o'}], 'limit': 10, 'next': None, 'offset': 0, 'previous': None, 'total': 1}}
アルバム名の取得
アルバム名を取得するには、アーティストのuriが必要です。uriは固有idみたいなものです。
fp_uri = result['artists']['items'][0]['uri'] # resultからuriの抽出 al_result = spotify.artist_albums(fp_uri,album_type='album') # flumpoolのうちアルバムのみの検索結果 albums = al_result['items'] # アルバムの詳細が要素であるリスト
検索結果ページが複数ある場合を考慮し、以下を実行します。
# ページめくり while al_result['next']: al_result = spotify.next(al_result) # 検索結果を次のページへ albums.extend(al_result['item']) # リストにアルバムの詳細を追加
いよいよ、アルバム名を抽出します。同じアルバム名が複数出てきてしまったのですが、available_marketsを絞ることで重複が消えました。
for album in albums: # 日本版のみ表示 if album['available_markets'] == ['JP']: print(album['name'])
実行結果がこちら↓
はじめてのflumpool EGG The BEST 2008-2014「MONUMENT」 experience Fantasia of Life Stripe What's flumpool !? Unreal
参考サイト
Spotify APIで遊んでみる - Qiita
Spotify Web APIでデバイスから指定した音楽を再生してみる | DevelopersIO
なかなか日本語で書いてくれている人がおらず、上記のサイトは非常に参考になりました。
英語は苦手ですが、spotipyの公式ドキュメント読みながらもう少し弄ってみようと思います。