spotifyのプレイリストから楽曲分析情報を取得してCSVを生成するコードpython

python

spotifyではノリやすいとかBPMとかキーの情報が楽曲に埋め込まれてる。
API経由で引っ張ることが出来る。
必要に駆られたわけでは無いのだが、ガンダムエピオン楽曲に共通点を探したくてググったりしてがんばった。

コード

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials
import pandas as pd
from concurrent import futures

#プレイリストのURL
playlist_url = 'https://open.spotify.com/playlist/0sJLp1NB7qfbK0y3dCpdy9?si=f2b0bc4d906f4ebf'

#spotify apiのクライアントidとか
my_id ='client ID'
my_secret = 'client secret' 
ccm = SpotifyClientCredentials(client_id = my_id, client_secret = my_secret)
spotify = spotipy.Spotify(client_credentials_manager = ccm)

#プレイリストを取得
results = spotify.playlist_tracks(playlist_url)

#関数をつくる
def joho(i):
    #楽曲の分析情報を取得する
    features =spotify.audio_features(i)
    #楽曲の情報を取得する
    meta = spotify.track(i)
    #コピペしたから何しているのかわからんけど上で取得したデータで必要なものだけ抜き出しているのだと思う
    name = meta['name']
    artist = meta['album']['artists'][0]['name']
    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 = [name, artist, length, popularity, key, mode, danceability, acousticness, energy, instrumentalness, liveness, loudness, speechiness, tempo, time_signature, valence]
    return track

#プレイリストを曲目を取得しているのだと思う
pl_datas = results['items']
#ぶっちゃけ何しているの変わらない。コピペなので
while results['next']:
  results = spotify.next(results)
  pl_datas.extend(results['items'])

#プレイリストの楽曲のIDを取得する
track_id =[i['track']['id'] for i in pl_datas]

#リストを作っておく
future_list = []
#並列処理
with futures.ThreadPoolExecutor() as executor:
    for i in track_id:
        # 関数を並列で実行
        future = executor.submit(joho, i)
        # Future オブジェクトを記録する。
        future_list.append(future)

#並列で分回した情報を使える形式に変換しているのだと思う
future = [x.result() for x in future_list]
#上のデータをpandasのフレームに変換しているのだと思う
df = pd.DataFrame(future, columns = ['name',  'artist', 'length', 'popularity', 'key', 'mode', 'danceability', 'acousticness', 'energy', 'instrumentalness', 'liveness', 'loudness', 'speechiness', 'tempo', 'time_signature', 'valence'])
#CSVに出力
df.to_csv('ge.csv')

解説的な補足的な何か

まずはspotifyのデベロッパーページでデベロッパーIDを取得云々は他サイトで調べてください

ライブラリは全部外部ライブラリなのでpipなりなんなりでインストールする必要があります。それもググったりしてさがしてください。

python