はなたの日記

プログラミングとギターのコードについて書きます

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から必要な情報を抽出してみます。
PythonSpotify 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の公式ドキュメント読みながらもう少し弄ってみようと思います。