python - 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"
}
]
对此或去哪里的任何帮助将不胜感激。谢谢 :)
解决方案
您可以像使用这样的东西循环文件:
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"
}
]
推荐阅读
- kendo-ui - 如何添加不在 sprite.png 中的剑道编辑器工具图像
- r - 有没有办法提高模型的性能或替代方法?
- csv - P5 无法加载 CSV 表和图像
- laravel - Kubernetes 上的 Laravel websocket - 一些呼叫被丢弃
- excel - 是否可以使用输入框的输入在另一个工作表中查找列标题?
- reactjs - 在我的 React 应用程序中支持纯 ESM 包,以便能够将 Swiper 更新到版本 7
- javascript - TypeError: undefined is not an object (evalating 'this.props = props') and Invariant Violation: "main" has not been registered。在本机反应
- sql-server - 每当将新帐户 ID 插入视图时,将新帐户 ID 行插入表中
- java - Java“这个”用法
- javascript - 在 Jest 单元测试中模拟 dynamodb `ValidationException`