【问题标题】:Loop through API json responses and add them into one python dictionary循环遍历 API json 响应并将它们添加到一个 python 字典中
【发布时间】:2019-11-06 08:26:14
【问题描述】:

我想使用OpenPageRank API 从域列表中获取“页面排名”和其他统计信息。

他们的文档是 php,我很难翻译它,或者让它在我的情况下工作。

这个想法是获取 API 响应并将它们附加到 python dict 或 .json 文件。

目前我已经定义了这个函数:

    headers = {'API-OPR': '%s' % opr_api_key}
    api_results = {}
    for items in domains_to_check:
        url = 'https://openpagerank.com/api/v1.0/getPageRank?domains%5B0%5D=' + items
        request = requests.get(url, headers=headers)
        api_result = request.json()

domains_to_check 列表已预定义,其中包含用于测试的域。

现在正如您在上面看到的,代码将请求发送到 OPR 并获取它存储到 api_result 的 json 结果,并且正如预期的那样,它只是添加了最后一个 API 结果。

我想遍历列表中的所有域,发送请求并将其附加到结果中。

dict.append[result] 不起作用,因为结果是一个 .json 文件。不是 python 字典。

我尝试将结果转换为 Python 字典,但失败了。

API 文档提示可以通过API from a single request 发送数组,但无法从 php.ini 复制此代码。

不知道如何解决这个问题。或者如何接近它。看起来很简单,但我就是无法打破它。

欢迎任何帮助。

【问题讨论】:

  • 嗯刚刚看到这个%5B0%5D在URL中来自PHP。我把它留在那里,因为我可以从 1 个域中获得结果,并认为问题出在其他地方。也会在那里调查。
  • 为什么不使用列表呢?据我所知,您没有提到任何将结果与任何内容相关联的键。

标签: python json rest


【解决方案1】:

考虑使用列表,因为您没有提到将结果与任何键相关联。

def send_domains_to_OPR():
    headers = {'API-OPR': '%s' % opr_api_key}
    api_results = []
    for items in domains_to_check:
        url = 'https://openpagerank.com/api/v1.0/getPageRank?domains%5B0%5D=' + items
        request = requests.get(url, headers=headers)
        api_results.append(request.json())

如果您想将响应与要检查的域列表匹配,您可以随时压缩它们:

for items, response in zip(domains_to_check, api_results):
  print(items)
  print(response)

【讨论】:

  • 感谢您的指导。它有很大帮助。现在,我知道我需要与键合并。因为最终,我希望能够过滤掉所有那些具有
  • 好酷。您可以使用filter 过滤此数据结构,例如list(filter(lambda response: response.rank > 1, responses))。如果解决了,请采纳答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 2019-02-11
  • 2019-09-02
  • 1970-01-01
相关资源
最近更新 更多