如何使用 Spotify API 获取歌曲流派

问题描述 投票:0回答:1

我正在尝试使用元数据创建我在 Spotify 上保存的所有曲目的数据集。我已经获得了所有歌曲功能、曲目名称和曲目 ID。我想添加曲目艺术家和流派之一的列。

我尝试通过“liked_tracks.extend”添加它,但我无法让它工作。

cid =""
secret = ""
redirect_uri = 'http://localhost:8000/callback'

FEATURE_KEYS = ['danceability', 'energy', 'key', 'loudness', 'mode', 'speechiness', 'acousticness', 'instrumentalness', 'liveness', 'valence', 'tempo']

OFFSET=0
SAVED_TRACKS_LIMIT=50
FEATURE_LIMIT = 100

sp = spotipy.Spotify(auth_manager=SpotifyOAuth(client_id=cid,
                                               client_secret=secret,
                                               redirect_uri=redirect_uri,
                                               scope="user-library-read"))

liked_tracks = list()
print(liked_tracks)

while(True):
    paged_tracks = sp.current_user_saved_tracks(offset=OFFSET, limit=SAVED_TRACKS_LIMIT)
    liked_tracks.extend([{'name':el['track']['name'],
                          'id':el['track']['id']} for el in paged_tracks['items']])
    print(f'Fetched {len(liked_tracks)} tracks')
    OFFSET+=SAVED_TRACKS_LIMIT
    if paged_tracks['next'] is None:
        break

def get_windowed_track_ids(liked_tracks, limit):
    for i in range(0, len(liked_tracks), limit):
        track_window = liked_tracks[i:i + limit]
        yield track_window, [t['id'] for t in track_window]

track_feature_list = list()
print('')

for track_window, track_window_ids in get_windowed_track_ids(liked_tracks, FEATURE_LIMIT):
    track_features = sp.audio_features(tracks=track_window_ids)
    for index, _track in enumerate(track_window):
        _track.update({k:v for k,v in track_features[index].items() if k in FEATURE_KEYS})
        track_feature_list.append(_track)
    print(f'Fetched features for {len(track_feature_list)} tracks')

df = pd.DataFrame.from_dict(track_feature_list)
mysavedsongs = f'liked_tracks_{int(time())}.csv'
df.to_csv(mysavedsongs, index=False)
print('')
print(f'Saved features to {mysavedsongs}')
python spotify spotipy
1个回答
0
投票

Spotify 和 Spotipy 都不提供

genre
作为歌曲的元数据;但是,
genre
是作为艺术家的元数据提供的。您可以使用歌曲和搜索 API 来检索有关艺术家的数据;您可以在此处提取元数据以获取艺术家的流派。这并不总是完美的,但可能是专门使用 Spotipy 或 Spotify API 的最佳选择:

import spotipy
from spotipy.oauth2 import SpotifyClientCredentials

client_credentials_manager = SpotifyClientCredentials(client_id='YOUR_CLIENT_ID', client_secret='YOUR_CLIENT_SECRET')
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)

song_name = 'Sicko Mode'
artist_name = 'Drake' #optional

# hit search API
results = sp.search(q=f'track:{song_name} artist:{artist_name}', type='track', limit=1)

if results['tracks']['items']:
    # gets artist
    artist_id = results['tracks']['items'][0]['artists'][0]['id']
    
    # gets artist metadata
    artist_info = sp.artist(artist_id)
    
    # extracts genre
    genres = artist_info['genres']
    print(f"Genres for {artist_name}: {', '.join(genres)}")
else:
    print("Song not found.")
© www.soinside.com 2019 - 2024. All rights reserved.