每张返回专辑的曲目都不适合一些艺术家



我正在从一个特定国家/地区获得顶级艺术家,艺术家的专辑以及LastFM API的专辑的曲目。我会发现艺术家和专辑没有错误,但是在曲目中出现:

for album in album_response['album']['tracks']['track']: KeyError: 'album'

这个问题似乎是因为一些艺术家的名称中有空格,所以我也用" "替换为"%2b",但没有解决方案在起作用,它总是会出现上述错误。

chosen = artists[i]['name'].replace(" ", "+")
chosen = '+'.join(artists[i]['name'].lower().split())
chosen = artists[i]['name'].replace(" ", "%2B")

轨道部分是错误:

tracks = {}
for i,v in albums.items():
    artist = albums[i]['artist'].replace(" ","+")
    name = albums[i]['name'].replace(" ", "+")
    album_response_data = requests.get('http://ws.audioscrobbler.com/2.0/?method=album.getinfo&format=json&api_key='+api_key+'&artist='+artist+'&album='+name)
    album_response = album_response_data.json()
    print(album_response)      
    for album in album_response['album']['tracks']['track']:

        title = album['name']
        number = album['@attr']['rank']
        duration = album['duration']
        tracks[ID] = {}
        tracks[ID]['title'] = title
        tracks[ID]['number'] = number
        tracks[ID]['artist'] = albums[i]['artist']
        tracks[ID]['album'] = albums[i]['name']
        tracks[ID]['albumID'] = albums[i]['ID']
        tracks[ID]['duration'] = duration
        ID += 1

最低工作范围:

import requests
api_key = "b088cbedecd40b35dd89e90f55227ac2"
ID= 0
#Get artists from specific country
artists = {}
for i in range(2, 3):
    artists_response = requests.get(
        'http://ws.audioscrobbler.com/2.0/?method=geo.gettopartists&country=spain&format=json&page=' + str(i) + '&api_key=' + api_key)
    artists_data = artists_response.json()
    for artist in artists_data["topartists"]["artist"]:
        name = artist["name"]
        url = artist["url"]
        #if ID > 3 continue
        artists[ID] = {}
        artists[ID]['ID'] = ID
        artists[ID]['name'] = name
        ID += 1

#Get TopAlbums info from above artists
albums = {}
for i, v in artists.items():
    chosen = artists[i]['name'].replace(" ", "+")
    topalbums_response = requests.get(
        'http://ws.audioscrobbler.com/2.0/?method=artist.gettopalbums&format=json&artist=' + chosen + '&api_key=' + api_key + '&limit=5')
    albums_data = topalbums_response.json()
    for album in albums_data['topalbums']['album']:
        name = album["name"]
        url = album["url"]
        albums[ID] = {}
        albums[ID]['ID'] = ID
        albums[ID]['artist'] = artists[i]['name']
        albums[ID]['artistID'] = artists[i]['ID']
        albums[ID]['name'] = name
        albums[ID]['url'] = url
        ID += 1
#Get tracks info of the above albums
tracks = {}
for i,v in albums.items():
    artist = albums[i]['artist'].replace(" ","+")
    name = albums[i]['name'].replace(" ", "+")
    album_response_data = requests.get('http://ws.audioscrobbler.com/2.0/?method=album.getinfo&format=json&api_key='+api_key+'&artist='+artist+'&album='+name)
    album_response = album_response_data.json()

    for album in album_response['album']['tracks']['track']:  
            title = album['name']
            number = album['@attr']['rank']
            duration = album['duration']
            tracks[ID] = {}
            tracks[ID]['trackID'] = ID
            tracks[ID]['title'] = title
            tracks[ID]['number'] = number
            tracks[ID]['artist'] = albums[i]['artist']
            tracks[ID]['album'] = albums[i]['name']
            tracks[ID]['albumID'] = albums[i]['ID']
            tracks[ID]['duration'] = duration
            ID += 1

问题是,在您获得错误的情况下,COM_Response是{'error': 6, 'message': 'Album not found', 'links': []}

我添加了一行,以打印出在循环中处理的艺术家和专辑的名称,我看到艺术家是Ed Sheeran,但没有相关的专辑。

我不确定为什么会发生这种情况,但是我会告诉您您需要修复循环变量。在Python中,变量在函数中范围内范围范围,而不是在控制结构中。您的嵌套循环都使用i作为循环中的变量。这通常会在内部循环进步i时引起冲突,并且外循环可以看到这些进步。

您的问题是您的专辑词典中的记录键19:

19:{'id':19,'Artist':'Ed Sheeran','ArtistId':3,'Image': 'https://lastfm-img2.akamaized.net/i/u/174s/d08fbb920e514f5c893d9555552379d3fc.png', 'name':' ','url':'https://www.last.fm/music/ed sheeran/%2b'}

注意专辑的名称是" " A加号。

您需要将urlencode" "到%2B或用%2B进行替换" "。

http://ws.audioscrobbler.com/2.0/?method=Album.getInfo& format=json& p.amkey = b088cbedecd40b35dd89e90f5552227ac2

否则您会回来"消息":"未找到专辑" ....

最新更新