在Python中尝试调用last.fm Rest api的track.getSimilar,无法理解响应
这是我的代码:
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
打印响应时,我无法理解这个响应。
1 个回答
4
你正在尝试访问文档网址;返回的页面是关于如何使用这个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介绍:
还有REST请求文档:
一般来说,你需要把方法参数写成'package.method',并且和特定的方法参数一起发送到根网址。所有调用都需要以下参数:
api_key : 一个Last.fm的API密钥。
method : 一个API方法,以package.method的形式表示,对应于文档中列出的Last.fm API方法名称。
示例:
>>> 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
模块:
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