技术博客
周公解梦 API:分页与结果集怎么用?maxResult/allNum/allPages 详解

周公解梦 API:分页与结果集怎么用?maxResult/allNum/allPages 详解

作者: 万维易源
2026-09-02
周公解梦分页maxResultallPages结果集
# 周公解梦 API:分页与结果集怎么用?maxResult/allNum/allPages 详解 > 接口:免费解梦详细(apiCode 1601)· 接入点:解梦详细(1601-2)· **免费** · 参数 `page` 控制翻页 · 适用人群:需要完整取数 / 做「加载更多」的开发者 · 阅读约 6 分钟 ## 核心要点 - 分页字段都在 `showapi_res_body` 内:`maxResult`(每页上限)、`allNum`(总条数)、`allPages`(总页数)、`currentPage`(当前页)。 - 翻页靠 `page` 参数(String,默认 `"1"`),递增到 `allPages` 为止,不要超过。 - 单关键词常命中多条,「加载更多」按钮应依据 `allPages` 判断还有没有下一页。 ## Why:这跟我有什么关系 你想做一个「梦境解读」列表,用户点「查看更多」要能翻出后面的词条;或者你想把某个关键词的全部解读一次性抓全做离线索引。这两种场景都绕不开分页字段。本文讲清四个字段怎么读、翻页循环怎么写才不越界。 ## What:前置条件与接口速览 | 项目 | 说明 | |------|------| | 接口地址 | `https://route.showapi.com/1601-2?appKey={your_appKey}` | | 必填参数 | `keyWords` | | 选填参数 | `page`(页码,默认 `"1"`) | | 分页字段(在 `showapi_res_body` 内) | `maxResult`、`allNum`、`allPages`、`currentPage` | | 接入点说明 | 内容参考《周公解梦全书》部分信息,提供解读参考(文化参考,非科学/医疗结论) | ## How:翻页循环怎么写 **字段含义** | 字段 | 含义 | 示例值 | |------|------|--------| | `maxResult` | 每页最大结果数 | `"10"` | | `allNum` | 总结果数 | `"2"` | | `allPages` | 总页数 | `"1"` | | `currentPage` | 当前页 | `"1"` | **Python:翻完全部页(带上限保护)** ```python import requests APP_KEY = "YOUR_APPKEY" URL = "https://route.showapi.com/1601-2" KEYWORD = "飞" MAX_PAGES = 20 # 安全上限,避免极端情况下死循环 all_items = [] page = 1 while True: resp = requests.post( URL, params={"appKey": APP_KEY}, data={"keyWords": KEYWORD, "page": str(page)}, headers={"content-type": "application/x-www-form-urlencoded"}, timeout=10, ) data = resp.json() if data.get("showapi_res_code") != 0: raise RuntimeError(data.get("showapi_res_error")) body = data["showapi_res_body"] if body.get("ret_code") != "0": raise RuntimeError(f"ret_code={body.get('ret_code')}") all_items.extend(body.get("contentlist", [])) total_pages = int(body.get("allPages", "1")) if page >= total_pages or page >= MAX_PAGES: break page += 1 print(f"共抓取 {len(all_items)} 条,跨 {page} 页") ``` **JavaScript:带「加载更多」的翻页判断** ```javascript const APP_KEY = "YOUR_APPKEY"; const fetchPage = (kw, page) => fetch(`https://route.showapi.com/1601-2?appKey=${APP_KEY}`, { method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ keyWords: kw, page: String(page) }), }).then((r) => r.json()); let currentPage = 1; let totalPages = 1; async function loadMore(kw) { const data = await fetchPage(kw, currentPage); const body = data.showapi_res_body; totalPages = parseInt(body.allPages, 10) || 1; body.contentlist?.forEach((it) => renderCard(it)); if (currentPage < totalPages) { currentPage += 1; showLoadMoreButton(); // 还有下一页 } else { hideLoadMoreButton(); // 到底了 } } ``` ## 返回示例与解析 `keyWords=飞&page=1` 返回 `maxResult=10`、`allNum=2`、`allPages=1`、`currentPage=1`——只有 1 页,无需翻页。当 `allPages > 1` 时,把 `page` 递增继续请求即可。 ## 进阶 / 边界 - **`page` 是字符串页码**:传 `"1"`/`"2"` 即可;超过 `allPages` 时接口通常返回空 `contentlist`,不要靠它报错,应主动以 `allPages` 为界。 - **免费有档位限制**:翻页本质是多次调用,会吃档位;做离线索引时建议控制频率并缓存结果(见《[免费档位与调用限制说明](https://www.showapi.com/guides/dream-free-tier-1601)》)。 - **`maxResult` 非你可控**:每页上限由接口决定(示例为 10),不要假设能调大;要拿全量就读完所有页。 - **内容为文化参考**:`detailList` 来自《周公解梦全书》类资料,展示时加「仅供娱乐参考」提示。 ## FAQ **Q1:怎么知道还有没有下一页?** 读 `showapi_res_body.allPages`,当 `currentPage < allPages` 时就有下一页。 **Q2:page 传超过 allPages 会怎样?** 通常返回空 `contentlist`(或当前页无数据),不会报错;建议以 `allPages` 为循环上界,并设安全上限防死循环。 **Q3:每页条数能改吗?** `maxResult` 由接口决定(示例为 10),请求参数里没有可调页大小的字段,按接口返回为准。 **Q4:翻页频繁会触发限制吗?** 会吃免费档位。批量抓取时控制并发、加间隔、缓存结果。详见免费档位说明。 **Q5:分页字段是数字还是字符串?** 示例中为字符串(如 `"allPages":"1"`),解析时做类型兼容(先按字符串读,`int()`/`parseInt` 转换)。 ## 相关能力 / 下一步阅读 - [周公解梦 API 返回字段全解:ret_code、contentlist、分页字段一文读懂](https://www.showapi.com/guides/dream-response-fields-1601) - [周公解梦 API:关键词怎么查才准?关键词选取与结果解读实战](https://www.showapi.com/guides/dream-keywords-guide-1601) - [周公解梦 API 免费档位与调用限制说明:如何避免触发限流?](https://www.showapi.com/guides/dream-free-tier-1601) - **本系列共 8 篇**:查看[周公解梦 API 指南总目录](https://www.showapi.com/guides/dream-guides-1601)