You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何循环调用API并动态更换月份、Corridor等请求参数

自动化按月批量调用API并处理数据

需求背景

现有代码可单次从JAO API获取指定日期、指定通道的拍卖数据,完成清洗和排序,但API仅支持按月请求数据。需要实现循环遍历指定月份范围、动态切换corridor参数,自动化完成全流程的数据获取、清洗、合并与排序。

解决方案代码

以下是封装后的自动化实现,包含月份生成、批量请求、数据复用处理逻辑:

import requests
import pandas as pd
from datetime import datetime
from dateutil.relativedelta import relativedelta

# 基础配置
BASE_URL = "https://api.jao.eu/OWSMP/getauctions?"
HEADERS = {
    "AUTH_API_KEY": "06e690fb-697b-4ab2-9325-4268cbd14502"
}
# 需要遍历的通道列表(可自行添加更多通道)
CORRIDORS = ["IF1-FR-GB"]
# 自定义月份范围:起始日期到当前月份
START_DATE = datetime(2021, 1, 1)
END_DATE = datetime.now()

# 生成需要请求的所有月份的fromdate列表
def generate_monthly_dates(start_date, end_date):
    dates = []
    current_date = start_date
    while current_date <= end_date:
        dates.append(current_date.strftime("%Y-%m-%d"))
        current_date += relativedelta(months=1)
    return dates

# 定义复用的数据清洗函数
def clean_data(raw_df):
    # 展开results字段并归一化处理
    cleaned_df = raw_df.explode('results')
    cleaned_df = cleaned_df.join(pd.json_normalize(cleaned_df.pop('results')).add_suffix('_new'))
    # 移除不需要的冗余列
    drop_cols = [
        'ftroption','identification','horizonName','periodToBeSecuredStart','periodToBeSecuredStop',
        'bidGateOpening','bidGateClosure','isBidGateOpen','atcGateOpening','atcGateClosure',
        'marketPeriodStop','disputeSubmissionGateOpening','disputeSubmissionGateClosure',
        'disputeProcessGateOpening','disputeProcessGateClosure','ltResaleGateOpening','ltResaleGateClosure',
        'maintenances','xnRule','winningParties','operationalMessage','products','lastDataUpdate',
        'cancelled','comment_new','corridorCode_new','productIdentification_new','additionalMessage_new'
    ]
    cleaned_df.drop(drop_cols, axis=1, inplace=True)
    return cleaned_df

# 主流程:批量获取并合并所有数据
all_data = pd.DataFrame()
monthly_dates = generate_monthly_dates(START_DATE, END_DATE)

for corridor in CORRIDORS:
    for from_date in monthly_dates:
        params = {
            "horizon": "Daily",
            "corridor": corridor,
            "fromdate": from_date
        }
        # 发送API请求
        response = requests.get(BASE_URL, headers=HEADERS, params=params)
        json_data = response.json()
        raw_df = pd.DataFrame.from_dict(json_data)
        
        # 清洗当前批次数据
        cleaned_df = clean_data(raw_df)
        cleaned_df['corridor'] = corridor  # 添加通道标识
        
        # 合并到总数据集
        all_data = pd.concat([all_data, cleaned_df], ignore_index=True)

# 按日期排序
all_data['new'] = pd.to_datetime(all_data['marketPeriodStart']).dt.strftime('%d/%m/%Y')
all_data = all_data.sort_values(by='new', ascending=True)

# 查看最终处理结果
print(all_data)

关键说明

  • 月份自动生成:通过generate_monthly_dates函数生成指定时间范围内的每月第一天,完美适配API的fromdate参数要求
  • 代码复用:将数据清洗逻辑封装为独立函数,避免重复代码,后续修改清洗规则只需调整该函数
  • 多通道支持:通过遍历CORRIDORS列表,可一次性处理多个通道的数据
  • 数据合并:用pd.concat将所有月份、所有通道的数据合并为统一DataFrame,便于后续分析

处理后的数据示例

处理后的Dataframe示例

内容的提问来源于stack exchange,提问作者Chetan Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:10:39