gpt4 book ai didi

python - 在 python 中从 cURL GET 请求保存 .zip 文件

转载 作者:太空宇宙 更新时间:2023-11-03 20:18:19 25 4
gpt4 key购买 nike

我正在尝试在 Python 脚本中实现 Amplitude 的导出 API。我一直在使用 requests 库,但我不知道如何指定一个文件名来保存调用的响应。此 API 要求指定保存为 .zip 文件 (>> yourfilename.zip),因为这是响应返回的格式。以下是来自 API 网站的 cURL 调用示例,我正在尝试将其转换为 Python:

curl -u API_Key:Secret_Key 'https://amplitude.com/api/2/export?start=start_date&end=end_date' >> yourfilename.zip

当我在终端中调用它时,它运行良好并将“yourfilename.zip”保存到我的本地。但是,以下 Python 代码不起作用:

    import requests 

params = (
('start', START_DATE),
('end', END_DATE),
)

auth = (
('API_Key', API_KEY),
('Secret_Key', SECRET_KEY),
)
response = requests.get('https://amplitude.com/api/2/export', params=params, auth=auth, stream=True)

requests.get() 调用无法执行并出现 403 响应,因为我不知道如何指定要保存的 .zip 文件,就像 API 网站上的示例 cURL 调用所希望的那样。非常感谢任何帮助,谢谢。

最佳答案

    import requests
import json
import sys, io
from zipfile import ZipFile
import gzip

auth_data = {'key': 'somekey', 'secret': 'somesecretkey'}
params = (('start', '20200106T00'), ('end', '20200106T23'),)

rd = requests.get('https://amplitude.com/api/2/export',
params=params,
auth=(auth_data['key'], auth_data['secret']),
stream=True)

if rd.status_code == 200:
zf = ZipFile(io.BytesIO(rd.content), 'r')
else:
sys.exit()

event_list = []
for gz_file in zf.filelist:
gz_bdata = zf.read(gz_file.filename)
js_rows = gzip.decompress(gz_bdata)
js_rows = js_rows.decode('utf8')
for s in js_rows.split('\n'):
if s:
event_list.append(json.loads(s))

关于python - 在 python 中从 cURL GET 请求保存 .zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58315174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com