Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

Python用 Spotify Web API "spotipy" の楽曲・アーティストを検索(インストール方法,サンプルコード,API仕様)

楽曲の検索やメタ情報に関する Web API を提供しているサブスクリプション型音楽サービスはいくつかあります。

中でも Spotify Web API様々な機能が提供されています手軽に使えますし楽曲数も多いため、オススメの API です。

github.com

今回は、Spotify Web API の導入方法と、それを使って楽曲やアーティストを検索する方法を紹介します。

参考ページ

Python用ライブラリの導入方法

他のPythonライブラリのように、pipを使ってインストールします。

pip install spotipy

Web API 利用のためのアクセストークン発行

Spotify Web API を利用するには https://developers.spotify.com/ のアプリアカウントと作成しアクセストークンを発行する必要があります

まず、https://developer.spotify.com/dashboard/ にアクセスすると、以下のような画面が表示されます。

アカウントを持っていない方は、Sign up for a free Spotify account here. をクリックしてアカウントを作成してください。

CREATE AN APP をクリック後、以下の画面の2項目を入力し、チェックボックスをチェックして CREATE を押してください。

  • App name: アプリの名称
  • App description: アプリの説明

アプリの説明は、私は楽曲推薦アプリ(Music recommendation app)みたいな感じで書きました。

作成後,ダッシュボードに先ほど作ったアプリの名称が表示されるのでそれをクリックすると、以下のような画面がでます。

これで Client ID, Client Secret が取得できたので Spotify Web API を利用することができるようになりました

Spotify Web API 使い方 (検索)

サンプルコード

Spotify Web API を使った楽曲検索のスクリプトです。

client_id, client_secret は先ほど取得した Client ID, Client Secret を与えてください。

# -*- coding: utf-8 -*-
import sys
import pprint
import spotipy
from spotipy.oauth2 import SpotifyClientCredentials


# Oath2
client_id       = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
client_secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

sp = spotipy.Spotify(auth_manager=SpotifyClientCredentials(client_id=client_id,
                                                           client_secret=client_secret, language='ja'))
# 検索
search_str = sys.argv[1]

results = sp.search(q=search_str, limit=20)
for idx, track in enumerate(results['tracks']['items']):
    print(f"{idx:03d}\t{track['name']}\t")

search()の使い方

sp.search()の使い方は以下のようになっています。

results = search(q, limit=10, offset=0, type='track', market=None)
  • q: 検索クエリ
  • limit: 検索結果数の上限 (min = 1, default = 10, max = 50)
  • type: 検索結果のタイプ
    • ‘artist’, ‘album’, ‘track’, ‘playlist’, ‘show’, ‘episode’ など
  • market:
  • offset:
    • 検索結果インデックスのオフセット
    • max limit=50より多くの検索結果が必要な時に利用する
    • Maximum offset (including limit): 1,000

返り値の形式 (type="tracks")

results["tracks"]["items"] が検索結果オブジェクトの配列となっています。

従って、

for track in results["tracks"]["items"]:
    ....
項目 対応
曲名 track["name"]
アーティスト名 track['artists']['name']
アルバム名 track['album']['name']
ISRC track['external_ids']['isrc']
Spotify URLリンク track["external_urls]['spotify']
アルバムジャケット track['images'][0]["url"]
時間長(ミリ秒) track['duration_ms']
人気度 track['popularity']

なお、これは一例であり、実際の検索結果には様々な情報が含まれていますので、

詳細はこちらからご確認ください。

より高度な検索方法の例

www.wizard-notes.com

まとめ

Spotify Web API の導入方法と、それを使って楽曲やアーティストを検索する方法を紹介しました。

Python スクリプト化することで、大量の楽曲の情報をまとめて取得することができます。

なお、Spotify Web API 少しマニアックな機能として、楽曲の特徴を連続値で取得できます

これと機械学習を組み合わせればアーティスト分類や類似曲検索といったアプリ開発ができます

www.wizard-notes.com