首页 > 解决方案 > Python - 创建一个循环来更改 api 搜索结果并写入 JSON/CSV

问题描述

我完全不知道如何解决我的问题。到目前为止,我可以在“target_id”中使用一个请求写入 JSON 文件。API 会自动输出 JSON。

问题是,如果我有一个 target_id 的列表(目前是 JSON 和 CSV),我如何循环它来改变 target_id(也就是改变 API URL)然后写入同一个文件?

代码:

import urllib.parse
import requests
import json

main_api = 'http://sc-api.com/?api_source=live&system=accounts&action=full_profile&'

target_id = 'abc'

url = main_api + urllib.parse.urlencode({'target_id': target_id})
json_data = requests.get(url).json()
json_status = json_data['request_stats']['query_status']

#-----did the API work?-----
#print('API Status: ' + json_status)
#print()
#print(json_data)
#print()

handle = json_data['data']['handle']
moniker = json_data['data']['moniker']
citizen_number = json_data['data']['citizen_number']

#-----preview if no need to write to file-----
#print('target_id: ' + handle + ',', 'Moniker: ' + moniker + ',', 'Citizen Number: ' + citizen_number)

with open('new_test.json', 'w') as f:
    json.dump((handle, moniker, citizen_number), f)

以下是包含目标 ID 列表的文件格式:

 [
      {
        "Handle": "name1"
      },
      {
        "Handle": "name2"
      },
      {
        "Handle": "name3"
      },
      {
        "Handle": "name4"
      },
      {
        "Handle": "name5"
      }
    ]

对此或去哪里的任何帮助将不胜感激。谢谢 :)

标签: pythonjsoncsv

解决方案


您可以像使用这样的东西循环文件:

import urllib.parse
import requests
import json

main_api = 'http://sc-api.com/?api_source=live&system=accounts&action=full_profile&'

with open('data.json') as f:
    data = json.load(f)

    result = []
    for element in data:
        target_id = element['Handle']

        url = main_api + urllib.parse.urlencode({'target_id': target_id})
        json_data = requests.get(url).json()
        json_status = json_data['request_stats']['query_status']

        handle = json_data['data']['handle']
        moniker = json_data['data']['moniker']
        citizen_number = json_data['data']['citizen_number']

        # -----preview if no need to write to file-----
        print('target_id: ' + handle + ',', 'Moniker: ' + moniker + ',', 'Citizen Number: ' + citizen_number)

        result.append({'target_id': handle, 'Moniker': moniker, 'Citizen Number': citizen_number})

    with open('output.json', 'w') as f:
        json.dump(result, f)

输出

target_id: abc, Moniker: C4sher, Citizen Number: 210602
target_id: abc, Moniker: C4sher, Citizen Number: 210602
target_id: abc, Moniker: C4sher, Citizen Number: 210602
target_id: abc, Moniker: C4sher, Citizen Number: 210602
target_id: abc, Moniker: C4sher, Citizen Number: 210602

除了上面的输出,这个脚本创建了一个'output.json'具有以下格式的:

[{"Moniker": "C4sher", "target_id": "abc", "Citizen Number": "210602"}, 
  {"Moniker": "C4sher", "target_id": "abc", "Citizen Number": "210602"}, 
  {"Moniker": "C4sher", "target_id": "abc", "Citizen Number": "210602"}, 
  {"Moniker": "C4sher", "target_id": "abc", "Citizen Number": "210602"}, 
  {"Moniker": "C4sher", "target_id": "abc", "Citizen Number": "210602"}]

一些注意事项:

该脚本假定.py文件和'data.json'文件位于同一目录中。输入文件也被命名为'data.json'. 我用这样的“工作示例”更改了问题的示例 JSON:

[
  {
    "Handle": "abc"
  },
  {
    "Handle": "abc"
  },
  {
    "Handle": "abc"
  },
  {
    "Handle": "abc"
  },
  {
    "Handle": "abc"
  }
]

推荐阅读