首页 > 解决方案 > 仅使用 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()

标签: pythonpython-3.x

解决方案


根据您设置提取系统的方式,有几种方法可以做到这一点。

  1. 每次拉取数据时,在文件或表格或其他地方查找并存储最新的交易日期。对于每个后续 API 调用,发送该日期,以便 API 知道过滤掉 <= 该日期的事务。确保每次 API 运行时更新存储的最新交易日期。
  2. 如果您不能像上面那样拥有持久存储,您的 API 查询也可以进入 QuickBooks 并在查询 Stripe 之前获取最新的交易日期。与上面第 1 点相同,您只需对最近的交易日期进行过滤。
  3. 与第 2 点类似,您的 API 可以查询最新的 CSV 文件以获取最新的交易日期,而不是查询 QuickBooks(如果您将这些 CSV 文件存储在某处)。

推荐阅读