从 last.fm 获取热门专辑
Getting top albums from last.fm
我从 lastfm api 获取来自特定国家/地区的顶级艺术家。我成功地获得了 artists{}
中每个艺术家的名字和商店:
import requests
api_key = "0929f1144e531702a5563c887cbbade0"
ID = 0
artists = {}
for i in range(1, 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"]
artists[ID] = {}
artists[ID]['ID'] = ID
artists[ID]['name'] = name
ID += 1
但现在对于每个艺术家,我想获得前 5 名专辑并将艺术家姓名、艺术家 ID、专辑名称和专辑的 url 存储在 albums{},
中。
例如,对于每位艺术家,我想为前 5 张专辑的每张专辑获取一条记录,如下所示:
"Artist": "U2", "ID": 175, "ArtistID": 10, "Title": Achtung Baby",
"Image": "https://lastfm-img2.akamaized.net/i/u/174s/a482040d21924ddacd5fe75dedbb1ef2.png"},
"URL": "https://www.last.fm/music/U2/Achtung+Baby"}, "487": {"Date": "2004-01-01"
"Artist": "U2", "ID": 176, "ArtistID": 10, "Description": "None", "Title": "Boy",
... and then the same for the other 3 albums of the top5
我正在使用下面的代码执行此操作,但它无法正常工作。 artistId 始终显示为“0”,并且只出现第一位艺术家的 5 张专辑。你知道问题出在哪里吗?
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
for image in album['image']:
if (image["size"] == "large"):
if (image["size"] is not None):
image = image["#text"]
albums[ID]['image'] = image
ID += 1
print(albums)
尝试将您的专辑循环更改为这样开始:
for _, v in artists.items():
chosen = v['name'].replace(" ", "+")
此外,我注意到您在艺术家的开头分配了 ID = 0,但在专辑中引用它,您可能需要查看一下。
====
编辑:
下面的代码对我有用,虽然我不太确定你想要什么格式,所以它不完整。
import requests
api_key = "0929f1144e531702a5563c887cbbade0"
artists_url = (
'http://ws.audioscrobbler.com/2.0/?method=geo.gettopartists'
'&country=spain&format=json&page={}&api_key={}'
)
artists = []
for page in range(1, 3):
artists_data = requests.get(artists_url.format(str(page), api_key)).json()
for ID, artist in enumerate(artists_data["topartists"]["artist"]):
artists.append((ID, artist["name"]))
albums = {}
albums_url = (
'http://ws.audioscrobbler.com/2.0/?method=artist.gettopalbums'
'&format=json&artist={}&api_key={}&limit=5'
)
for ID, artist in artists[:3]: ### LIMITED to first three artists for testing.
print('\n------\n{} {}'.format(ID, artist))
chosen = artist.replace(" ", "+")
albums_data = requests.get(albums_url.format(chosen, api_key)).json()
for album in albums_data['topalbums']['album']:
name = album["name"]
url = album["url"]
print('{}\n{}'.format(name, url))
print(album)
print()
# 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
#
# for image in album['image']:
# if (image["size"] == "large"):
# if (image["size"] is not None):
# image = image["#text"]
# albums[ID]['image'] = image
#
# ID += 1
#
# print(albums)
# print()
我从 lastfm api 获取来自特定国家/地区的顶级艺术家。我成功地获得了 artists{}
中每个艺术家的名字和商店:
import requests
api_key = "0929f1144e531702a5563c887cbbade0"
ID = 0
artists = {}
for i in range(1, 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"]
artists[ID] = {}
artists[ID]['ID'] = ID
artists[ID]['name'] = name
ID += 1
但现在对于每个艺术家,我想获得前 5 名专辑并将艺术家姓名、艺术家 ID、专辑名称和专辑的 url 存储在 albums{},
中。
例如,对于每位艺术家,我想为前 5 张专辑的每张专辑获取一条记录,如下所示:
"Artist": "U2", "ID": 175, "ArtistID": 10, "Title": Achtung Baby",
"Image": "https://lastfm-img2.akamaized.net/i/u/174s/a482040d21924ddacd5fe75dedbb1ef2.png"},
"URL": "https://www.last.fm/music/U2/Achtung+Baby"}, "487": {"Date": "2004-01-01"
"Artist": "U2", "ID": 176, "ArtistID": 10, "Description": "None", "Title": "Boy",
... and then the same for the other 3 albums of the top5
我正在使用下面的代码执行此操作,但它无法正常工作。 artistId 始终显示为“0”,并且只出现第一位艺术家的 5 张专辑。你知道问题出在哪里吗?
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
for image in album['image']:
if (image["size"] == "large"):
if (image["size"] is not None):
image = image["#text"]
albums[ID]['image'] = image
ID += 1
print(albums)
尝试将您的专辑循环更改为这样开始:
for _, v in artists.items():
chosen = v['name'].replace(" ", "+")
此外,我注意到您在艺术家的开头分配了 ID = 0,但在专辑中引用它,您可能需要查看一下。
==== 编辑:
下面的代码对我有用,虽然我不太确定你想要什么格式,所以它不完整。
import requests
api_key = "0929f1144e531702a5563c887cbbade0"
artists_url = (
'http://ws.audioscrobbler.com/2.0/?method=geo.gettopartists'
'&country=spain&format=json&page={}&api_key={}'
)
artists = []
for page in range(1, 3):
artists_data = requests.get(artists_url.format(str(page), api_key)).json()
for ID, artist in enumerate(artists_data["topartists"]["artist"]):
artists.append((ID, artist["name"]))
albums = {}
albums_url = (
'http://ws.audioscrobbler.com/2.0/?method=artist.gettopalbums'
'&format=json&artist={}&api_key={}&limit=5'
)
for ID, artist in artists[:3]: ### LIMITED to first three artists for testing.
print('\n------\n{} {}'.format(ID, artist))
chosen = artist.replace(" ", "+")
albums_data = requests.get(albums_url.format(chosen, api_key)).json()
for album in albums_data['topalbums']['album']:
name = album["name"]
url = album["url"]
print('{}\n{}'.format(name, url))
print(album)
print()
# 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
#
# for image in album['image']:
# if (image["size"] == "large"):
# if (image["size"] is not None):
# image = image["#text"]
# albums[ID]['image'] = image
#
# ID += 1
#
# print(albums)
# print()