Skip to content

PythonでSpotify APIを使って楽曲の特徴情報を抽出します.

Spotify APIの導入

Spotify APIの導入は下記のサイトを参考にしてください.

()

楽曲情報の抽出

下記のコードで楽曲情報の抽出を実行します.

工程は下記の通りです.

  1. SpotifyAPIの起動
  2. 2000年の楽曲で検索
  3. 楽曲IDを取得
  4. metaに楽曲情報を格納
python
import time
import spotipy
import pprint
from spotipy.oauth2 import SpotifyClientCredentials

# APIのIDとキー
MyID = "****************" #client ID
MySecret= "****************"  #client secret

# 工程1_spotifyAPI起動
ccm = SpotifyClientCredentials(client_id = MyID, client_secret = MySecret)
spotify = spotipy.Spotify(client_credentials_manager = ccm)

# 工程2_検索実行
year = 2000
result = spotify.search(q=f'year:{year}', limit=50, offset=0, type='track', market='JP')

# 工程3_楽曲IDをリストに格納
id_list = 
for track in result['tracks']['items']:
        id = track['id']
        id_list.append(id)
        
# 工程4_楽曲情報の抽出
meta = spotify.track(track_id)

楽曲特徴の抽出

下記のコードで楽曲特徴の抽出を実行します.

工程は下記の通りです.

  1. SpotifyAPIの起動
  2. 2000年の楽曲で検索
  3. 楽曲IDをリストに格納
  4. spotify.audio_features()で楽曲特徴を抽出
python
import spotipy
import pprint
from spotipy.oauth2 import SpotifyClientCredentials

# APIのIDとキー
MyID = "****************" #client ID
MySecret= "****************"  #client secret

# 工程1_spotifyAPI起動
ccm = SpotifyClientCredentials(client_id = MyID, client_secret = MySecret)
spotify = spotipy.Spotify(client_credentials_manager = ccm)

# 工程2_検索実行
year = 2000
result = spotify.search(q=f'year:{year}', limit=50, offset=0, type='track', market='JP')

# 工程3_楽曲IDをリストに格納
id_list = 
for track in result['tracks']['items']:
        id = track['id']
        id_list.append(id)
        
# 工程4_楽曲特徴を抽出
features = spotify.audio_features(id_list)
pprint.pprint(features)


# 出力結果
# {'acousticness': 0.00239,
#   'analysis_url': 'https://api.spotify.com/v1/audio-analysis/3AJwUDP919kvQ9QcozQPxg',
#   'danceability': 0.429,
#   'duration_ms': 266773,
#   'energy': 0.661,
#   'id': '3AJwUDP919kvQ9QcozQPxg',
#   'instrumentalness': 0.000121,
#   'key': 11,
#   'liveness': 0.234,
#   'loudness': -7.227,
#   'mode': 1,
#   'speechiness': 0.0281,
#   'tempo': 173.372,
#   'time_signature': 4,
#   'track_href': 'https://api.spotify.com/v1/tracks/3AJwUDP919kvQ9QcozQPxg',
#   'type': 'audio_features',
#   'uri': 'spotify:track:3AJwUDP919kvQ9QcozQPxg',
#   'valence': 0.285},

楽曲特徴の整理

下記のコードで楽曲情報と楽曲特徴を1つのリストで整理させます.

python
def getTrackFeatures(track_id, meta, features):
    name = meta['name']
    album = meta['album']['name']
    artist = meta['album']['artists'][0]['name']
    release_date = meta['album']['release_date']
    country = meta['external_ids']['isrc'][0:2]
    length = meta['duration_ms']
    popularity = meta['popularity']
    key = features[0]['key']
    mode = features[0]['mode']
    danceability = features[0]['danceability']
    acousticness = features[0]['acousticness']
    energy = features[0]['energy']
    instrumentalness = features[0]['instrumentalness']
    liveness = features[0]['liveness']
    loudness = features[0]['loudness']
    speechiness = features[0]['speechiness']
    tempo = features[0]['tempo']
    time_signature = features[0]['time_signature']
    valence = features[0]['valence']

    track = [track_id, name, album, artist, release_date, country, length, popularity, key, mode, danceability, acousticness, energy, instrumentalness, liveness, loudness, speechiness, tempo, time_signature, valence]
    return track

楽曲情報と特徴をcsvに出力

下記のコードで楽曲情報と特徴をcsvに出力します.

工程は下記の通りです.

  1. SpotifyAPIの起動
  2. 2000年の楽曲で検索
  3. 楽曲IDを取得
  4. metaに楽曲情報を格納
  5. spotify.audio_features()で楽曲特徴を抽出
  6. getTrackFeaturesで楽曲情報と特徴をリスト化
  7. リストからデータフレームへ変換
python
import time
import spotipy
import pprint
import pandas as pd
from spotipy.oauth2 import SpotifyClientCredentials

# APIのIDとキー
MyID = "****************" #client ID
MySecret= "****************"  #client secret

# 工程1_spotifyAPI起動
ccm = SpotifyClientCredentials(client_id = MyID, client_secret = MySecret)
spotify = spotipy.Spotify(client_credentials_manager = ccm)

# 工程2_検索実行
year = 2000
result = spotify.search(q=f'year:{year}', limit=50, offset=0, type='track', market='JP')

tracks = 
for track in result['tracks']['items']:
  # 工程3_楽曲IDを取得
  track_id = track['id']
  time.sleep(0.5)
  # 工程4_楽曲情報の抽出
  meta = spotify.track(track_id)
  # 工程5_楽曲特徴の抽出
  features = spotify.audio_features(track_id)
  # 工程6_楽曲情報と特徴をリスト化
  track_info = getTrackFeatures(track_id, meta, features)
  tracks.append(track_info)

# 工程7_リスト→データフレーム&csv出力
# データフレームに格納
df = pd.DataFrame(tracks, columns = ['track_id', 'name', 'album', 'artist', 'release_date', 'country', 'length', 'popularity', 'key', 'mode', 'danceability', 'acousticness', 'energy', 'instrumentalness', 'liveness', 'loudness', 'speechiness', 'tempo', 'time_signature', 'valence'])
# お気に入り降順にソート
df.sort_values('popularity', ascending=False, inplace=True)
display(df.head())

まとめ

ここまでで,PythonでSpotify APIを使って楽曲の特徴情報を抽出しました.

次回から,邦楽に限定して抽出を実行します.

参考サイト

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

PythonでSpotify API [情報の文字列検索]

Spotify 検索

Spotify API Search for Item

ISO 3166-1 alpha-2 wiki

Spotify Web APIから分析用データセットをつくる

Billboard×Spotifyで「〇〇年代を代表する曲」を決めよう!

Spotify.Tracks

Pythonで2次元配列の重複行を一発で削除する