Как получить все предметы через Spotipy, включая следующую страницу - PullRequest
0 голосов
/ 19 апреля 2020

Использование библиотеки Spotipy python Я пытаюсь распечатать все свои сохраненные песни из Spotify.

Используя следующий код, я могу распечатать все результаты с первой страницы, которая была возвращена:

results = sp.current_user_saved_tracks()
for item in results['items']:
        results = sp.next(results['items'])
        track = item['track']
        label = track['artists'][0]['name'] + ' - ' + track['name'] 
        print (label)

Используя некоторые другие примеры того, как перебирать списки воспроизведения, имеющие несколько страниц, я поместил оператор while в go на следующую страницу ( если он существует)

results = sp.current_user_saved_tracks()
for item in results['items']:
    while results['next']:
        results = sp.next(results['items'])
        track = item['track']
        label = track['artists'][0]['name'] + ' - ' + track['name'] 
        print (label)

Но это не работает, я получаю следующую ошибку:

TypeError: индексы списка должны быть целыми числами или слайсами, а не str

Так выглядит структура получения пользовательских треков из Spotify API

{
  "href": "https://api.spotify.com/v1/me/tracks?offset=0&limit=50",
  "items": []
  "limit": 50,
  "next": "https://api.spotify.com/v1/me/tracks?offset=50&limit=50",
  "offset": 0,
  "previous": null,
  "total": 414
}

Внутри массива items есть треки, которые я зафиксировал, потому что их слишком много.

Может кто-нибудь объяснить, как правильно go перейти на следующие страницы и продолжить для l oop?

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Разобрался:

results = sp.current_user_saved_tracks()
tracks = results['items']
while results['next']:
    results = sp.next(results)
    tracks.extend(results['items'])

for track in tracks:
    print(track['track']['name'])
0 голосов
/ 20 апреля 2020

Я думаю, вы должны попробовать:

for item in results['tracks']['items']:
    while results['tracks']['next']:
        results = sp.next(results['tracks']['items'])
        track = item['track']
        label = track['artists'][0]['name'] + ' - ' + track['name'] 
        print (label)
...