技术博客
邮编区域互查·查询详细地区邮编(接入点3)实战:省市区三级联动查询

邮编区域互查·查询详细地区邮编(接入点3)实战:省市区三级联动查询

作者: 万维易源
2026-09-03
邮编查询邮编区域互查ShowAPI免费接口API教程
# 邮编区域互查·查询详细地区邮编(接入点3)实战:省市区三级联动查询 > 邮编区域互查(apiCode=1917)· 接入点3 查询详细地区的邮编 · 免费接口 · 初级~中级开发者 · 约 8 分钟 ## 核心要点 - 接入点3(`1917-3`)按 `province`/`city`/`area`/`county` 逐级筛选,返回邮编(字段名 `code`)。 - 适合「已知省市区,想拿精确邮编」的场景,常做表单三级联动的最后一环。 - ⚠️ **实测差异(重要)**:在免费档位下,传 `province=云南省`(含 `city`/`area`/`county` 组合)返回 `ret_code:0, msg:"查询成功"` 但 **`contentlist` 为空数组**(`allNum:1000, allPages:50`)。文档返回示例显示有数据,与实测不符。 ## Why:靠逐级筛选拿精确邮编 相比接入点2 只传一个 `area`,接入点3 支持省/市/区/街道四个维度组合,更适合在地址选择器里逐级下钻、精确取邮编。但**务必先在你的档位下自测确认数据是否返回**,不要默认一定有结果。 ## What:接口速览 | 项 | 说明 | |----|------| | 接入点地址 | `https://route.showapi.com/1917-3?appKey={your_appKey}` | | 请求参数 | `province`(省)、`city`(市)、`area`(区县)、`county`(街道)、`page`(页码,文档标注分页最大 50 页) | | 返回邮编字段名 | `code` | | 计费 | 免费(有使用档次限制) | ## How:省市区联动查询 ### Python ```python import requests def detail_zip(app_key, province, city=None, area=None, county=None, page=1): params = {"appKey": app_key, "province": province, "page": page} if city: params["city"] = city if area: params["area"] = area if county: params["county"] = county r = requests.post("https://route.showapi.com/1917-3", params=params, timeout=10) data = r.json() if data.get("showapi_res_code") != 0: return None, data.get("showapi_res_error") body = data["showapi_res_body"] if body.get("ret_code") != 0: return None, body.get("msg") # 注意:免费档位下 contentlist 可能为空,须判空 return body.get("contentlist", []), None items, err = detail_zip("YOUR_APPKEY", "云南省", city="昆明市", area="西山区") if err: print("失败:", err) elif not items: print("ret_code=0 但 contentlist 为空(免费档位可能未返回数据行,请自测确认)") else: for it in items: print(it["province"], it["city"], it["area"], it["county"], "邮编", it["code"]) ``` ### cURL ```bash curl -X POST "https://route.showapi.com/1917-3?appKey=YOUR_APPKEY" \ -H "content-type: application/x-www-form-urlencoded" \ --data-urlencode "province=云南省" --data-urlencode "city=昆明市" \ --data-urlencode "area=西山区" --data-urlencode "page=1" ``` ### Node.js(fetch) ```javascript const params = new URLSearchParams({ appKey: "YOUR_APPKEY", province: "云南省", city: "昆明市", area: "西山区", page: "1" }); const res = await fetch(`https://route.showapi.com/1917-3?appKey=YOUR_APPKEY`, { method: "POST", body: params, signal: AbortSignal.timeout(10000) }); const data = await res.json(); const b = data.showapi_res_body; if (b.ret_code !== 0) throw new Error(b.msg); if (!b.contentlist || b.contentlist.length === 0) console.log("空列表,请确认档位数据"); else console.log(b.contentlist); ``` ## 返回示例与解析(实测:免费档位空列表) ```json { "showapi_res_body": { "ret_code": 0, "msg": "查询成功", "contentlist": [], "maxResult": 20, "allNum": 1000, "allPages": 50, "currentPage": 1 } } ``` > `ret_code` 为 0、`allNum` 却显示 1000,但 `contentlist` 为空——这是免费档位下的实测现象,**不要据此断言接口「无数据」**,应先在你的账号档位下确认。 ## 进阶/边界 - **先自测再上线**:在目标档位下用真实参数跑一次,确认 `contentlist` 有数据再写业务逻辑。 - **分页上限**:文档标注 `page` 最大 50 页,超范围按接口约束处理。 - **字段名**:接入点3 邮编字段是 `code`(与接入点2 的 `postcode` 不同)。 - **兜底**:若接入点3 在你的档位下无数据,可退回接入点2(传区/县名)获取邮编。 ## FAQ **Q1:为什么我查出来 `contentlist` 是空的?** 免费档位下实测会出现 `ret_code:0` 但空列表的情况;请先在你的档位自测确认数据是否开放。 **Q2:接入点3 和接入点2 有什么区别?** 接入点3 支持省/市/区/街道多级筛选;接入点2 只传一个 `area` 且返回字段叫 `postcode`。 **Q3:邮编字段叫什么?** 接入点3 是 `code`。 **Q4:分页最大多少页?** 文档标注最大 50 页。 **Q5:返回 `allNum:1000` 但列表为空正常吗?** 免费档位实测如此,属数据开放范围问题,非代码错误。 ## 相关能力 / 下一步阅读 - [邮编区域互查·地区查邮编(接入点2)实战](https://www.showapi.com/guides/postcode-region-to-zip-1917) - [邮编区域互查错误码排查](https://www.showapi.com/guides/postcode-error-codes-1917) - [邮编区域互查分页与 maxResult/allNum 实战](https://www.showapi.com/guides/postcode-pagination-1917) - **本系列共 12 篇**:查看[邮编区域互查指南总目录](https://www.showapi.com/guides/postcode-guides-1917)