Spotify APIで好きなプレイリストの楽曲データを取得し、CSV化するの巻

どんな人におすすめの記事なのか?
- Spotifyの楽曲を分析してみたい
 - Spotify APIを使ってみたい
 
この記事を読むと学べること
- Spotify for Developers上での事前設定方法
 - Spotifyの楽曲データを取得するためのコードがわかる
 
Spotify for Developersでの事前設定
Spotify for Developersでの事前設定手順
- https://developer.spotify.com へアクセスする。Spotifyアカウントをお持ちの場合、そのアカウントでログインし、持っていない場合は「Spotifyに登録する」から始める。
 - 右上のアカウントアイコンからダッシュボードへ移動する。
 - 画面右上のCreate Appをクリックし、App name、App description、Redirect URIsを入力し、Saveする。
 - 作成したAppを選択し、画面右上のSettingsを開き、Client IDとClient secret(View Client secretをクリック)をコピペで控えておく。
 
一瞬でSpotifyの楽曲データを取得し、CSV化する
楽曲データ取得コード
Google Colaboratoryに以下コードをコピペし、クライアントID、クライアントシークレット、そしてSpotifyのプレイリストIDを任意のものに置き換え、実行する。
#%% [code]
!pip install spotipy
#%% [code]
import time
from spotipy.oauth2 import SpotifyClientCredentials
import spotipy
import pandas as pd
#%% [code]
# Spotify APIのクライアントIDとクライアントシークレットを設定
client_id = 'your_client_id_here'  # 自分のクライアントIDに置き換えてください
client_secret = 'your_client_secret_here'  # 自分のクライアントシークレットに置き換えてください
client_credentials_manager = SpotifyClientCredentials(client_id, client_secret)
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
#%% [code]
def getTrackIDs(playlist_ids):
    track_ids = []
    for playlist_id in playlist_ids:
        playlist = sp.playlist(playlist_id)
        for item in playlist['tracks']['items']:
            track_id = item['track']['id']
            if track_id not in track_ids:
                print(f'Adding track {track_id} to track_ids')
                track_ids.append(track_id)
    return track_ids
#%% [code]
playlist_ids = ['xxxxxxxxxxxxxxxxx']  # SpotifyのプレイリストのIDを入力
track_ids = getTrackIDs(playlist_ids)
print(f'Number of tracks: {len(track_ids)}')
print(track_ids)
#%% [code]
def getTrackFeatures(track_id):
    meta = sp.track(track_id)
    features = sp.audio_features(track_id)[0]
    track_info = [
        meta['name'], 
        meta['album']['name'], 
        meta['album']['artists'][0]['name'], 
        meta['album']['release_date'], 
        meta['duration_ms'], 
        meta['popularity'], 
        features['key'], 
        features['mode'], 
        features['danceability'], 
        features['acousticness'], 
        features['energy'], 
        features['instrumentalness'], 
        features['liveness'], 
        features['loudness'], 
        features['speechiness'], 
        features['tempo'], 
        features['time_signature'], 
        features['valence']
    ]
    return track_info
#%% [code]
tracks = []
for track_id in track_ids:
    time.sleep(0.5)  # Spotify APIのレート制限を避けるために0.5秒の遅延を追加
    track = getTrackFeatures(track_id)
    tracks.append(track)
    
print(tracks)
#%% [code]
# データフレームに変換し、CSVファイルとして保存
df = pd.DataFrame(tracks, columns=[
    'name', 'album', 'artist', 'release_date', 'length', 'popularity', 'key', 'mode', 
    'danceability', 'acousticness', 'energy', 'instrumentalness', 'liveness', 
    'loudness', 'speechiness', 'tempo', 'time_signature', 'valence'
])
df.head()
# CSVファイルとして保存し、ダウンロード可能にする
csv_filename = 'spotify_tracks.csv'
df.to_csv(csv_filename, encoding='utf_8_sig')
from google.colab import files
files.download(csv_filename)
補足:SpotifyのプレイリストIDについて
任意のプレイリストを開き、一番右の三点リーダーから、シェア > プレイリストのリンクをコピーする。
リンクが”https://open.spotify.com/playlist/37i9dQZF1DXcFHus2afh6U?si=ce870221ae3d4bc4“の場合、プレイリストIDは”37i9dQZF1DXcFHus2afh6U”である。

まとめ
Spotify APIを利用することで、楽曲データを取得し、データ分析に活用していくことができる。面倒なコードを書く作業やデータ準備の時間を削減し、データの可視化、分析の時間を充実させてほしい。
- Spotify APIを利用することで好きなプレイリストの楽曲データを取得できる
 - 取得したデータをCSV化できる
 
