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

相关推荐
行百里er1 小时前
Redis 完结篇——Redis 热点问题在 Spring Boot 项目中实战
redis·后端
高频因子挖掘机2 小时前
只取最近 60 个交易日,却每次拉全历史:量化脚本变慢的原因与改法
后端·github·api
孟健3 小时前
从5000亿Token到83%字节匹配:AI逆向工程与重构的工程闭环实践
后端·架构·ai编程
码事漫谈4 小时前
丢得静悄悄,谈一谈 Agent 的记忆是怎么没的
后端
迪飞特科技4 小时前
智慧物业平台实战:Spring Boot 整合小程序实现报修巡检费用全流程
spring boot·后端·小程序
考虑考虑4 小时前
@JsonInclude注解使用
spring boot·后端·spring
IT_陈寒5 小时前
Vite的这个问题坑了我三天,原来如此解决!
前端·人工智能·后端
网易云信5 小时前
大模型能上岗做销售吗?我们让 12 款国产模型交了 420 份作业
前端·后端
CCblandy5 小时前
HTTP 长连接 3 类故障实测:[WinError 10053]、99 个 TIME_WAIT、69 次多余握手,4 种对策怎么选
后端·python·网络协议·http·云原生·性能优化·架构
蜗牛互联网5 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python