今日油价:涨跌幅怎么查?「查询行情」接入点的调价日与涨跌率实战
# 今日油价:涨跌幅怎么查?「查询行情」接入点的调价日与涨跌率实战
> 接口/接入点:今日油价 · 查询行情(138-49) · 免费 · POST/GET · JSON · 适用人群:车主产品开发者、公众号运营 · 阅读时间:约 7 分钟
## TL;DR
- 和「查询油价」不同,「查询行情」(138-49)用来查**涨跌幅**与**调价日**,`prov` 为**必填**。
- 返回 `p0` 对象含 `price`(现价)、`change_before_price`(上次价)、`change`(涨跌值)、`change_percent`(涨跌率),并带 `next_change_time`/`before_change_time`。
- 适合做「下次调价倒计时」「本月油价走势」类功能。
## Why
用户不只想知道「现在多少钱」,还想知道「涨了还是跌了」「下次什么时候调价」。成品油调价有固定窗口,「查询行情」接入点把涨跌幅和调价日一并给出,正好支撑「调价提醒」「涨跌播报」这类高粘性功能。
## What
| 项 | 说明 |
|----|------|
| 接入点 | 查询行情(138-49) |
| 接口地址 | `https://route.showapi.com/138-49?appKey={your_appKey}` |
| 请求参数 | `prov`(省名,**必填**) |
| 返回重点 | `p0` 涨跌幅对象 + `next_change_time` / `before_change_time` |
| 计费 | 免费 |
`showapi_res_body` 关键字段:
| 字段 | 含义 |
|------|------|
| `prov` | 省份 |
| `ret_code` | 0 成功,其余失败 |
| `next_change_time` | 下一次油价调整时间(如 `20221025`) |
| `before_change_time` | 最近一次油价调整时间 |
| `p0.price` | 当前 0 号柴油价格 |
| `p0.change_before_price` | 最近一次价格 |
| `p0.change` | 涨跌幅(如 `-0.25`) |
| `p0.change_percent` | 涨跌率(如 `-3.064%`) |
> 说明:文档返回体中仅列出 `p0`(0 号柴油)的涨跌幅对象,其余标号是否提供以实际接口返回为准。
## How
**步骤:传省名 → 取 p0 与调价日 → 渲染**
Python:
```python
import requests
resp = requests.post(
"https://route.showapi.com/138-49",
data={"appKey": "YOUR_APPKEY", "prov": "北京"},
timeout=10,
).json()
body = resp["showapi_res_body"]
if body.get("ret_code") != 0:
raise RuntimeError("查询行情失败")
p0 = body["p0"]
print("省份:", body["prov"])
print("当前价:", p0["price"])
print("上次价:", p0["change_before_price"])
print("涨跌:", p0["change"], "涨跌率:", p0["change_percent"])
print("下次调价:", body["next_change_time"])
print("上次调价:", body["before_change_time"])
```
cURL:
```bash
curl -X POST "https://route.showapi.com/138-49?appKey=YOUR_APPKEY" \
-H "content-type: application/x-www-form-urlencoded" \
-d "prov=%E5%8C%97%E4%BA%AC"
```
Node.js(fetch):
```javascript
const resp = await fetch("https://route.showapi.com/138-49", {
method: "POST",
headers: { "content-type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({ appKey: "YOUR_APPKEY", prov: "北京" }),
});
const body = (await resp.json()).showapi_res_body;
const p0 = body.p0;
console.log(`当前价 ${p0.price},涨跌 ${p0.change}(${p0.change_percent})`);
console.log(`下次调价 ${body.next_change_time}`);
```
## 返回示例与解析
```json
{
"showapi_res_body": {
"next_change_time": "20221025",
"before_change_time": "20220922",
"prov": "北京",
"ret_code": 0,
"p0": {
"price": "7.91",
"change_before_price": "8.16",
"change": "-0.25",
"change_percent": "-3.064%"
}
}
}
```
`change` 为负表示下降,`change_percent` 带 `%` 后缀的字符串;`next_change_time` 是 `YYYYMMDD` 格式,需自行解析成日期做倒计时。
## 进阶/边界
- **别用错接入点**:查涨跌幅用 138-49(查询行情),查具体标号价格用 138-46(查询油价)。两者 `prov` 必填规则不同,见[《今日油价:prov 参数填不填?查询油价(选填) vs 查询行情(必填) 的正确姿势》](https://www.showapi.com/guides/oilprice-prov-param-138)。
- **调价日倒计时需要解析**:`next_change_time` 是 `YYYYMMDD` 字符串,前端用 `new Date(值.slice(0,4)+'-'+...)` 转日期。
- **涨跌幅仅供参考**:以国家公布为准,展示时标注「数据仅供参考」。
## FAQ
**Q:查询行情和查询油价有什么区别?**
A:查询油价(138-46)返回各标号具体价格;查询行情(138-49)返回涨跌幅与调价日,且 `prov` 必填。
**Q:为什么只看到 p0 的涨跌幅?**
A:文档返回体仅列出 `p0`(0 号柴油)的涨跌幅对象,其余标号是否提供以实际返回为准。
**Q:change_percent 能直接相加吗?**
A:它是带 `%` 的字符串,需先去掉 `%` 再转数字;涨跌率计算以官方口径为准。
## 相关能力 / 下一步阅读
- [今日油价:prov 参数填不填?查询油价(选填) vs 查询行情(必填) 的正确姿势](https://www.showapi.com/guides/oilprice-prov-param-138)
- [今日油价:如何避免取到旧数据?结合每日 7 点更新频率的定时拉取](https://www.showapi.com/guides/oilprice-schedule-138)
- **本系列共 13 篇**:查看[今日油价开发指南总目录](https://www.showapi.com/guides/oilprice-guides-138)