星座运势查询:用生日自动识别星座(date 参数实测与调优)
# 星座运势查询:用生日自动识别星座(date 参数实测与调优)
> 接入点 872-1 · 免费 · POST/GET · JSON · 适用:社交/社区产品、前端 · 阅读时间:约 6 分钟
## TL;DR
- 不传 `star` 时,可传 `date=MMdd`(生日/日期),接口会**自动转换成对应星座**再返回运势。
- `star` 优先于 `date`:文档明确「没有 star 参数时以 date 为准」。
- `star` 与 `date` 同时缺省时的行为**文档未定义**,建议至少传其一。
## Why:为什么用 date 更省事
在社交/社区产品里,用户更习惯填「生日」而非选「星座」。让接口按生日自动推断星座,既减少前端下拉选择,又能把运势做成「生日专属」的留存钩子。前提是理解 `star` 与 `date` 的优先级与边界。
## What:参数优先级
| 传参组合 | 行为(依据文档) |
|----------|------------------|
| 仅 `star` | 按 star 返回对应星座运势 |
| 仅 `date=MMdd` | 接口按日期自动转星座 |
| 同时传 `star` 与 `date` | 以 `star` 为准(date 被忽略) |
| 两者皆缺省 | 行为未文档化(需实测) |
## How:用生日查运势
Python(requests):
```python
import requests
url = "https://route.showapi.com/872-1"
params = {
"appKey": "YOUR_APPKEY",
"date": "0819", # MMdd,8月19日 → 自动识别为狮子座区间
}
r = requests.get(url, params=params, timeout=10)
data = r.json()
body = data["showapi_res_body"]
print("识别星座:", body.get("star"), " 今日:", body.get("day"))
```
cURL:
```bash
curl -G "https://route.showapi.com/872-1" \
--data-urlencode "appKey=YOUR_APPKEY" \
--data-urlencode "date=0819"
```
Node.js(fetch):
```js
const url = new URL("https://route.showapi.com/872-1");
url.searchParams.set("appKey", "YOUR_APPKEY");
url.searchParams.set("date", "0819");
const res = await fetch(url, { signal: AbortSignal.timeout(10000) });
const body = (await res.json()).showapi_res_body;
console.log(body.star, body.day);
```
## 常见十二星座日期边界(通用常识)
接口内部按生日推断星座,通用边界如下(非接口文档字段,仅帮助校验):
| 星座 | 日期区间 | 英文码 |
|------|----------|--------|
| 水瓶座 | 01-20 ~ 02-18 | shuiping |
| 双鱼座 | 02-19 ~ 03-20 | shuangyu |
| 白羊座 | 03-21 ~ 04-19 | baiyang |
| 金牛座 | 04-20 ~ 05-20 | jinniu |
| 双子座 | 05-21 ~ 06-21 | shuangzi |
| 巨蟹座 | 06-22 ~ 07-22 | juxie |
| 狮子座 | 07-23 ~ 08-22 | shizi |
| 处女座 | 08-23 ~ 09-22 | chunv |
| 天秤座 | 09-23 ~ 10-23 | tiancheng |
| 天蝎座 | 10-24 ~ 11-22 | tianxie |
| 射手座 | 11-23 ~ 12-21 | sheshou |
| 摩羯座 | 12-22 ~ 01-19 | mojie |
> 注:边界日(如 04-19/04-20)的归属以接口实际返回 `star` 字段为准,本表仅作前端预校验参考。
## 进阶 / 边界
- **前端可前置预判**:为避免依赖接口回显,前端可按上表把生日先转成英文码再传 `star`,减少一次「自动识别」的歧义。
- **两者皆空**:文档未定义缺省行为,正式产品务必「至少收集 star 或 date 之一」,不要依赖缺省值。
- **时区/年份无关**:`date` 用 MMdd,不含年份,无法处理闰年等细节,接口按固定区间映射。
## FAQ
**Q:传了 date 但返回 star 是别的星座?**
A:说明该日期落在另一星座区间;以返回 `showapi_res_body.star` 为准。若与你的预期不符,可能是边界日差异,建议直接传 `star` 规避。
**Q:date 和 star 都传,以谁为准?**
A:以 `star` 为准,文档写明「没有 star 参数时以 date 为准」,隐含 star 优先。
**Q:只传 date 会不会更慢?**
A:接口内部转换开销可忽略;真正的成本在限流档位,见[缓存策略](https://www.showapi.com/guides/horoscope-cache-872)。
## 下一步阅读
- [星座运势查询:5 分钟接入指南](https://www.showapi.com/guides/horoscope-quickstart-872)
- [星座运势查询:一次取齐今日/明日/本周/本月/年度运势](https://www.showapi.com/guides/horoscope-multi-period-872)
- [星座运势 API:星座社区与社交 App 集成场景设计](https://www.showapi.com/guides/horoscope-community-app-872)
- **本系列共 13 篇**:查看[星座运势 API 开发指南总目录](https://www.showapi.com/guides/horoscope-guides-872)