Python如何实现API特殊格式日期参数的自动递增调用?
实现方案
直接使用Python标准库datetime即可完成需求,该格式对应官方原生格式符%a %b %d %Y,无需手动拼接字符串处理星期、月份缩写。
核心逻辑
- 将日期统一用
datetime对象处理,避免字符串计算的各种边界问题(比如月末、闰年跳转) - 使用
timedelta(days=n)完成按天递增的逻辑 - 调用API前用
strftime方法将datetime对象转为要求的字符串格式即可
可直接运行的示例代码
from datetime import datetime, timedelta import requests import json # 配置项 API_URL = "替换为你的API地址" # 拉取起始日期,可根据需求修改 START_DATE = datetime(year=2021, month=5, day=12) # 拉取终止日期,可根据需求修改 END_DATE = datetime(year=2021, month=12, day=31) # 单次拉取的时间跨度,示例和你给出的参数一致为7天,按天拉取的话设为0即可 FETCH_SPAN_DAYS = 6 current_from = START_DATE while current_from <= END_DATE: # 计算当前次拉取的to日期 current_to = current_from + timedelta(days=FETCH_SPAN_DAYS) # 转为API要求的日期格式 from_date_str = current_from.strftime("%a %b %d %Y") to_date_str = current_to.strftime("%a %b %d %Y") # 构造请求参数 params = ( ('fromDate', from_date_str), ('toDate', to_date_str), ) try: # 调用API resp = requests.get(API_URL, params=params) resp.raise_for_status() api_data = resp.json() # 这里添加你把api_data存入数据库的逻辑 print(f"成功拉取 {from_date_str} 至 {to_date_str} 的数据,共{len(api_data)}条") except Exception as e: print(f"拉取 {from_date_str} 至 {to_date_str} 的数据失败:{str(e)}") # 可根据需求添加重试或者记录断点的逻辑,下次从失败的日期开始拉 break # 日期递增,进入下一个周期 current_from = current_to + timedelta(days=1)
补充说明
- 如果你初始的日期是字符串格式(比如
Wed May 12 2021),可以用datetime.strptime("Wed May 12 2021", "%a %b %d %Y")先转成datetime对象再处理 - 如果API要求UTC时间,生成日期时统一使用UTC时区的
datetime对象即可,避免时差导致的日期偏移 - 可以在异常分支添加断点记录逻辑,拉取失败后下次可以直接从失败的日期继续,无需从头重复拉取
内容的提问来源于stack exchange,提问作者hamza barhoun
相关产品推荐
相关产品推荐

