Python调用电价API返回JSON示例:分时电价、现货电价和字段解析

本文用Python示例说明如何调用电价API,获取工商业分时电价JSON,并把峰谷时段、电价、单位和更新时间解析成系统可用的数据结构。同样的接入思路也适用于现货电价API、日前电价API和实时电价API。

这篇文章用一个简化示例说明如何用Python调用电价API,获取某省某月的工商业分时电价数据,并把返回JSON转换为系统可用的结构。

说明:以下接口地址、token和数据均为示例。正式接入时应以实际API文档为准。

请求示例

bash 复制代码
import requests

API_BASE = "https://api.example.com/v1"
API_KEY = "YOUR_TRIAL_API_KEY"

def get_tou_price(province, month, voltage_level="10kV"):
    url = f"{API_BASE}/electricity-prices/tou"
    params = {
        "province": province,
        "month": month,
        "voltageLevel": voltage_level
    }
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Accept": "application/json"
    }
    response = requests.get(url, params=params, headers=headers, timeout=10)
    response.raise_for_status()
    return response.json()

if __name__ == "__main__":
    data = get_tou_price("浙江", "2026-06")
    print(data)

返回JSON示例

bash 复制代码
{
  "province": "浙江",
  "month": "2026-06",
  "voltageLevel": "10kV",
  "periods": [
    {
      "periodType": "peak",
      "startTime": "09:00",
      "endTime": "11:00",
      "price": 1.0243,
      "unit": "CNY/kWh"
    },
    {
      "periodType": "valley",
      "startTime": "00:00",
      "endTime": "06:00",
      "price": 0.3125,
      "unit": "CNY/kWh"
    }
  ],
  "updatedAt": "2026-06-18T10:00:00+08:00"
}

转成字典方便查询

如果业务系统要按时间匹配电价,可以先把时段转换成内部结构:

bash 复制代码
from datetime import datetime

def parse_time(t):
    return datetime.strptime(t, "%H:%M").time()

def normalize_periods(api_data):
    result = []
    for item in api_data["periods"]:
        result.append({
            "type": item["periodType"],
            "start": parse_time(item["startTime"]),
            "end": parse_time(item["endTime"]),
            "price": float(item["price"]),
            "unit": item["unit"]
        })
    return result

错误处理

正式接入时不要只写requests.get()。建议处理这些情况:

bash 复制代码
def safe_get_tou_price(province, month):
    try:
        return get_tou_price(province, month)
    except requests.exceptions.Timeout:
        return {"error": "REQUEST_TIMEOUT"}
    except requests.exceptions.HTTPError as e:
        status = e.response.status_code
        if status == 404:
            return {"error": "PRICE_NOT_FOUND"}
        if status == 429:
            return {"error": "RATE_LIMITED"}
        return {"error": "HTTP_ERROR", "status": status}

接入建议

  1. 先用测试key验证字段。
  2. 对比当前人工维护数据。
  3. 建立本地缓存,避免每次页面展示都实时调用。
  4. 记录updatedAt,用于判断数据是否已更新。
  5. 把错误码写入日志,便于排查。

常见问题

Q:Python调用电价API需要哪些参数?

A:最常见参数包括省份、月份、电压等级和数据类型。如果调用现货电价API,还需要市场、日期、价格类型、时间粒度或节点信息。

Q:电价API返回JSON后应该如何存储?

A:建议把原始JSON和标准化后的业务表同时保存。原始JSON便于追溯,标准化表便于EMS、储能测算、售电分析和报表系统查询。

Q:电价API调用失败时应该直接报错吗?

A:生产系统不建议直接把错误暴露给用户。应区分超时、频率限制、参数错误、数据未发布和省份不支持,并结合缓存、重试和更新日志处理。

相关推荐
武子康2 小时前
Shippy:确定性工具、会话级 Sandbox 与 Live-Data Eval(4 类收敛 + 7 步实现方案 + 6 类评测指标)
前端·人工智能·后端
我叫黑大帅2 小时前
我为什么单一消费者的场景下,要用 Redis List 当消息队列?
redis·后端·面试
AskHarries2 小时前
文件上传系统
后端
止语Lab3 小时前
好的 DX 不等于少写代码——三种语言的摩擦力设计课
后端
吃饱了得干活3 小时前
别再手动解析 LLM 输出了!LangChain 四种结构化输出方案对比
后端·python·langchain
程序员天天困3 小时前
Arthas trace 命令怎么用?一行定位最慢那行代码
jvm·后端
Huiturn3 小时前
GPT 5.6 连续编码 10 小时,纯 Python 啃下 Word 二进制格式——doc2docx 实现拆解
后端
用户298698530144 小时前
Python 实现 Excel 与 Markdown 互转的实用指南
后端·python·excel
用户77283104908404 小时前
krono-job:零侵入、单二进制交付的分布式任务调度平台(开源)
后端