繁体   English   中英

如何在 python 中的 api 分页循环之后编写可读的 csv 文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM