如何实现Python脚本自动化,按月新增API请求的周期参数值
解决方法
我们可以通过两种方案实现参数自动更新,无需每月手动修改硬编码值:
方案1:基于时间映射动态计算period值
根据你给出的基准信息:2021年6月可用的最大period值为324,且该值每月固定递增1,我们可以通过日期计算自动生成所需的参数列表:
import requests from datetime import datetime # 配置项 BASE_DATE = datetime(2021, 6, 1) BASE_MAX_PERIOD = 324 FETCH_MONTHS = 5 # 每次拉取最近5个月的数据 # 计算当前最大period值 now = datetime.now() month_diff = (now.year - BASE_DATE.year) * 12 + (now.month - BASE_DATE.month) current_max_period = BASE_MAX_PERIOD + month_diff # 生成period values列表 period_values = [str(current_max_period - i) for i in range(FETCH_MONTHS)][::-1] url = "http://prognos.konj.se/PxWeb/api/v1/sv/SenastePrognosen/f06_rantorochvaxelkurser/F0604.px" querystring = { "query": [ { "code": "variabel", "selection": { "filter": "item", "values": ["F0604Repo_u"] } }, { "code": "period", "selection": { "filter": "item", "values": period_values } } ], "response": { "format": "px" } } response = requests.post(url, json=querystring) print(response.text)
如果API的period编号规则固定,该方案逻辑简单、执行效率高
方案2:拉取API元数据获取可用period值(更可靠)
如果API的period编号规则可能调整,我们可以先调用PxWeb的接口获取period维度的所有可用值,直接取最新的N个构造查询参数,完全不依赖硬编码的编号映射:
import requests # 配置项 FETCH_MONTHS = 5 url = "http://prognos.konj.se/PxWeb/api/v1/sv/SenastePrognosen/f06_rantorochvaxelkurser/F0604.px" # 第一步:拉取接口元数据,获取所有可用period值 meta_resp = requests.get(url) all_periods = [v['value'] for v in meta_resp.json()['variables'][1]['values']] # 取最新的FETCH_MONTHS个值 period_values = all_periods[-FETCH_MONTHS:] # 第二步:构造查询请求 querystring = { "query": [ { "code": "variabel", "selection": { "filter": "item", "values": ["F0604Repo_u"] } }, { "code": "period", "selection": { "filter": "item", "values": period_values } } ], "response": { "format": "px" } } response = requests.post(url, json=querystring) print(response.text)
该方案不需要维护时间和period编号的映射关系,即使API调整编号规则也能正常运行,更适合长期自动执行的脚本。
内容的提问来源于stack exchange,提问作者MathStat2718
相关产品推荐
相关产品推荐

