python - 如何在python中的api分页循环后编写可读的csv文件
问题描述
我无法将我的 api 调用循环的输出写入可读的 csv 文件。我对 python 很陌生,这可能是因为不同的数据格式。csv 仅包含 9 列,它不会将所有其他元素作为单独的列读取
import requests
import json
import pandas as pd
FileNaam = 'name'
params = (
('api_key', 'api_key'),
('since', '1595590000'),
('sort', 'asc')
)
url = 'https://a.klaviyo.com/api/v1/metrics/timeline'
discover_api = requests.get(url, params=params).json()
events = discover_api["data"]
next_id = discover_api["next"]
continueloop = 1
while continueloop ==1:
params = (
('api_key', 'api_key'),
('since', next_id),
('sort', 'asc')
)
discover_apiloop = requests.get(url, params=params).json()
events.extend(discover_apiloop["data"])
if discover_apiloop["next"] is None:
continueloop = 0
else:
next_id = discover_apiloop["next"]
data = json.dumps(events, sort_keys=True, indent=4)
df = pd.read_json(data)
df.to_csv(FileNaam+'.csv')
当我不循环但只执行一个 api 调用时,我使用不同的格式并且 csv 很好。所以下面的代码工作正常,但我希望在使用循环时得到相同的结果。
import requests
import json
import pandas as pd
FileNaam = 'name'
params = (
('api_key', 'api_key'),
('sort', 'asc'),
('since', '1595590000')
)
response = requests.get('https://a.klaviyo.com/api/v1/metrics/timeline', params=params)
responsetext = response.text
data = json.loads(responsetext)
df = pd.json_normalize(data['data'])
df.to_csv(FileNaam +'.csv')
如何转换我的输出以获得正确的 csv?
解决方案
在循环之后使用 json_normalize 让它工作
import requests
import json
import pandas as pd
bestandsNaam = 'name'
params = (
('api_key', 'api_key'),
('since', '1595650000'),
('sort', 'asc')
)
url = 'https://a.klaviyo.com/api/v1/metrics/timeline'
discover_api = requests.get(url, params=params).json()
events = discover_api["data"]
next_id = discover_api["next"]
continueloop = 1
while continueloop ==1:
params = (
('api_key', 'api_key'),
('since', next_id),
('sort', 'asc')
)
discover_apiloop = requests.get('https://a.klaviyo.com/api/v1/metrics/timeline', params=params).json()
events.extend(discover_apiloop["data"])
if discover_apiloop["next"] is None:
continueloop = 0
else:
next_id = discover_apiloop["next"]
df = pd.json_normalize(events)
df.to_csv(bestandsNaam+'.csv')
推荐阅读
- c# - Web 浏览器无法使用 .net 桌面应用程序中的 Firebase SignInWithOAuth 打开或打开一次
- python - AttributeError:模块'tokenize'没有属性'open'
- php - 更改 PHP-FPM (Docker) 的用户/组
- r - 无法通过重新排序重新排序 R ggplot geom_bar() 函数中的条形图
- pycharm - 在启动 Qt5 应用程序的主要 python 脚本之前,如何使用 Pycharm 直接运行资源创建脚本?
- php - 图表 JS 轴扩展
- xml - 如何在 azure 管道中访问 log4net appender 文件值和替换
- r - 在 R 中的数据帧之间查找最近的条目
- python - 我卸载了python3.9并安装了python3.8,现在它显示错误“'pip'不被识别为内部或外部命令”
- sql - MS SQL Server 如何获取过去六个月用户登录的列表