python - 尝试为 track.getSimilar 调用 last.fm Rest api,在 python 中无法理解响应

标签 python rest request last.fm

这是我的代码:

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/

相关文章:

从嵌套字典中检索单个级别的 Pythonic 方法

python - 有没有办法在 Raspberry Pi 4 上获得 GPU 加速以进行深度学习?

java - Struts2注解@RequestParameter

javascript - 通过在 Node 中发出 http 请求来验证表单输入

python - GraphQL:如何对节点的 "foreign key"集合项进行排序?

python - 如何加速python的 'turtle'函数并在最后停止卡住

javascript - JS 中 REST API 的 'then' 子句的用途是什么?

api - 用于高级搜索/过滤的 .Net Web API URL 约定

REST:创建相同资源的多种方式

elasticsearch - 聚合(一个字段中的许多值)elasticsearch