如何通过API的MoreFlag标签循环拉取全部分页交易数据
分页拉取API交易数据实现方案
核心逻辑为通过while循环控制分页请求,每次请求完成后判断返回参数中的MoreFlag字段,值为1时更新分页参数继续请求下一页,值为0时终止循环,同时将每次拉取到的交易数据汇总到统一列表中。
完整实现代码如下:
# 初始化基础参数 station_name = 'ORANGE' all_transactions = [] # 存储全部拉取到的交易数据 start_record = 1 # 初始查询起始记录位 more_flag = 1 # 初始翻页标识设为1,触发首次请求 # 若client实例未配置license key和password,可在此处补充client初始化逻辑 while more_flag == 1: # 构造当前页查询参数 usageSearchQuery = { 'stationName': station_name, 'startRecord': start_record, 'numTransactions': 500 } # 调用接口获取数据 trans_data = client.service.getTransactionData(usageSearchQuery) # 接口响应异常时终止循环,可根据业务需要调整或删除该判断 if trans_data.responseCode != '100': print(f"接口调用失败,错误信息:{trans_data.responseText}") break # 提取当前页交易数据追加到总列表 current_page_trans = trans_data.transactions.transactionData all_transactions.extend(current_page_trans) # 更新翻页标识和下一页起始记录位 more_flag = trans_data.MoreFlag start_record += 500 print(f"已累计拉取{len(all_transactions)}条交易数据,当前翻页标识:{more_flag}") # 循环结束后all_transactions即为全量交易数据,可直接进行后续处理 # 示例:打印所有交易数据 for trans in all_transactions: print(trans)
补充说明
- 若接口在无交易数据返回时
transactionData字段结构会发生变化,可在追加数据前增加字段存在性判断,例如:if hasattr(trans_data.transactions, 'transactionData'):再执行数据追加操作 - 可根据业务需要增加最大拉取页数限制,避免特殊情况下接口
MoreFlag返回异常导致死循环
内容的提问来源于stack exchange,提问作者nam24
相关产品推荐
相关产品推荐

