Spotify Web API로 밝은 곡만 재생목록 만들기

개요



모두 Spotify를 사용하고 있습니까?
Spotify의 악곡 데이터에는 그 곡에 어떤 특징이 있는지에 관한 정보가 포함되어 있습니다.
이 기사에서는 즐겨찾기 등록한 곡 중에서 밝은(Major)이라고 판단된 것만의 플레이리스트를 작성해 보려고 합니다.
API를 사용하려면 python 라이브러리 spotipy을 사용하십시오.

액세스 인증



우선 액세스 인증을 합니다. 클라이언트 ID 등의 취득은 여기 로부터 실시할 수 있습니다.
import spotipy
import spotipy.util as util

username = 'ユーザ名'
client_id = 'クライアントID'
client_secret = 'クライアントシークレット'
redirect_uri = 'http://example.com'

#アプリの権限付与に使用する
#https://developer.spotify.com/documentation/general/guides/scopes/
scope = 'user-library-read user-read-playback-state playlist-read-private user-read-recently-played playlist-read-collaborative playlist-modify-public playlist-modify-private'
token = util.prompt_for_user_token(username, scope, client_id, client_secret, redirect_uri)
sp = spotipy.Spotify(auth = token)

노래 ID와 노래 이름 얻기



즐겨찾기 등록한 노래는 current_user_saved_tracks 에서 얻을 수 있습니다.

import pandas as pd

def track_info(limit = 20):
    saved_tracks = sp.current_user_saved_tracks(limit = limit)

    track_id = lambda i: saved_tracks['items'][i]['track']['id']
    track_name = lambda i: sp.track(track_id(i))['name']

    info = [[track_id(i), track_name(i)] for i in range(limit)]
    return pd.DataFrame(info, columns = ['track_id','track_name'])

print(track_info())

                 track_id                        track_name
0   3xkGcE52Hpr8zd34ws2D0A                     hot chocolate
1   5Hqh7J6Oy0Uz85DSx5JUsw                           ストロボナイツ
2   6yK4KPKZa0xX0h58bY96VY                             Miree
3   753nzL4g1fBQt3RuHVHVDQ                 You're Everything
4   0albLGvYx6ftOUJ7KF0i5I                         STAY TUNE
5   0oCP1Vu9LGVP88atKzOswC                         ambiguous
6   0cSkn2l67csUljEy0EEBPn                                 炎
7   3BSPKTravgBDjmuG1rIXvw                     BLOODY STREAM
8   2iOvMtA1u9s95NF6mJDOuT                                香水
9   0E5pNzt2pwd3bOqQsOnfQv  Tick Tock Skip Drop - Mili remix
...

잘 잡히는 것 같습니다! (오타쿠 선곡감

악곡의 특징을 취득



특징은 audio_features 에서 얻을 수 있습니다.
밝은 곡이 1, 어두운 곡이 0으로 컬럼의 mode 에 출력됩니다.
· Get Audio Features for a Track

def track_features(track_ids, limit = 20):
    return pd.DataFrame(sp.audio_features(track_ids))

print(track_features(track_info()['track_id']).drop(['track_href', 'analysis_url', 'id', 'uri'], axis=1))
    danceability  energy  key  loudness  mode  speechiness  acousticness  instrumentalness  liveness  valence    tempo            type  duration_ms  time_signature
0          0.563   0.958    1    -4.514     1       0.0476      0.173000          0.003240    0.2250    0.620  160.421  audio_features       193508               4
1          0.550   0.879    0    -4.496     1       0.0490      0.000826          0.000059    0.1540    0.143  124.989  audio_features       345171               4
2          0.717   0.688   10    -5.886     0       0.0270      0.022500          0.000000    0.1070    0.715  124.015  audio_features       242600               4
3          0.614   0.443    8   -12.060     0       0.0335      0.354000          0.004890    0.1070    0.291   98.974  audio_features       227762               4
4          0.681   0.938    5    -4.246     1       0.0557      0.028800          0.000264    0.0634    0.600  122.991  audio_features       297333               4
5          0.441   0.962    0    -2.299     1       0.1080      0.142000          0.000103    0.3170    0.592  178.201  audio_features       272480               4
6          0.477   0.685    2    -4.554     1       0.0325      0.105000          0.000000    0.2770    0.308  152.040  audio_features       275000               4
7          0.274   0.903    8    -3.125     1       0.0640      0.008600          0.000000    0.3150    0.662  129.999  audio_features       261920               4
8          0.848   0.352    3    -6.838     1       0.0410      0.824000          0.000000    0.0906    0.776  121.833  audio_features       252594               4
9          0.453   0.466    7    -9.435     1       0.0310      0.538000          0.000010    0.0663    0.312   79.987  audio_features       308962               4
...

밝은 곡만 획득



방금 전의 곡명, ID의 테이블과 특징의 테이블을 결합해 조건을 짜냅니다.

def get_track_from_mode(mode = 1):
    info_with_features = pd.concat([track_info(), track_features(track_info()['track_id'])], axis = 1)
    return info_with_features[info_with_features['mode'] == mode]

print(get_track_from_mode()[['track_id', 'track_name', 'mode']])
                  track_id                        track_name  mode
0   3xkGcE52Hpr8zd34ws2D0A                     hot chocolate     1
1   5Hqh7J6Oy0Uz85DSx5JUsw                           ストロボナイツ     1
4   0albLGvYx6ftOUJ7KF0i5I                         STAY TUNE     1
5   0oCP1Vu9LGVP88atKzOswC                         ambiguous     1
6   0cSkn2l67csUljEy0EEBPn                                 炎     1
7   3BSPKTravgBDjmuG1rIXvw                     BLOODY STREAM     1
8   2iOvMtA1u9s95NF6mJDOuT                                香水     1
9   0E5pNzt2pwd3bOqQsOnfQv  Tick Tock Skip Drop - Mili remix     1
10  3xf3Ji3kDHH62sYK662mwS                              赤の同盟     1
12  5QWtG4MLn5yRVRv0OVPjCl                      Main Heroine     1
...
mode 가 1의 곡만 취득할 수 있었습니다.

재생목록 만들기



마지막으로 재생목록을 만듭니다.
from nested_lookup import nested_lookup

def make_playlist(playlist_name):
    user_id = sp.current_user()['id']

    if playlist_name not in nested_lookup('name', sp.current_user_playlists()):
        sp.user_playlist_create(user_id, playlist_name)
        sp.user_playlist_add_tracks(user = user_id, playlist_id = sp.current_user_playlists()['items'][0]['id'], tracks = get_track_from_mode()['track_id'])

make_playlist('test')


할 수 있었습니다!

좋은 웹페이지 즐겨찾기