PythonでSpotify APIを使ってみる ~全ての音楽愛好家のためのSpotify API ep 1~

python
python

Spotify APIを使ってみた。

音楽愛好家の皆の衆!凄いぞ、コレは。

Spotify といえば、世界有数の音楽サブスクリプションサービスですね。
私もヘビーユーザーの一人で、有料会員になっています。

そのSpotifyのAPIが凄いということなんで使ってみようと思います。
まずは、APIの使い方から調べていきます。
(2021年5月15日:学習開始85日目 PyQさんで勉強中!

オンラインPython学習サービス「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さんで勉強中!


コメント

タイトルとURLをコピーしました