python - 仅使用 python 从 API 中获取新数据
问题描述
早上好,
我最近编写了一个程序来从 Stripe 的 API 中提取交易数据并保存为 .CSV 文件,这样我就可以非常轻松地将所有交易导入 QuickBooks。它运作良好,我对此非常满意。但是,每次我运行它时,它都会抓取每笔交易,然后我必须通过这些交易并删除 QuickBooks 中的所有重复数据。使程序仅获取最新交易的最佳方法是什么?是给python一个工作日期,还是检查数据是否已经在.CSV文件中并将其删除?
这是我的代码:
var = stripe.BalanceTransaction.list()
length_of_list = len(var)
number = 0
def get_customer_data():
charge = stripe.Charge.list()
length_of_charge_list = len(charge)
global number
while number < length_of_charge_list:
order_number = charge['data'][number]['metadata']['orderNumber']
number += 1
return order_number
def get_transaction_data():
count = 0
with open('stripe_data.csv', 'w+', newline='') as csv_file:
stripe_data = csv.DictWriter(csv_file, fieldnames=['date', 'Description', 'Credit', 'Debit'])
stripe_data.writeheader()
while count < length_of_list:
if var.data[count]['description'] != "STRIPE PAYOUT":
amount = var.data[count]['amount']
description = get_customer_data()
created = var.data[count]['created']
date = datetime.datetime.fromtimestamp(created).strftime('%d/%m/%y')
stripe_data.writerow({'date': date, 'Description': description, 'Credit': amount/100})
amount = var.data[count]['fee_details'][0]['amount']
description = var.data[count]['fee_details'][0]['description']
stripe_data.writerow({'date': date, 'Description': description, 'Debit': amount/100})
count += 1
else:
count += 1
get_transaction_data()
解决方案
根据您设置提取系统的方式,有几种方法可以做到这一点。
- 每次拉取数据时,在文件或表格或其他地方查找并存储最新的交易日期。对于每个后续 API 调用,发送该日期,以便 API 知道过滤掉 <= 该日期的事务。确保每次 API 运行时更新存储的最新交易日期。
- 如果您不能像上面那样拥有持久存储,您的 API 查询也可以进入 QuickBooks 并在查询 Stripe 之前获取最新的交易日期。与上面第 1 点相同,您只需对最近的交易日期进行过滤。
- 与第 2 点类似,您的 API 可以查询最新的 CSV 文件以获取最新的交易日期,而不是查询 QuickBooks(如果您将这些 CSV 文件存储在某处)。
推荐阅读
- amazon-web-services - AWS Fargate 延迟
- swift - 使用分隔符拆分带有特殊字符的 utf16 字符串
- javascript - 如何在 laravel 的 ajax 数据中选择选项
- node.js - 我无法访问 req.body。console.log 不打印请求对象;
- github - 配置 Gitlab 在我自己的服务器上运行测试
- core-audio - AudioConverterFillComplexBuffer 只处理一个 AAC 原始数据包
- r - ggplot色标渲染不正确
- go - 安装新主题时 Hugo 给出主题错误
- laravel - 使用 laravel-mix 和 sass 升级到具有 JIT 模式的 Tailwindcss 2.1 后,未导入 tailwind 模块
- javascript - 如何根据之前的选择进行选择?