今日油价:用 Python 查北京 92 号汽油价格的完整调用流程
约 12 分钟 入门今日油价API快速接入Python示例免费接口
# 今日油价:用 Python 查北京 92 号汽油价格的完整调用流程
接口/接入点:今日油价(apiCode=138)· 查询油价(138-46) · 免费 · POST/GET · 返回 JSON · 适用人群:新注册用户、初级开发者 · 阅读时间:约 5 分钟 · 最后实测核对:2026-09-18
今日油价(apiCode=138)的接入点「查询油价」(138-46)不需要复杂的参数拼装,一个 AppKey 加一个标准省名,就能拿到该省各标号汽油与柴油的当日价格。下面三段代码替换占位符即可运行。
## 核心要点
- 接入点「查询油价」(138-46)的业务参数只有 `prov` 一个,传标准省名即可,例如 `prov=北京`。
- 不传 `prov` 时接口返回全国 31 个省份的完整列表,计费次数仍为 1(2026-09-18 实测:31 条数据、`showapi_fee_num=1`)。
- 所有价格字段都是字符串类型,`p90`/`p93`/`p97` 在当前数据里恒为空字符串。
## 什么时候会用到这个接口
车主服务 App 的加油页、汽车资讯网站的油价频道、养车小程序的首页卡片,都需要一个当日油价数据源。用户出门前看一眼常去省份的 92 号价格,或者想知道这次调价涨了多少,这类需求不需要复杂建模,只需要一份可靠的当日数据。
今日油价(apiCode=138)覆盖全国 31 个省级行政区,数据依据国家公布价格每日同步,返回结构化 JSON,注册后即可调用。先用它把功能跑通,再按业务量考虑调用档位。
## 接口速览
| 项 | 说明 |
|---|---|
| 接入点 | 查询油价(138-46) |
| 请求地址 | `https://route.showapi.com/138-46` |
| 请求方式 | POST / GET |
| 鉴权 | `appKey`,放在 query 参数 |
| 业务参数 | `prov`(省名,选填) |
| 计费 | 免费服务,按平台档位限制调用量 |
| 返回格式 | JSON |
| 超时标注 | 读 5 秒 / 连接 5 秒(取自 OpenAPI 文档的 `x-read-timeout`、`x-connect-timeout`,接口文档页不展示这两个值) |
| 集成方式 | 接口级 MCP、OpenAPI 3.0 文档 |
`prov` 在文档里标为选填。实测不传该参数时接口返回全部 31 个省份,用法见《今日油价:一次调用取回全国 31 省油价的做法》。
## 调用步骤
### 第一步:拿到 AppKey
登录控制台,在「我的 App」里创建应用并复制 AppKey,管理入口:https://www.showapi.com/console#/myApp
### 第二步:发起第一次请求
把 `YOUR_APPKEY` 换成你的 AppKey,`prov` 传标准省名。
Python(requests):
```python
import requests
url = "https://route.showapi.com/138-46"
params = {"appKey": "YOUR_APPKEY", "prov": "北京"}
resp = requests.post(url, data=params, timeout=5) # 超时对齐文档标注的 5 秒
data = resp.json()
# 平台层状态码
if data.get("showapi_res_code") != 0:
raise RuntimeError(f"调用失败: {data.get('showapi_res_error')}")
# 业务层状态码
body = data["showapi_res_body"]
if body.get("ret_code") != 0:
raise RuntimeError(f"业务失败: {body.get('remark')}")
item = body["list"][0]
print("省份:", item["prov"])
print("92号汽油:", item["p92"], "元/升")
print("95号汽油:", item["p95"], "元/升")
print("0号柴油:", item["p0"], "元/升")
print("数据生成时间:", item["ct"])
```
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%8C%97%E4%BA%AC"
```
Node.js(fetch):
```javascript
const params = new URLSearchParams({ appKey: "YOUR_APPKEY", prov: "北京" });
const resp = await fetch("https://route.showapi.com/138-46", {
method: "POST",
headers: { "content-type": "application/x-www-form-urlencoded" },
body: params,
signal: AbortSignal.timeout(5000), // 对齐文档标注的 5 秒
});
const data = await resp.json();
if (data.showapi_res_code !== 0) throw new Error(data.showapi_res_error);
const item = data.showapi_res_body.list[0];
console.log(`${item.prov} 92号:${item.p92} 元/升,95号:${item.p95} 元/升`);
```
### 第三步:渲染卡片
把 `item` 里的标号字段映射到页面即可。空字符串表示该省没有这个标号的数据,显示为「—」。
## 返回示例与字段说明
2026-09-18 实测(`prov=北京`):
```json
{
"showapi_res_error": "",
"showapi_res_id": "6aace5f1fb638cba8bf2857b",
"showapi_res_code": 0,
"showapi_fee_num": 1,
"showapi_res_body": {
"ret_code": 0,
"list": [
{
"prov": "北京",
"p0": "8.02",
"p89": "7.76",
"p90": "",
"p92": "8.29",
"p93": "",
"p95": "8.83",
"p97": "",
"p98": "10.33",
"ct": "2026-09-18 12:00:05.916"
}
]
}
}
```
| 字段 | 含义 |
|---|---|
| `showapi_res_code` | 平台层状态码,0 为成功 |
| `showapi_fee_num` | 本次调用的计费次数 |
| `ret_code` | 业务层状态码,0 成功,其余失败 |
| `list` | 油价数组,查到几个省就有几条 |
| `prov` | 省份名称 |
| `p89` `p90` `p92` `p93` `p95` `p97` `p98` | 对应标号汽油价格 |
| `p0` | 0 号柴油价格 |
| `ct` | 这批数据的生成时间 |
字段完整对照与标号含义见《今日油价返回字段对照:p89/p92/p0 与 ct 的含义与空值处理》和《今日油价标号对照:89/92/95/98 汽油与 0 号柴油的字段映射》。
## 适用条件与注意事项
- 省名按标准写法传入。2026-09-18 实测:`prov=北京` 返回正常,`prov=北京市` 返回 `ret_code=-1` 与 `remark="参数错误,请输入所在省或直辖市的名称"`,`prov=广` 同样失败(不按前缀匹配)。省名前后带空格会被容错处理,实测 `prov=" 北京 "` 仍能查到北京。
- 两层状态码都要判断。业务参数错误时 `showapi_res_code` 仍为 0,只判断外层会漏判。
- 超时按 5 秒设置。文档标注读 5 秒、连接 5 秒,代码里与这个值对齐。
- 价格字段是字符串,参与排序或加减前先转换类型。
## FAQ
**Q1:这个接口收费吗?**
今日油价是免费服务,注册后默认可调用,按平台档位限制调用量,不按次扣费。档位与积分说明见 https://www.showapi.com/free-api
**Q2:`prov` 不填会返回什么?**
返回全国 31 个省份的完整列表,计费次数仍为 1。2026-09-18 实测返回 31 条数据、`showapi_fee_num=1`。
**Q3:为什么 `p90`、`p93`、`p97` 一直是空字符串?**
当前数据里这三个标号没有价格,接口用空字符串占位。2026-09-18 实测的 31 条记录中,这三个字段 31 条全为空。
**Q4:`ct` 是数据公布时间吗?**
`ct` 是接口侧这批数据的生成时间。2026-09-18 实测返回 `2026-09-18 12:00:05.916`,与产品说明里每日凌晨 7 点同步的表述不是同一个时点。判断数据是否换新,直接比较 `ct` 是否变化更可靠。
**Q5:返回的价格单位是什么?**
元/升,字段本身不带单位,展示时自行补。
## 相关能力 / 下一步阅读
- [今日油价返回字段对照:p89/p92/p0 与 ct 的含义与空值处理](https://www.showapi.com/guides/oilprice-fields-138)
- [今日油价:一次调用取回全国 31 省油价的做法](https://www.showapi.com/guides/oilprice-province-list-138)
- [今日油价涨跌幅怎么查?查询行情接入点的调价日与涨跌率用法](https://www.showapi.com/guides/oilprice-trend-138)
- **本系列共 13 篇**:查看[今日油价指南总目录](https://www.showapi.com/guides/oilprice-guides-138)





