技术博客
今日油价:全国 31 省油价怎么一次性拉全?省份枚举与批量设计

今日油价:全国 31 省油价怎么一次性拉全?省份枚举与批量设计

作者: 万维易源
2026-08-27
今日油价全国油价省份枚举批量
# 今日油价:全国 31 省油价怎么一次性拉全?省份枚举与批量设计 > 接口/接入点:今日油价 · 查询油价(138-46) · 免费 · 适用人群:需要做全国比价/地图分布的开发者 · 阅读时间:约 6 分钟 ## TL;DR - 查询油价按 `prov` 查单省;要拉全国 31 省,最稳的做法是**循环传入省名列表**逐省查询。 - 文档标注 `prov` 为选填,但省略时的返回行为(是否一次给全 31 省)以实际接口返回为准,**不依赖该假设**。 - 本文给一份省名清单 + 批量拉取 + 限速的代码骨架。 ## Why 做「全国油价地图」「各省 92 号比价排行」时,需要一次性拿到所有省份的价格。与其赌「不传 prov 就返回全部」,不如老老实实循环省名——可控、可重试、可缓存。 ## What | 项 | 说明 | |----|------| | 接入点 | 查询油价(138-46) | | 参数 | `prov`(省名,选填;批量用循环传省名) | | 计费 | 免费,有档位限制 | 标准省名清单(文档示例用法):北京、天津、河北、山西、内蒙古、辽宁、吉林、黑龙江、上海、江苏、浙江、安徽、福建、江西、山东、河南、湖北、湖南、广东、广西、海南、重庆、四川、贵州、云南、西藏、陕西、甘肃、青海、宁夏、新疆(共 31 个省级行政区)。 ## How **步骤:准备省名数组 → 逐省请求 → 限速 + 容错 → 汇总** ```python import requests, time PROVINCES = ["北京","天津","河北","山西","内蒙古","辽宁","吉林","黑龙江","上海", "江苏","浙江","安徽","福建","江西","山东","河南","湖北","湖南","广东", "广西","海南","重庆","四川","贵州","云南","西藏","陕西","甘肃","青海","宁夏","新疆"] results = {} for prov in PROVINCES: try: r = requests.post("https://route.showapi.com/138-46", data={"appKey": "YOUR_APPKEY", "prov": prov}, timeout=10).json() body = r.get("showapi_res_body", {}) if body.get("ret_code") == 0: item = body["list"][0] results[prov] = float(item["p92"]) if item["p92"] else None except Exception as e: print("跳过", prov, e) time.sleep(0.2) # 限速,避免触发档位限制 # 按 92 号价格排序 rank = sorted(results.items(), key=lambda x: (x[1] is None, x[1])) print("最便宜:", rank[0], "最贵:", rank[-1]) ``` cURL(单省,循环在脚本层做): ```bash curl -X POST "https://route.showapi.com/138-46?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" -d "prov=%E5%B9%BF%E8%A5%BF" ``` ## 返回示例与解析 每省返回 `list[0]`,取 `p92` 等字段汇总即可。空字符串表示该省无此标号,按 `None` 处理。 ## 进阶/边界 - **别赌省略 prov**:文档标注选填,但「省略即返回全部 31 省」未被文档明确,生产环境用循环更稳。 - **限速与缓存**:免费有档位限制,批量拉全建议加 `time.sleep` 限速,并缓存结果(TTL 对齐每日 7 点,见[《今日油价:免费也有档次限制,如何设计缓存避免超限?》](https://www.showapi.com/guides/oilprice-cache-138))。 - **省名准确性**:用标准省名,避免别名导致查不到。 ## FAQ **Q:不传 prov 是不是就返回全部 31 省?** A:文档把 `prov` 标为选填,但并未明确「省略即返回全部」。生产环境建议循环传入省名列表,行为可控。 **Q:批量会超限吗?** A:免费接口有档位限制,31 次循环查询请加限速并缓存,避免短时间高频触发限制。 **Q:省名用全称还是简称?** A:以文档示例的「北京」「广西」等标准写法为准。 ## 相关能力 / 下一步阅读 - [今日油价:免费也有档次限制,如何设计缓存避免超限?](https://www.showapi.com/guides/oilprice-cache-138) - [今日油价:prov 参数填不填?查询油价(选填) vs 查询行情(必填) 的正确姿势](https://www.showapi.com/guides/oilprice-prov-param-138) - **本系列共 13 篇**:查看[今日油价开发指南总目录](https://www.showapi.com/guides/oilprice-guides-138)