Получить Spotipy ID альбома из альбома

Используя Spotipy, я пытаюсь перечислить треки, указав имя исполнителя и альбом.

Это должно быть довольно просто, однако я не знаю, как получить идентификатор альбома, чтобы получить треклист. Я думал, что это будет что-то вроде:

sp.album_tracks(q = "album:" + album, type = "album")

... только это не работает.

Вот что у меня так далеко. Он успешно получит альбомы для выбранного исполнителя (здесь они жестко запрограммированы как "Фосгор" без особой причины, за исключением того, что у них всего три альбома, и я не хотел заваливать себя словарем):

#!/usr/bin/python
# -*- coding: utf-8 -*-

# shows album from trackname

import sys
import spotipy

def get_albums_from_artist_name(name):

  results = sp.search(q = "artist:" + name, type = "artist")
  items = results["artists"]["items"]
  if len(items) == 0:
    return None
  else:
    d = items[0]

  # get artistID and artist name from dict
  artID = d["id"]     # 3Cf1GbbU9uHlS3veYiAK2x
  aName = d["name"]   # Phosgore

  artistUri = "spotify:artist:" + artID

  results = sp.artist_albums(artistUri, album_type = "album")
  albums = results["items"]
  while results["next"]:
    results = sp.next(results)
    albums.extend(results["items"])

  unique = set() # ignore duplicate albums
  for album in albums:
    name = album["name"]
    if not name in unique: 
      unique.add(name) # unique is a set

  print ("\nAlbums by %s:\n" %(aName))
  unique = list(unique)
  for i in range(0, len(unique)):
    print unique[i]

  # let's return a list instead of a set
  return list(unique)

#------------------------------------------------
def get_tracks_from_album(album):
  tracks = []
  # results = sp.album_tracks(q = "album:" + album, type = "album")
  # don't know how to get album id
  # list tracks here


sp = spotipy.Spotify()
sp.trace = False

ask = "Phosgore"

artistAlbums = get_albums_from_artist_name(ask)

get_tracks_from_album("Pestbringer")

1 ответ

Решение

Получить uri of the album and pass it to the .album_tracks() метод:

import spotipy

sp = spotipy.Spotify()
sp.trace = False

# find album by name
album = "Pestbringer"
results = sp.search(q = "album:" + album, type = "album")

# get the first album uri
album_id = results['albums']['items'][0]['uri']

# get album tracks
tracks = sp.album_tracks(album_id)
for track in tracks['items']:
    print(track['name'])

Печать:

Embrace Our Gift
Here Comes the Pain
Pestbringer
Dein Licht
Aggression Incarnate
Countdown to Destruction
Nightmare
Noise Monsters
Lobotomy
The Holy Inquisition
Tote Musikanten
Другие вопросы по тегам