【问题标题】:Is there a method to retrieve all tracks from a playlist using Spotipy?有没有一种方法可以使用 Spotipy 从播放列表中检索所有曲目?
【发布时间】:2019-09-05 11:42:09
【问题描述】:

我正在尝试从我在 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'])

【问题讨论】:

    标签: python spotipy


    【解决方案1】:

    您可以使用偏移量来收集多次调用的结果。该函数返回一个轨道对象列表。

    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"])
    

    【讨论】:

    • 您好,感谢您的回复!这个包很新,而且 Spotipy 自己网站的文档不是最清楚的——你能澄清一下函数的“字段”组件代表什么吗?
    • 当然!它可以限制返回的数据,例如fields="total,limit" - 有关the API reference for user_playlist_tracks的更多详细信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    相关资源
    最近更新 更多