【发布时间】:2021-04-04 06:17:16
【问题描述】:
我开始使用 Python 和 Alexa RANK API,我有一个小问题,我尝试获取 JSON 响应,但我得到 XML 响应,因为我在我的标题中要求 JSON,如网站 https://awis.alexa.com/developer-guide 中所述
这是我的代码:
import requests
import json
headers = {
'Accept': 'application/json',
'x-api-key': 'SMADth1A9xxxxxxxxxxxxxxxxxxxxxxxxxxxEotx',
}
params = (
('Action', 'UrlInfo'),
('ResponseGroup', 'Rank'),
('Url', 'yahoo.com'),
)
response = requests.get('https://awis.api.alexa.com/api', headers=headers, params=params)
结果:
<?xml version="1.0" ?>
<Awis>
<OperationRequest>
<RequestId>b14aa999-926d-47c5-87e6-f1fb0f53a40b</RequestId>
</OperationRequest>
<Results>
<Result>
<Alexa>
<Request>
<Arguments>
<Argument>
<Name>url</Name>
<Value>yahoo.com</Value>
</Argument>
<Argument>
<Name>responsegroup</Name>
<Value>Rank</Value>
</Argument>
</Arguments>
</Request>
<TrafficData>
<DataUrl>yahoo.com/</DataUrl>
<Rank>12</Rank>
</TrafficData>
</Alexa>
</Result>
<ResponseStatus>
<StatusCode>200</StatusCode>
</ResponseStatus>
</Results>
</Awis>
enter code here
【问题讨论】:
-
你能分享一下回复的样子吗?你确定它是 XML 吗?如果它实际上没有发回正确的数据格式,这似乎是 Alexa 端某个地方的一个相当明显的错误。如果响应正文是真正的 XML,我会尝试与他们联系。
-
为什么你的代码和official sample有这么大的不同?
-
@esqew 请仔细检查 ;)
-
@esqew - 没有理由期望特定 API 在不知道它可以/应该这样做的情况下发回任何特定格式。因此,除非他们的文档说 API 支持以 JSON 格式发回结果,否则它不这样做的事实并不是错误。
-
@Steve 我关于这种行为是一个错误的评论的基础植根于 上面链接的文档 OP,它清楚地说明了以下内容,强调我的(以及使用示例cURL 沿
application/json的Accept标头值发送):“查询请求只是返回 XML 或 JSON 的 HTTP GET 请求。”正如您所提到的, “他们的文档说 API 支持以 JSON 格式发回结果”。我不确定这里有什么困惑。
标签: python