基于无码丰富的医疗基础数据和持续迭代的数据生产引擎,以灵活多样的开放接口将高度结构化的行业数据集、数据处理算法能力、深度知识图谱关系等赋能开放给合作伙伴,与合作伙伴共享数据能力,共同打造更具竞争力的应用生态。
无码数据开放服务主要覆盖医疗应用场景和数据应用能力,包括:医疗基础数据开放共享、查病问药智能算法服务开放、资讯文本处理服务、医疗数据众包能力开放以及基于医疗场景化能力的其他开放服务。接口分批次开放中,已开放接口仍有较大弹性,如有未满足的场景化需求,可单独对接。
累计百万级别医疗领域高度结构化的基础数据,覆盖医疗机构、药品、疫苗、疾病、症状、活性成分、医生、临床试验等,为常见医疗服务场景提供底层基础数据支持。
通过大量自然语言诊断数据学习,构建了持续迭代的自然语言智能算法推荐能力,可提供场景化的识别意图、智能分诊、辅助疾病判断、辅助用药推荐等智能服务。
无码在以就诊问问为代表的实践中,打造出了高效、稳定、智能的资讯理解及处理服务能力。目前已累计数千万资讯处理量,日吞吐量峰值达数十万篇。支持从资讯源获取、资讯内容抽取、多语言转换、自动评分、自动摘要、话题聚合、智能分类打标、动态时间线跟踪等全流程自动化,现已可通过开放服务获取基础或个性化的资讯处理能力。
拥有规模化的专业众包团队,具备算法+专业众包+自动质控融合的稳定数据处理流程,目前众包平台已吸纳数百位来自临床医师/药师、高校硕博(浙大、复旦)等医疗行业从业者或医药专业高校师生,来源专业覆盖全科,可持续输出高效、稳定、高质量的专业数据服务能力。
以 appid +token+签名方式,进行应用对接,支持按 appid 限定调用范围。
基于 HTTP 协议调用 API,基本调用流程为:根据 API 填充参数 > 生成签名 > 拼装 HTTP 请求 > 发起 HTTP 请求> 获取 HTTP 响应 > 解析 json 结果。
https://medical.nocode.com/open/
调用任何一个 API 都必须在 HTTP Header 中传入的参数。
参数 | 类型 | 是否必填 | 描述 |
---|---|---|---|
appid | string | 是 | 私有的 appid |
sign | string | 是 | 输入参数的签名结果 |
timestamp | string | 是 | unix 时间戳,单位毫秒(与服务提供方的服务器时差不超过 1 分钟) |
在 HTTP 请求中的 Header 中需发送 sign 字段,sign 字段为将 appid、token 和 timestamp 加密后的签名内容。签名算法为 lowercase(md5(appid+token+timestamp))
示例:
appid: ENHmKoxq97i4eRHn
token: LUZa2HfaxoLkAbgVc3BfNMzG6EaGJHvr
timestamp: 1561952337000
sign: 323fa1f3c22ea7e0fb4886513205dd87 =
lowercase(md5(ENHmKoxq97i4eRHnLUZa2HfaxoLkAbgVc3BfNMzG6EaGJHvr1561952337000))
返回内容为 JSON 格式。HTTP header 可加上 Content-Type:application/json 为了方便排查问题,建议调用的时候 header 加上 X-Request-ID 值为 uuid
如: X-Request-ID:c5159cf9-1b60-41a8-90fb-5e507c8e01b9
当请求错误时,程序将返回 HTTP status 400,body 内容为 json 格式
{
"error":{
"code": CODE_VALUE_INT,
"message": "MESSAGE_VALUE_STRING"
}
}
其中 code 可选值以下几种情况:
400101: sign 签名校验错误
400102: timestamp 过期
400103: 缺少时间戳
400104: app_id 不正确
400105: 非法的时间戳
400108: 参数不合法
400109: 系统错误
400110: 没有接口权限
400111: 找不到该条数据
400112: 已经超过当天最大调用量
400113: 您的请求过于频繁,请稍后再试
400114: 调用来源不合法
400115: 余额不足
400116: 不在授权有效期内
以药品包装详情查询示例接口 ms.drug.detail.get 为例,路由是 v2/nc.ms.drug.package.detail
接口地址(仅作示例):https://medical.nocode.com/open/v2/nc.ms.drug.package.detail
入参示例(CURL):
curl -X GET \
'https://medical.nocode.com/open/v2/nc.ms.drug.package.detail?drug_package_id=f874aca5b4d86f96' \
-H 'Accept: */*' \
-H 'Accept-Encoding: gzip, deflate' \
-H 'Cache-Control: no-cache' \
-H 'appid: JbdDAvbUDtEiRn8c' \
-H 'sign: fa755915f4e211e02de2bd8227d13deb' \
-H 'timestamp: 1575976883000'
返回结果示例
{
"data": {
"drug_package_id": "8c87c78599348648",
"drug_approval_number_id": "7LeafcSS6jv",
"generic_name": "复方头孢克洛片",
"drug_generic_id": "7EZnbDsO26X",
"trade_name": "毕利",
"dosage_form": "片剂",
"approval_number": "国药准字H20050768",
"nhsa_drug_code": null,
"images": [],
"state": 1,
"redirect_id": null,
"is_rx": true,
"otc_type": null,
"brand_name": "毕利",
"package": "10片"
}
}
Java 代码调用示例
import com.fasterxml.jackson.databind.JsonNode;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.util.DigestUtils;
import org.springframework.web.client.RestTemplate;
import java.util.HashMap;
import java.util.Map;
/**
* @author nocode tech
*/
public class NocodeOpenApiRequestDemo {
public static void main(String[] args) {
getRequestDemo();
postRequestDemo();
}
/**
* GET 请求示例
*/
private static void getRequestDemo() {
String url = "https://medical.nocode.com/open/v2/nc.ms.drug.generic.detail.get?drug_generic_id=7vBZEIcLZxj";
String appId = "REPLACE_YOUR_APP_ID";
String token = "REPLACE_YOUR_TOKEN";
String timestamp = String.valueOf(System.currentTimeMillis());
HttpHeaders headers = new HttpHeaders();
headers.add("appid", appId);
headers.add("sign", DigestUtils.md5DigestAsHex((appId + token + timestamp).getBytes()));
headers.add("timestamp", timestamp);
HttpEntity<?> requestEntity = new HttpEntity<>(headers);
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<JsonNode> exchange = restTemplate.exchange(url, HttpMethod.GET, requestEntity, JsonNode.class);
System.out.println("Response : " + exchange);
}
/**
* POST 请求示例
*/
private static void postRequestDemo() {
String url = "https://medical.nocode.com/open/v2/nc.ms.smart.department.recommend"
//设置查询参数
Map<String, String> body = new HashMap<>();
body.put("content", "身体头疼");
String appId = "REPLACE_YOUR_APP_ID";
String token = "REPLACE_YOUR_TOKEN";
String timestamp = String.valueOf(System.currentTimeMillis());
HttpHeaders headers = new HttpHeaders();
headers.add("appid", appId);
headers.add("sign", DigestUtils.md5DigestAsHex((appId + token + timestamp).getBytes()));
headers.add("timestamp", timestamp);
headers.set("Content-Type", "application/json");
HttpEntity<?> requestEntity = new HttpEntity<>(body, headers);
RestTemplate restTemplate = new RestTemplate();
JsonNode jsonNode = restTemplate.postForObject(url, requestEntity, JsonNode.class);
System.out.println("Response : " + jsonNode);
}
}
Python 代码调用示例
import httpx
import time
import hashlib
def get_request_demo():
url = "https://medical.nocode.com/open/v2/nc.ms.drug.generic.detail.get?drug_generic_id=7vBZEIcLZxj"
app_id = "REPLACE_YOUR_APP_ID"
token = "REPLACE_YOUR_TOKEN"
timestamp = str(int(time.time() * 1000))
headers = {
"appid": app_id,
"sign": hashlib.md5(f"{app_id}{token}{timestamp}".encode()).hexdigest(),
"timestamp": timestamp
}
with httpx.Client() as client:
response = client.get(url, headers=headers)
print("Response:", response.json())
def post_request_demo():
url = "https://medical.nocode.com/open/v2/nc.ms.smart.department.recommend"
app_id = "REPLACE_YOUR_APP_ID"
token = "REPLACE_YOUR_TOKEN"
timestamp = str(int(time.time() * 1000))
headers = {
"appid": app_id,
"sign": hashlib.md5(f"{app_id}{token}{timestamp}".encode()).hexdigest(),
"timestamp": timestamp,
"Content-Type": "application/json"
}
body = {
"content":"头痛挂什么科"
}
with httpx.Client() as client:
response = client.post(url, headers=headers, json=body)
print("Response:", response.json())
if __name__ == "__main__":
get_request_demo()
post_request_demo()