腾讯医典无官方PHP SDK及公开API,所谓调用多为误传;替代方案包括WHO ICD-11、丁香医生OpenAPI、百度健康API或Wikidata等开放接口。

腾讯医典 API 没有公开的 PHP 官方 SDK
腾讯医典目前未开放面向公众的、可直接调用的 HTTP API 接口,也没有提供 php 专用 SDK 或文档。所谓“调用腾讯医典 API”在绝大多数情况下,实际是误传或混淆了以下几种情况:
- 把腾讯医典网页端的前端请求(带 cookie、Referer、加密参数)当成可复用的 API
- 把第三方聚合健康平台(如丁香医生、阿里健康)的接口误标为“腾讯医典”
- 爬取腾讯医典官网(
https://baike.qq.com)HTML 页面并解析,但这违反其robots.txt和服务条款
直接用
file_get_contents 或 cURL 请求其搜索页或疾病页,大概率返回 403、302 跳转或空内容——因为页面依赖 JS 渲染 + 防爬 Header 校验 + 动态 token。
如果你真需要疾病百科数据,替代方案更现实
与其硬啃腾讯医典的反爬机制,不如换用真正开放、稳定、带 PHP 示例的健康知识接口:
-
WHO ICD-11 API(国际疾病分类,免费、结构化,但无中文描述) -
丁香医生 OpenAPI(需申请,有/disease/detail等接口,返回 JSON,含简介、症状、治疗等字段) -
百度健康 API(通过百度 AI 开放平台申请,有health_disease_search接口,支持关键词查疾病) - 本地部署开源知识库,比如用
Wikidata+MediaWiki API查疾病条目(https://www.wikidata.org/w/api.php),再用 PHP 解析 JSON
注意:所有这些都需要注册获取
access_token 或 api_key,且调用量有限制;别试图用游客 Token 绕过鉴权——多数会返回 {"error":"invalid_access_token"} 或 401。
如果坚持解析腾讯医典网页(不推荐,仅说明风险)
真要临时抓一个疾病页面(例如“糖尿病”),得模拟真实浏览器行为,但成功率低、维护成本高:
- 必须带上有效的
User-Agent、Referer(如https://baike.qq.com/)、Cookie(含pgv_pvi、ts_uid等) - 搜索页 URL 是动态拼接的,关键词需
urlencode,例如https://baike.qq.com/item/%E7%B3%96%E5%B0%BF%E7%97%85 - 正文藏在
<div class="lemma-content">或 JS 注入的window.__INITIAL_STATE__中,PHP 的DOMDocument解析不了后者,得用preg_match提取 JSON 字符串再json_decode - 频繁请求会触发滑块验证或 IP 封禁,错误信息常见
503 Service Temporarily Unavailable或返回验证码 HTML
示例片段(仅示意,不可直接运行):
$url = 'https://baike.qq.com/item/' . urlencode('糖尿病');<br>$ch = curl_init();<br>curl_setopt($ch, CURLOPT_URL, $url);<br>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);<br>curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);<br>curl_setopt($ch, CURLOPT_HTTPHEADER, [<br> 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',<br> 'Referer: https://baike.qq.com/'<br>]);<br>$html = curl_exec($ch);
PHP 处理健康数据时最常踩的坑
不管用哪个来源,PHP 层容易忽略几个关键点:
- 没检查
json_last_error()就直接用json_decode($resp, true),遇到编码乱码(如 GBK 响应)会返回null - 没设
default_socket_timeout,远程接口卡住导致整个 PHP 进程阻塞 - 把
$_GET['keyword']直接拼进 cURL URL,没过滤特殊字符,造成注入或 400 错误 - 缓存策略缺失:同一疾病反复请求,既耗资源又易被限流;建议用
apcu_store或文件缓存加 TTL - 忽略 HTTPS 证书验证(
CURLOPT_SSL_VERIFYPEER => false)——开发能通,上线可能因证书链失败静默报错
腾讯医典本身不是问题根源,问题是把“网页能看”等同于“接口能调”。它本质上是个内容站点,不是 API 服务商。
立即学习“PHP免费学习笔记(深入)”;











