[英]How to write a readable csv file after api paginated loop in python
我无法将我的 api 调用循环的 output 写入可读的 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')
如何转换我的 output 以获得正确的 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')
我正在尝试在 Klaviyo 中进行分页,并且数据似乎即将到来,请告诉我分页是否正确完成?
导入请求 import json import pandas as pd url = "https://a.klaviyo.com/api/v1/metrics/timeline, from time datetime import timedelta/metrics/timeline"
午夜 = datetime.combine(datetime.today(), time.min) 从日期时间导入 timedelta
昨天午夜 = 午夜 - 时间增量(天数 = 1)
yesteday_epoch = str(int((yesterday_midnight).timestamp())) print(yesterday_epoch) querystring = {"api_key":"API_KEY","since":yesteday_epoch,"count":"100","sort":"desc "}
标头 = {“接受”:“应用程序/json”}
response = requests.request("GET", url, headers=headers, params=querystring)
output_data_list = response.json()['data']
next_page = response.json()['next']
got_next = True while(got_next): url = "https://a.klaviyo.com/api/v1/metrics/timeline" querystring = {"api_key":"pk_API_Key","since":next_page,"count": "100","排序":"desc"}
headers = {"Accept": "application/json"}
response = requests.request("GET", url, headers=headers, params=querystring)
output_data_list = response.json()['data']
if(next_page):
with open("pagination1/metrics_{}.json".format(next_page),"a") as f:
for i in output_data_list:
f.write(json.dumps(i)+"\n")
if next_page is None:
got_next = False
else:
next_page = response.json()['next']
got_next = False
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.