我正在尝试从Spotify中的一个播放列表中提取所有歌曲。使用Python中的spotipy软件包来帮助完成此任务。以下是我目前拥有的代码,仅可获得100条音轨。我尝试在互联网上搜寻解决方案,但似乎没有任何效果。下面是我到目前为止的代码。
#Import Library
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import spotipy
from matplotlib import style
from spotipy import util
from spotipy.oauth2 import SpotifyClientCredentials
#Set up Connection
client_id = 'id' #Need to create developer profile
client_secret = 'secret'
username = 'username' #Store username
scope = 'user-library-read playlist-modify-public playlist-read-private'
redirect_uri='uri'
client_credentials_manager = SpotifyClientCredentials(client_id=client_id,
client_secret=client_secret)#Create manager for ease
sp = spotipy.Spotify(client_credentials_manager=client_credentials_manager)
token = util.prompt_for_user_token(username, scope, client_id,
client_secret, redirect_uri)
if token:
sp = spotipy.Spotify(auth=token)
else:
print("Can't get token for", username)
#Connect to the best playlist, like ever
playlist_id = 'playlist'
playlist = sp.user_playlist(username,playlist_id)
#Extract list of songs/tracks
tracks = playlist["tracks"];
songs = tracks["items"];
track_ids = []
track_names = []
for i in range(0, len(songs)):
if songs[i]['track']['id'] != None: # Removes local tracks, if any
track_ids.append(songs[i]['track']['id'])
track_names.append(songs[i]['track']['name'])
答案 0 :(得分:0)
您可以使用偏移量来收集多个呼叫的结果。此函数返回跟踪对象的列表。
def user_playlist_tracks_full(spotify_connection, user, playlist_id=None, fields=None, market=None):
""" Get full details of the tracks of a playlist owned by a user.
https://developer.spotify.com/documentation/web-api/reference/playlists/get-playlists-tracks/
Parameters:
- user - the id of the user
- playlist_id - the id of the playlist
- fields - which fields to return
- market - an ISO 3166-1 alpha-2 country code.
"""
# first run through also retrieves total no of songs in library
response = spotify_connection.user_playlist_tracks(user, playlist_id, fields=fields, limit=100, market=market)
results = response["items"]
# subsequently runs until it hits the user-defined limit or has read all songs in the library
while len(results) < response["total"]:
response = spotify_connection.user_playlist_tracks(
user, playlist_id, fields=fields, limit=100, offset=len(results), market=market
)
results.extend(response["items"])