Spotify APIを使ってみた。
音楽愛好家の皆の衆!凄いぞ、コレは。
Spotify といえば、世界有数の音楽サブスクリプションサービスですね。
私もヘビーユーザーの一人で、有料会員になっています。
そのSpotifyのAPIが凄いということなんで使ってみようと思います。
まずは、APIの使い方から調べていきます。
(2021年5月15日:学習開始85日目 PyQさんで勉強中!)
後で出てきますが、Spotify APIの使うためのPython外部ライブラリとして「spotipy」というものがあります。
spotipyライブラリの公式ドキュメントの使用例として、伝説のロックバンド「Led Zeppelin」の曲情報を取得しています。
ちなみにLed Zeppelinの公式Youtubeではベストアルバム「Mothership」が全曲聞けます!!
いいのか?これ。音もやたら良いし。しかし公式です。(アルバム名から公式YouTubeに飛びます。)
しかし、彼らの本領はライブ、音のブ厚さに吹っ飛ばされます。
Zeppelinを聞きながら、「Spotify API」を使っていきましょう。
1.Spotify APIで何ができるの?
そもそもAPIとは何か?って方もいると思います。
本当にざっくりというと、「外部サイトに問い合わせをして、回答を返してくれるWEBサービス」という感じです。
詳細は、過去記事(Pythonで検索してみよう ~Google Books APIを使ってみる ep1~)に書いたのでそちらに説明をゆずります。
今回の場合、Spotifyにプログラム上で問い合わせを投げかけて、音楽に関する情報がかえってきたり、自分のSpotifyアカウントの音楽ライブラリを操作したりが出来ます。
この「音楽に関する情報」っていうのが凄くて、普通の検索では出てこない情報がGETできてしまいます。Spotify Web API Referenceに何が出来るか?が記載してあります。(英語です。)
また、こちらのページ(PythonでSpotify API [audio_features編])では取れる情報を一覧にしてくれています。(こっちは日本語)
普通には組めないようなプレイリストをつくったり、曲作りにめちゃくちゃ参考になる楽曲分析をできたりします。
だからこそ、全音楽愛好会に一度は触れてみてほしいと思います。
習うより慣れろ!!さっそく使ってみましょう。
2.Spotify APIを使ってみよう① ~登録編~
公式のWeb API Tutorialに従ってやっていきます。
いきなりですが、Spotify APIは登録が必要です。しかし、料金はかかりません。
必要なものは、
①:Spotifyアカウントの登録
②:Spotify Developersの登録とIDの発行
です。
Spotifyアカウントの登録
一般的にSpotifyで音楽を聴くのに必要なアカウント登録です。SpotifyのHP
いわゆる普通のアカウントです。すでに登録済みなら、そのアカウントを使えばOKです。
Spotifyは広告が入ったり制限があったりするSpotify Freeプランと。広告や制限なしで聞けるSpotify Premiumプランがあります。
APIはどうやらFreeプランでも使えるらしいです(API Tutorial公式に書いてあります。)
Spotify Developersの登録とIDの発行
Spotify Developersの登録は一般的には登録していないとおもいます。
先にいっておきますが、追加で料金はかかりません。商用利用について分かりません。
Spotifyアカウントができれば(あれば)、Spotify Developersの登録をやっていきましょう。
ここから先は英語サイトになりますが、くじけず頑張りましょう。
Spotifyデベロッパーのダッシュボードページに移動します。
LOG-INをクリックします。
ログイン画面が開くので、通常アカウントでログインします。
ログインすると、下のようなページが開きます。
「CLEATE A CLIANT ID」(または「CREATE AN APP」)をクリックします。
クリックすると、アプリの情報をもとめられます。
(この辺りはそれぞれ異なるので、それぞれ埋めていってください。画像は略してます・・・。)
アプリの名前(Application Name)やその説明(Application Description)を聞かれると思います。(私はmusic analysis testとかにして先に進みました)
商用(Commercial)かどうかを聞かれます。
(私は非商用なので「NON COMMERCIAL」とします。)
あとは、確認事項の了承等があるので、チェックしてSubmitします。
で、ここまで出来ると画面がこのようになっていると思います。
できたアプリをクリックすると、こんな画面になります。
「SHOW CLIENT SECRET」をクリック!
ここで「Client ID」と「Client Secret」をどこかに記録しておきます。
あと、多分この2つは他人に知られない方が良いです。ご注意を。
準備はここまで!!
3.Spotify APIを使ってみよう② ~spotipy動作編~
Pythonの外部ライブラリに、Spotify APIを操作するライブラリ「spotipy」があります。
これを使っていきましょう。Spotipy公式 Welcome to Spotipy! です。
まずはライブラリをインポートしましょう。手順は以下です。(Windowsの場合)
①:コマンドプロンプトを開く
②:以下のコマンドをそれぞれ入力して実行
C:\Users\XXXXX>pip install spotipy
以下が表示されれば成功です。バージョンは適宜変わるとおもいます。
Successfully installed spotipy-2.18.0
spotipyがインストールできれば、早速使ってみましょう。
公式ページに例があるので、それに従って「Led Zeppelin」のトップ10トラックの情報をとってみます。
一度そのままコピペしてみましょう。
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
lz_uri = 'spotify:artist:36QJpDe2go2KgaRleHCDTp'
spotify = spotipy.Spotify(client_credentials_manager=SpotifyClientCredentials())
results = spotify.artist_top_tracks(lz_uri)
for track in results['tracks'][:10]:
print('track : ' + track['name'])
print('audio : ' + track['preview_url'])
print('cover art: ' + track['album']['images'][0]['url'])
print()
これを実行してみましょう。
結果はエラーがでました。
spotipy.oauth2.SpotifyOauthError: No client_id. Pass it or set a SPOTIPY_CLIENT_ID environment variable.
先ほどのIDのパスが通っていないといわれています。
修正しましょう。公式ページをみたり、いろいろ調べた結果、以下の書き方で行けました。
my_idとmy_secretは先ほどの「Client ID」と「Client Secret」を入力します。
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
lz_uri = 'spotify:artist:36QJpDe2go2KgaRleHCDTp'
my_id ='0000000000000000000000' #client ID
my_secret = '0000000000000000000000' #client secret
ccm = SpotifyClientCredentials(client_id = my_id, client_secret = my_secret)
spotify = spotipy.Spotify(client_credentials_manager = ccm)
results = spotify.artist_top_tracks(lz_uri)
for track in results['tracks'][:10]:
print('track : ' + track['name'])
print('audio : ' + track['preview_url'])
print('cover art: ' + track['album']['images'][0]['url'])
print()
実行結果は、以下のようになります。
track : Stairway to Heaven - Remaster
audio : https://XXXXXX
cover art: https://XXXXXX
~~~~~略~~~~~
track : All My Love - 1990 Remaster
audio : https://XXXXXX
cover art: https://XXXXXX
うまくデータが取得できました。
まずはデータを取り出すところまではきましたね!
4.Spotify APIを使ってみよう③ ~好きな情報をGET~
とりあえず、「Spotipy」の公式ドキュメントをコピペして動かすところまで出来ました。
もう少し中身を理解しつつ、好きな情報を取得できるようにしましょう。
まずは、「検索対象」を見ていきましょう。
上のデモでは、Led Zeppelinの情報を取得しています。(デモでは「lz_uri」)
URLまたはURIを指定することで検索対象を決定できます。
では、URL、URIの取得方法を見ていきましょう。
①:Sptifyを開きます
②:検索したいアーティストのページを開きます。
③:ページ内の「・・・」をクリック
④:「シェアする」をクリック
⑤:「アーティストのリンクをコピー」をクリック
これで「URL」取得できます。
Led Zeppelinの場合、
「https://open.spotify.com/artist/36QJpDe2go2KgaRleHCDTp?si=XXXXXXXXXXXXXXX」
がアーティストのURLです。(XXXXXXXXXXXXXXXのところは、文字、数字が入ります。)
検索に使用するURLは、
「https://open.spotify.com/artist/36QJpDe2go2KgaRleHCDTp」
まででOKです。
アルバムやトラック、プレイリストのURLも同様の手順で取得できます。
このURLを使ってそのまま検索することも可能です。
デモでは「URI」を使用して検索しているので、こちらも見てみましょう。
デモで、「lz_uri = spotify:artist:36QJpDe2go2KgaRleHCDTp」となっている部分です。
URLとURIは下のような関係になっています。
どちらを使用しても検索できますが、ここでは「URL」でやっていきます。
次に検索内容の方を見ていきましょう。デモでは以下のようになっています。
results = spotify.artist_top_tracks(lz_uri)
デモの結果は、「アーティストの人気曲」を取得しています。
モジュール「artist_top_tracks」を変えることで、取得内容を変えることが出来ます。
非常にたくさんのモジュールがあり、多様な事ができます。
詳しくはspotipy公式サイトに一覧があります。
ここでは情報検索に関するものの一部を抜粋しています。
モジュール | 取得できる内容 |
---|---|
artist(artist_id) | アーティストの ID、URI、または URL を指定して、 1つのアーティストの情報を返す |
artists(artists) | アーティストの ID、URI、または URL を指定して、 1~複数アーティストの情報を返す |
artist_albums(artist_id, album_type=None, country=None, limit=20, offset=0) | アーティストのアルバムに関する情報を取得する |
artist_related_artists(artist_id) | 指定したアーティストに類似したアーティストの情報 を取得する |
artist_top_tracks(artist_id, country=’US’) | アーティストのトップ10トラック情報を 国別に入手できる |
album(album_id) | アルバムの ID、URI、または URL を指定して、 1つのアーティストの情報を返す |
albums(album) | アルバムの ID、URI、または URL を指定して、 1~複数アーティストの情報を返す |
album_tracks(album_id, limit=50, offset=0, market=None) | アルバムのトラックに関する情報を取得する |
track(tracks, market=None) | トラックの ID、URI、または URL を指定して 1つのトラック情報を返します |
tracks(tracks, market=None) | トラック ID、URI、または URL のリストを指定して、 トラック情報のリストを返します |
audio_analysis(track_id) | トラックIDのオーディオ分析を取得する。 |
audio_features(tracks=[]) | トラックID に基づいて、1 つまたは複数の トラックのオーディオ分析を取得します。 |
featured_playlists(locale=None, country=None, timestamp=None, limit=20, offset=0) | Spotify注目のプレイリストのリストを取得する。 (日本の場合、country=’JP’) |
new_releases(country=None, limit=20, offset=0) | ニューリリースアルバムのリストを取得する。 |
playlist(playlist_id, fields=None, market=None, additional_types=(‘track’, )) | プレイリストID からプレイリスト情報を取得します。 |
playlist_items(playlist_id, fields=None, limit=100 , offset=0, market=None, additional_types=(‘track’, ‘episode’)) | プレイリストIDからのトラックとエピソードの 詳細情報を取得します。 |
playlist_tracks(playlist_id, fields=None, limit=100, offset=0, market=None, additional_types=(‘track’, )) | プレイリストIDからのトラックの詳細情報を 取得します。 |
recommendations(seed_artists=None, seed_genres=None, seed_tracks=None, limit=20, country=None, **kwargs) | 1~5種のおすすめトラックのリストを取得します。 (seed_artistsの少なくとも1つは、 seed_tracks、seed_genresが必要です) |
これを使えば好きな情報を入手できますね。
5.Spotify APIを使ってみよう④ ~関連アーティスト情報入手~
では、実際に使ってみましょう。
データをまとめたいので、pandasライブラリを使用します。
pnadasは、データを表形式でまとめることが出来るモジュールです。
pandasライブラリは、外部ライブラリなのでインポートが必要です。
(すでにインポート済みなら不要です。)
やり方は、上でやったspotipyインストールと同じです。
C:\Users\XXXXX>pip install pandas
では、準備ができれば進めましょう。
今回は、「関連アーティスト」の情報を取得してみます。
ここではデモと同じ「Led Zeppelin」の関連アーティスト情報を取得します。
元のデモを参考にやってみます。
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
#入力パート
artist_url = 'https://open.spotify.com/artist/36QJpDe2go2KgaRleHCDTp'
album_url =''
track_url = ''
#認証パート
my_id ='0000000000000000000000' #client ID
my_secret = '0000000000000000000000' #client secret
ccm = SpotifyClientCredentials(client_id = my_id, client_secret = my_secret)
spotify = spotipy.Spotify(client_credentials_manager = ccm)
results = spotify.artist_related_artists(artist_url)
print(results)
まずは、ここまで作ってみました。
出力結果は以下です。
{'artists': [{'external_urls': {'spotify': 'https://open.spotify.com/artist/568ZhdwyaiCyOGJRtNYhWf'}, 'followers': {'href': None, 'total': 3880269}, 'genres':
~~~~~略~~~~~
'popularity': 69, 'type': 'artist', 'uri': 'spotify:artist:4NgfOZCL9Ml67xzM0xzIvC'}]}
膨大な辞書型のデータになっています。
読み解いていきます。
{’artists’ : [~~~], [~~~]・・・・}という形式になっています。
辞書のキーを「artists」として情報を引き出し、そのなかの1番はじめ(0番目)のリストを抜き出します。
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
~~~~~略~~~~~
results = spotify.artist_related_artists(artist_url)
result = results['artists']
print(result[0])
では出力してみましょう。
{'external_urls': {'spotify': 'https://open.spotify.com/artist/568ZhdwyaiCyOGJRtNYhWf'},
'followers': {'href': None, 'total': 3880269},
'genres': ['album rock', 'blues rock', 'classic rock', 'hard rock', 'metal', 'rock'],
'href': 'https://api.spotify.com/v1/artists/568ZhdwyaiCyOGJRtNYhWf',
'id': '568ZhdwyaiCyOGJRtNYhWf',
'images': [{'height': 640, 'url': 'https://i.scdn.co/image/d8dc5a44c417ae8ee8f0a5f45165172a27aed1ba', 'width': 640}, {'height': 320, 'url': 'https://i.scdn.co/image/ca83593d28fb361d10519fbb60f62d923f3381be', 'width': 320}, {'height': 160, 'url': 'https://i.scdn.co/image/685327fd3403782bf31d84e73035c851129dce4b', 'width': 160}],
'name': 'Deep Purple', 'popularity': 73, 'type': 'artist',
'uri': 'spotify:artist:568ZhdwyaiCyOGJRtNYhWf'}
関連アーティストとして、「Deep Purple」の情報が取得できています。
では、アーティスト名のみを出力してみましょう。
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
~~~~~略~~~~~
results = spotify.artist_related_artists(artist_url)
result = results['artists']
print('artist : ' + result[0]['name'])
出力してみます。
artist : Deep Purple
うまく出来ました。
では、次はresultで出てきた複数のアーティスト名を取得してみます。
まずは、resultの数を数えます。len(result)で出来ます。
次に、これを[0, 1, 2, ・・・・」という数字のリストにします。これはrange()で出来ます。
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
~~~~~略~~~~~
results = spotify.artist_related_artists(artist_url)
result = results['artists']
for i in range(len(result)): #resuktの数をカウントしてfor文を回す
print('artist : ' + result[i]['name'])
出力してみましょう。
artist : Deep Purple
artist : Robert Plant
artist : Jimi Hendrix
artist : The Doors
artist : Cream
artist : Lynyrd Skynyrd
artist : The Who
artist : ZZ Top
artist : Grand Funk Railroad
artist : Blue Öyster Cult
artist : Black Sabbath
artist : Steppenwolf
artist : Thin Lizzy
artist : The Black Crowes
artist : Steve Miller Band
artist : Ted Nugent
artist : The Rolling Stones
artist : Allman Brothers Band
artist : Alice Cooper
artist : Janis Joplin
見事にクラシックロックの伝説たちが並んでいます。
では、アーテスト名以外の情報も含めてまとめましょう。
始めに書いた「pandas」を使用していきます。
やり方は、PythonでPython最新本を探す ~Google Books APIを使ってみよう ep2~でやった方法と同じです。
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import pandas as pd
~~~~~略~~~~~
results = spotify.artist_related_artists(artist_url)
result = results['artists']
related_df = pd.DataFrame(index=[], columns=['Name', 'Genres', 'Images_url', 'Popularity', 'URL', 'URI'])
for i in range(len(result)): #resuktの数をカウントしてfor文を回す
related_df= related_df.append({
'Name' : result[i]['name'],
'Genres' : result[i]['genres'],
'Images_url' : result[i]['images'][0]['url'],
'Popularity' : result[i]['popularity'],
'URL' : result[i]['external_urls']['spotify'],
'URI' : result[i]['uri']}, ignore_index=True)
print(related_df)
出力結果は以下です。
Name ... URI
0 Deep Purple ... spotify:artist:568ZhdwyaiCyOGJRtNYhWf
~~~~~略~~~~~
19 Janis Joplin ... spotify:artist:4NgfOZCL9Ml67xzM0xzIvC
あまり情報が見えませんが、おそらく大丈夫です。
では、この結果をCSVファイルに出力してみましょう。これが今回の最終形態です。
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import pandas as pd
import csv
#入力パート
artist_url = 'https://open.spotify.com/artist/36QJpDe2go2KgaRleHCDTp'
album_url =''
track_url = ''
output_filename = 'zep_related_artist.csv' #.csv形式で名前を入力
#認証パート
my_id ='0000000000000000000000' #client ID
my_secret = '0000000000000000000000' #client secret
ccm = SpotifyClientCredentials(client_id = my_id, client_secret = my_secret)
spotify = spotipy.Spotify(client_credentials_manager = ccm)
results = spotify.artist_related_artists(artist_url)
result = results['artists']
related_df = pd.DataFrame(index=[], columns=['Name', 'Genres', 'Images_url', 'Popularity', 'URL', 'URI'])
for i in range(len(result)): #resuktの数をカウントしてfor文を回す
related_df= related_df.append({
'Name' : result[i]['name'],
'Genres' : result[i]['genres'],
'Images_url' : result[i]['images'][0]['url'],
'Popularity' : result[i]['popularity'],
'URL' : result[i]['external_urls']['spotify'],
'URI' : result[i]['uri']}, ignore_index=True)
#print(related_df)
related_df.to_csv(output_filename, encoding='utf-8') #csvファイル出力
with open(output_filename, 'a', newline='') as f:
writer = csv.writer(f)
では、実行してみましょう。
Pythonファイルと同じところに、「zep_related_artist.csv」が出来ています。
Excelで開いてみましょう。
うまくデータが取得できました。
面白いのが「Popularity」の項目です。これは、「知名度」を表す独自の指標です。
次回から、Spotify APIを使って実用的なデータを取っていきます。
To Be Continued :全ての音楽愛好家のためのSpotify API ep 2
PyQさんで勉強中!
コメント