星座运势查询的 date 参数怎么用?按生日识别星座与 12 个边界实测
约 13 分钟 进阶星座运势查询生日查星座date参数边界实测
# 星座运势查询的 date 参数怎么用?按生日识别星座与 12 个边界实测
接入点 872-1 · 免费服务 · POST / GET · 返回 JSON · 适用:社交与社区产品、前端预校验 · 阅读时间:约 7 分钟 · 最后实测核对:2026-09-18
## 核心要点
- 不传 `star` 时可以传 `date=MMdd`,星座运势查询接口(apiCode=872)会按这个日期反推星座再返回运势。
- 两者同时传时以 `star` 为准。`date` 只接受 `MMdd` 四位数字,`20260819` 这种带年份的写法会被拒。
- 接口实际使用的星座日期边界与常见对照表存在系统性偏移,2026-09-18 已逐日实测出全部 12 个边界。
## 为什么用 date 更省事
用户更习惯填生日,而不是从下拉框里挑星座。让接口按生日自己判断,前端少一个控件,还能把运势做成生日专属的入口。
前提是知道接口认哪些日期格式、边界落在哪一天。这三点在接口文档里没有完整给出,本文的边界表来自 2026-09-18 的逐日实测。
## 接口速览
| 项 | 值 |
|---|---|
| 接口地址 | `https://route.showapi.com/872-1?appKey={your_appKey}` |
| 相关参数 | `date`(`MMdd`)、`star`(十二星座英文码) |
| 优先级 | 同时传时以 `star` 为准 |
| 超时 | 读 15 秒 / 连接 15 秒 |
`date` 和 `star` 至少要给一个,都不传时业务层会返回失败。
## 参数优先级实测
| 传参组合 | 2026-09-18 实测行为 |
|---|---|
| 只传 `date=0819` | 按日期反推星座,`star` 回显反推结果 |
| 只传 `star=shizi` | 直接按狮子座返回 |
| `date=0101` + `star=shizi` | `star` 回显 `shizi`,`date` 被忽略 |
| `date=abc` | `ret_code: -1`,`remark: 输入星座月份不正确` |
| `date=20260819` | `ret_code: -1`,`remark: 输入星座月份不正确` |
| `date=0230` | `ret_code: 0`,`star` 为 `shuangyu`(落在双鱼区间) |
`date` 只认四位数字。带年份、带字母、带分隔符都会被判为格式不对。
## 接口实际使用的 12 星座边界(2026-09-18 逐日实测)
| 星座 | 中文名 | 接口实测区间 |
|---|---|---|
| `mojie` | 摩羯座 | 12-22 ~ 01-20 |
| `shuiping` | 水瓶座 | 01-21 ~ 02-19 |
| `shuangyu` | 双鱼座 | 02-20 ~ 03-20 |
| `baiyang` | 白羊座 | 03-21 ~ 04-20 |
| `jinniu` | 金牛座 | 04-21 ~ 05-21 |
| `shuangzi` | 双子座 | 05-22 ~ 06-21 |
| `juxie` | 巨蟹座 | 06-22 ~ 07-22 |
| `shizi` | 狮子座 | 07-23 ~ 08-23 |
| `chunv` | 处女座 | 08-24 ~ 09-23 |
| `tiancheng` | 天秤座 | 09-24 ~ 10-23 |
| `tianxie` | 天蝎座 | 10-24 ~ 11-22 |
| `sheshou` | 射手座 | 11-23 ~ 12-21 |
对照常用的星座日期表,接口的边界在多处向后顺延一天:水瓶、双鱼、金牛、双子、处女、天秤的起点晚一天;白羊、狮子、摩羯的终点晚一天;巨蟹、天蝎、射手与常见表一致。
支撑这张表的边界日实测结果:
| 传入 `date` | 返回 `star` | 传入 `date` | 返回 `star` |
|---|---|---|---|
| `0119` | `mojie` | `0722` | `juxie` |
| `0120` | `mojie` | `0723` | `shizi` |
| `0121` | `shuiping` | `0822` | `shizi` |
| `0218` | `shuiping` | `0823` | `shizi` |
| `0219` | `shuiping` | `0824` | `chunv` |
| `0220` | `shuangyu` | `0922` | `chunv` |
| `0320` | `shuangyu` | `0923` | `chunv` |
| `0321` | `baiyang` | `0924` | `tiancheng` |
| `0419` | `baiyang` | `1023` | `tiancheng` |
| `0420` | `baiyang` | `1024` | `tianxie` |
| `0421` | `jinniu` | `1122` | `tianxie` |
| `0520` | `jinniu` | `1123` | `sheshou` |
| `0521` | `jinniu` | `1221` | `sheshou` |
| `0522` | `shuangzi` | `1222` | `mojie` |
| `0621` | `shuangzi` | `0622` | `juxie` |
月中抽样复核:`0105` 为 `mojie`、`0305` 为 `shuangyu`、`0505` 为 `jinniu`、`0705` 为 `juxie`、`0905` 为 `chunv`、`1105` 为 `tianxie`,与上表一致。
## 按生日查运势的写法
Python(requests):
```python
import requests
def horoscope_by_birthday(month: int, day: int, appkey: str) -> dict:
"""传生日(月、日),由接口反推星座并返回今日运势。"""
date = f"{month:02d}{day:02d}" # 拼成 MMdd
data = requests.get(
"https://route.showapi.com/872-1",
params={"appKey": appkey, "date": date},
timeout=15,
).json()
if data.get("showapi_res_code") != 0:
raise RuntimeError(data.get("showapi_res_error"))
body = data["showapi_res_body"]
if str(body.get("ret_code")) != "0":
raise RuntimeError(f"业务错误: {body.get('remark')}")
print("接口识别的星座:", body["star"]) # 英文码,如 shizi
return body
body = horoscope_by_birthday(8, 19, "YOUR_APPKEY")
print(body["day"]["summary_star"], body["day"]["lucky_color"])
```
cURL:
```bash
curl -G "https://route.showapi.com/872-1" \
--data-urlencode "appKey=YOUR_APPKEY" \
--data-urlencode "date=0819" \
--max-time 15
```
Node.js(fetch):
```javascript
// 生日 -> MMdd,注意补零
const pad = n => String(n).padStart(2, "0");
const url = new URL("https://route.showapi.com/872-1");
url.searchParams.set("appKey", "YOUR_APPKEY");
url.searchParams.set("date", `${pad(8)}${pad(19)}`);
const data = await (await fetch(url, { signal: AbortSignal.timeout(15000) })).json();
if (String(data.showapi_res_body?.ret_code) !== "0") {
throw new Error(data.showapi_res_body.remark);
}
const { star, day } = data.showapi_res_body;
console.log(star, day.summary_star, day.lucky_color);
```
## 返回示例(2026-09-18 实测 `date=0819`)
```json
{
"showapi_res_code": 0,
"showapi_res_body": {
"day": {
"summary_star": 4,
"love_star": 3,
"money_star": 4,
"work_star": 5,
"grxz": "狮子座",
"lucky_color": "金色",
"day_notice": "保持耐心,稳步前行。",
"time": "20260918"
},
"star": "shizi",
"ret_code": 0
}
}
```
`star` 回显的是英文码,不是中文名。要显示中文名,可以按上面那张表做本地映射。
## 前端要不要先自己判星座
前端预校验能减少一次依赖,但要以接口返回的 `star` 为准。边界日附近的差异最容易出现,比如 04-20 在常见对照表里属于金牛座,接口判为白羊座。
需要和接口保持完全一致时,直接把上表的区间搬到前端做映射,或者干脆把生日原样传给 `date`,用返回的 `star` 回填界面。
## FAQ
**Q1:`date` 能带年份吗?**
不能。2026-09-18 实测传 `date=20260819` 返回 `ret_code: -1`、`remark: 输入星座月份不正确`。只认 `MMdd` 四位数字。
**Q2:传了 `date`,返回的 `star` 和我预期的不一样?**
以返回的 `star` 为准。接口的边界与常见对照表在多处相差一天,比如 `0420` 返回 `baiyang` 而不是金牛座,`0120` 返回 `mojie` 而不是水瓶座。
**Q3:`date` 和 `star` 都传,听谁的?**
听 `star`。2026-09-18 实测传 `date=0101` 加 `star=shizi`,返回的 `star` 是 `shizi`。
**Q4:`date` 传 0230 这种不存在的日期会怎样?**
实测返回 `ret_code: 0`,`star` 为 `shuangyu`。接口按四位数字的区间做映射,不校验日期是否真实存在。
**Q5:生日里的年份需要收集吗?**
不需要,接口只吃 `MMdd`。不收年份也能减少一处需要保管的用户信息。
## 下一步阅读
- [星座运势查询:用 Python / cURL / Node.js 跑通第一次调用](https://www.showapi.com/guides/horoscope-quickstart-872)
- [星座运势查询:一次取齐五个周期的 needX 开关规则](https://www.showapi.com/guides/horoscope-multi-period-872)
- [在星座社区与社交 App 里接入星座运势查询](https://www.showapi.com/guides/horoscope-community-app-872)
- [星座运势查询的缓存怎么设](https://www.showapi.com/guides/horoscope-cache-872)
- **本系列共 13 篇**:查看[星座运势 API 指南总目录](https://www.showapi.com/guides/horoscope-guides-872)





