这是我的代码:
import requests
r = requests.get('http://www.last.fm/api/show/track.getSimilar', params = {
"track": "Believe",
"artist": "Cher",
"limit": "5",
"api_key":"#my_api_key"})
r.status_code
返回 200 表示调用成功。但是,当我尝试使用 r.text 打印响应时,我无法理解该响应。
最佳答案
您正在尝试调用文档 URL;返回的页面解释了如何使用 API< 它不是实际的 API 方法本身。调用实际的 API:
http://ws.audioscrobbler.com/2.0/
并将该方法作为参数给出:
params = {
"method": "track.getSimilar",
"track": "Believe",
"artist": "Cher",
"limit": "5",
"api_key":"#my_api_key"
}
r = request.get('http://ws.audioscrobbler.com/2.0/', params=params)
请参阅API introduction :
The API root URL is located at http://ws.audioscrobbler.com/2.0/
和 REST requests documentation :
Generally speaking, you will send a method parameter expressed as 'package.method' along with method specific arguments to the root URL. The following parameters are required for all calls:
api_key : A Last.fm API Key.
method : An API method expressed as package.method, corresponding to a documented last.fm API method name.
演示:
>>> import requests
>>> params = {
... "method": "track.getSimilar",
... "track": "Believe",
... "artist": "Cher",
... "limit": "5",
... 'api_key': '#a valid api key#',
... }
>>> r = requests.get('http://ws.audioscrobbler.com/2.0/', params=params)
>>> r
<Response [200]>
>>> r.headers['content-type']
'text/xml; charset=utf-8;'
>>> r.content.splitlines()[1:3]
['<lfm status="ok">', '<similartracks track="Believe" artist="Cher">']
如果您使用requests
,将format
参数设置为json
可能会更容易:
>>> params['format']= 'json'
>>> r = requests.get('http://ws.audioscrobbler.com/2.0/', params=params)
>>> r.json()['similartracks']['@attr']
{u'track': u'Believe', u'artist': u'Cher'}
但是,您可以使用pyLast
module,而不是重新发明轮子。相反:
import pylast
from itertools import islice
last = pylast.LastFMNetwork(api_key="#your_api_key", api_secret="#your_api_secret")
track = last.get_track('Cher', 'Believe')
for similar in islice(track.get_similar(), 5):
# limited to the first 5 similar tracks
print similar.item
关于python - 尝试为 track.getSimilar 调用 last.fm Rest api,在 python 中无法理解响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25587992/