เชื่อม ClinicalTrials.gov v2 + openFDA + ChEMBL เข้าเป็น endpoint สืบค้นข้อมูลยาที่สะอาดด้านลิขสิทธิ์

งาน R&D ยา สตาร์ทอัพด้าน AI การแพทย์ และทีมเฝ้าระวังความปลอดภัยของยา ต่างต้องการสิ่งเดียวกัน: endpoint เดียวที่ดึงข้อมูลการทดลอง ฉลาก เหตุการณ์ไม่พึงประสงค์ และฤทธิ์ทางชีวภาพ มาอย่างสะอาดด้านลิขสิทธิ์ นี่คือสถาปัตยกรรมที่ใช้งานได้จริง พร้อมกับดักที่เคยเล่นงานทีมงานในโปรดักชัน
สรุปสั้น
- •ClinicalTrials.gov v2 (REST + JSON) เข้ามาแทนที่ v1 รุ่นเก่าในปี 2024 — สคีมาสะอาดขึ้น แต่การแบ่งหน้า ฟิลด์ทางเลือก และการเลื่อนตามประวัติยังเล่นงานผู้ที่เพิ่งเริ่มเชื่อมต่อ
- •openFDA ครอบคลุมฉลากยา (SPL), รายงานเหตุการณ์ไม่พึงประสงค์ FAERS และข้อมูลการเรียกคืน โดยไม่มีค่าใช้จ่าย; จำกัดที่ 240 คำขอ/นาที เมื่อไม่ยืนยันตัวตน และ 120,000/วัน เมื่อใช้ key
- •ChEMBL ให้ข้อมูลฤทธิ์ทางชีวภาพ (IC50, Ki, Kd, EC50), เป้าหมาย และการทดสอบ — มิติเชิงโครงสร้าง / เชิงกลไก ที่ฐานข้อมูลอื่นขาดไป
- •ลิขสิทธิ์เชิงพาณิชย์ของ DrugBank คือกับดัก: การใช้เชิงวิชาการได้รับอนุญาต; แต่ผลิตภัณฑ์ใด ๆ แม้แต่ SaaS เล็ก ๆ ก็เข้าข่ายเงื่อนไขลิขสิทธิ์เชิงพาณิชย์ที่นักพัฒนาส่วนใหญ่ไม่อ่านจนกว่าจะได้รับหนังสือแจ้ง
- •API Pick Clinical Search ห่อ ClinicalTrials, openFDA, ChEMBL และเภสัชวิทยาของ DrugBank ไว้ใน endpoint POST เดียว — 30 เครดิตต่อการเรียก สะอาดด้านลิขสิทธิ์ คิดเงินเมื่อสำเร็จเท่านั้น
รูปร่างของปัญหา
ผู้ใช้สามกลุ่ม ด้วยเหตุผลที่ต่างกัน ต่างลงเอยด้วยความต้องการไปป์ไลน์ข้อมูลยาที่แทบจะเหมือนกัน:
- ทีม R&D ยาชีวเภสัชและทีมนำยากลับมาใช้ใหม่ ต้องการข้อมูลฤทธิ์ทางชีวภาพ (ChEMBL), ประวัติการทดลอง (ClinicalTrials.gov) และสัญญาณเหตุการณ์ไม่พึงประสงค์ (FAERS) ที่เชื่อมโยงเข้าด้วยกันเพื่อประเมินตัวยาที่เป็นตัวเลือก
- สตาร์ทอัพด้าน AI การแพทย์ ที่สร้างแชตบอตหรือชั้นสนับสนุนการตัดสินใจทางคลินิก ต้องการฉลากยา (SPL ของ openFDA) และข้อมูลการทดลองที่เชื่อมโยงกัน เพื่อยึดคำตอบของ LLM ไว้กับแหล่งข้อมูลกำกับดูแล
- ทีมเฝ้าระวังความปลอดภัยของยา ต้องการ FAERS บวกกับฟิลด์ที่มีโครงสร้างของฉลากยา บวกกับข้อมูลกลไกจาก ChEMBL/DrugBank เพื่อประเมินความน่าเชื่อถือของสัญญาณ
ผู้ใช้แต่ละกลุ่มเหล่านี้ลงเอยด้วยการเชื่อมฐานข้อมูลสี่แหล่งเข้าด้วยกัน: ClinicalTrials.gov, openFDA, ChEMBL และ DrugBank แต่ละฐานข้อมูลมีสคีมา rate limit และเงื่อนไขลิขสิทธิ์ของตัวเอง DrugBank คือตัวที่กัด — ข้อกำหนดการใช้เชิงพาณิชย์ของมันเล่นงานทีมที่ผสานมันเข้าในช่วงพัฒนาโดยไม่อ่านลิขสิทธิ์ และการส่งหนังสือแจ้งไปยังผู้ก่อตั้ง SaaS รายเล็กเป็นเรื่องที่เกิดขึ้นจริง
นี่คือสถาปัตยกรรมที่เราแนะนำ รวมถึงเส้นทางทางเลือกที่สะอาดด้านลิขสิทธิ์ซึ่งเลี่ยงกับดัก DrugBank
แหล่งข้อมูลทั้งสี่ อย่างละหนึ่งย่อหน้า
ClinicalTrials.gov v2
US National Library of Medicine ทะเบียนอ้างอิงหลักสำหรับการทดลองทางคลินิกที่ลงทะเบียนในสหรัฐฯ และเป็นมาตรฐานสากลโดยพฤตินัย v2 เปิดตัวในปี 2024 — REST + JSON แทนที่ CSV/XML ของ v1 รุ่นเก่า ฟรี มี rate limit (10 คำขอ/วินาที) เอกสารอยู่ที่ clinicaltrials.gov/data-api/api จุดแข็ง: น่าเชื่อถือ ครอบคลุม ไม่มีปัญหาลิขสิทธิ์ จุดอ่อน: ฟิลด์ทางเลือกเบาบางในการศึกษาที่เก่ากว่า มีแรงเสียดทานในการย้ายสคีมาสำหรับทีมที่ยังใช้ v1
openFDA
API สาธารณะที่ดำเนินการโดย FDA ครอบคลุมฉลากยา (SPL — Structured Product Labels), FAERS (Adverse Event Reporting System), ข้อมูลการเรียกคืน และรายการเทียบเคียงสำหรับอาหาร/อุปกรณ์ ฟรี จำกัดที่ 240 คำขอ/นาที เมื่อไม่ยืนยันตัวตน และ 120,000 คำขอ/วัน เมื่อใช้ API key จุดแข็ง: แหล่งข้อมูลกำกับดูแลที่น่าเชื่อถือ ข้อมูลมีโครงสร้าง ครอบคลุมกว้าง จุดอ่อน: การแยกวิเคราะห์ SPL ต้องเข้าใจแบบแผนของ HL7; การกำจัดข้อมูลซ้ำของ FAERS เป็นปัญหาของผู้ใช้เอง
ChEMBL
EBI / EMBL-EBI ฐานข้อมูลฤทธิ์ทางชีวภาพที่ผ่านการคัดสรร — การวัด IC50, Ki, Kd, EC50 ทั่วสารประกอบ เป้าหมาย และการทดสอบ ฟรี REST + JSON ไม่มีความปวดหัวเรื่อง rate limit ที่ปริมาณปานกลาง จุดแข็ง: ข้อมูลเชิงโครงสร้างและเชิงกลไกที่ไม่มีแหล่งอื่นครอบคลุม จุดอ่อน: เน้นระดับงานวิจัย; การจับคู่เชิงการรักษา/เชิงคลินิกเป็นเพียงบางส่วน
DrugBank
มีจุดกำเนิดจาก University of Alberta ปัจจุบันเป็นเชิงพาณิชย์ การจับคู่ยา-เป้าหมาย เภสัชวิทยา อันตรกิริยาระหว่างยา และเภสัชพหุคูณ การใช้เชิงวิชาการฟรี; การใช้เชิงพาณิชย์ต้องมีลิขสิทธิ์แบบเสียเงิน ลิขสิทธิ์นี้ใช้กับผลิตภัณฑ์เชิงพาณิชย์ใด ๆ รวมถึงเครื่องมือ SaaS ฟรี — อ่านเงื่อนไขก่อนผสานเข้า
API Pick Clinical Search (ทางเลือกที่สะอาดด้านลิขสิทธิ์)
การค้นหาเชิงความหมายทั่ว ClinicalTrials.gov, ฉลากยา FDA, ฤทธิ์ทางชีวภาพของ ChEMBL และเมทาดาทาเภสัชวิทยาของ DrugBank ที่เราขอสิทธิ์ใช้งานมา JSON เข้า / JSON ออก 30 เครดิตต่อการเรียก (~$0.03) คิดเงินเมื่อสำเร็จเท่านั้น ผลลัพธ์สอดคล้องกับเงื่อนไขข้อมูลกำกับดูแลและเชิงโครงสร้าง; ไม่มีกับดักลิขสิทธิ์เชิงพาณิชย์สำหรับผู้ใช้ปลายทาง
เทียบกันแบบเคียงข้าง
| ClinicalTrials.gov v2 | openFDA | ChEMBL | DrugBank | API Pick Clinical | |
|---|---|---|---|---|---|
| ความครอบคลุม | ทะเบียนการทดลอง | ฉลาก + FAERS + การเรียกคืน | ฤทธิ์ทางชีวภาพ เป้าหมาย การทดสอบ | ยา + เป้าหมาย + อันตรกิริยา | ทั้งสี่ เชิงความหมาย |
| รูปแบบ | REST + JSON | REST + JSON | REST + JSON | REST + JSON / SQL dump | JSON, ข้อความย่อที่จัดรูปไว้ล่วงหน้า |
| Rate limit | 10 คำขอ/วินาที | 240/นาที ไม่ยืนยันตัวตน, 120k/วัน เมื่อใช้ key | ใจกว้าง | ขึ้นอยู่กับระดับลิขสิทธิ์ | ต่อการเรียก (ไม่จำกัดต่อผู้ใช้) |
| ลิขสิทธิ์ | สาธารณสมบัติ | สาธารณสมบัติ | CC-BY-SA | วิชาการฟรี / พาณิชย์เสียเงิน | API Pick TOS |
| เหมาะที่สุดกับ | โปรโตคอลการทดลอง แยกแยะผู้สนับสนุน | ฉลากกำกับดูแล สัญญาณ AE | เชิงกลไก / เชิงโครงสร้าง | อันตรกิริยาระหว่างยา เภสัชพหุคูณ | การสืบค้นโดย AI agent เหนือทั้งหมด |
โค้ดที่ใช้งานได้: แต่ละแหล่ง
ClinicalTrials.gov v2
import requests
# Trials for a specific condition + intervention
r = requests.get(
"https://clinicaltrials.gov/api/v2/studies",
params={
"query.cond": "non-small cell lung cancer",
"query.intr": "pembrolizumab",
"filter.overallStatus": "RECRUITING",
"pageSize": 25,
"format": "json",
},
)
studies = r.json()["studies"]
for s in studies[:3]:
proto = s["protocolSection"]
nct = proto["identificationModule"]["nctId"]
title = proto["identificationModule"]["briefTitle"]
sponsor = proto["sponsorCollaboratorsModule"]["leadSponsor"]["name"]
print(f"{nct}: {title} (sponsor: {sponsor})")openFDA: ฉลากยา + สัญญาณ FAERS
import requests
from collections import Counter
# Drug label lookup
r = requests.get(
"https://api.fda.gov/drug/label.json",
params={"search": "openfda.brand_name:Lipitor", "limit": 1},
).json()
label = r["results"][0]
print("Indications:", label.get("indications_and_usage", ["—"])[0][:200])
# FAERS — most reported adverse events for atorvastatin
r = requests.get(
"https://api.fda.gov/drug/event.json",
params={
"search": 'patient.drug.medicinalproduct:"ATORVASTATIN CALCIUM"',
"count": "patient.reaction.reactionmeddrapt.exact",
"limit": 10,
},
).json()
print("Top reported reactions:")
for r_ in r["results"]:
print(f" {r_['term']}: {r_['count']}")ChEMBL: ฤทธิ์ทางชีวภาพของเป้าหมาย
import requests
# Target search → activity for a specific target
r = requests.get(
"https://www.ebi.ac.uk/chembl/api/data/activity.json",
params={
"target_chembl_id": "CHEMBL204", # PD-L1
"standard_type": "IC50",
"limit": 25,
},
).json()
for a in r["activities"][:5]:
cid = a["molecule_chembl_id"]
val = a["standard_value"]
unit = a["standard_units"]
print(f"{cid}: IC50 = {val} {unit}")API Pick Clinical Search: เรียกครั้งเดียว ครบทุกแหล่ง
import requests
r = requests.post(
"https://www.apipick.com/api/search/clinical",
headers={"x-api-key": "pk_yourkey"},
json={"query": "PD-L1 inhibitors in NSCLC trials and adverse events"},
)
for hit in r.json()["results"][:5]:
print(hit["title"], "→", hit["url"], f"(source: {hit.get('source')})")
# Returns ranked semantic matches across trials + labels + bioactivity.
# 30 credits per call, only on HTTP 200.สามรูปแบบที่พบในโปรดักชัน
1. การคัดกรองเพื่อนำยากลับมาใช้ใหม่
เลือกยาที่ได้รับอนุมัติแล้ว ดึงกลไกของมัน (เป้าหมายจาก ChEMBL), ข้อบ่งใช้ปัจจุบัน (ฉลากจาก openFDA) และการทดลองใด ๆ ที่ทดสอบมันในข้อบ่งใช้ใหม่ (ClinicalTrials.gov) เทียบไขว้กับ FAERS เพื่อหาสัญญาณด้านความปลอดภัยในข้อบ่งใช้ใหม่ agent ประกอบทั้งสี่ชิ้นเข้าด้วยกันและดึงตัวเลือกที่ควรค่าแก่เวลาของเภสัชกรผู้เชี่ยวชาญขึ้นมา
2. การคัดแยกสัญญาณเฝ้าระวังความปลอดภัยของยา
cron รายชั่วโมงดึงรายงาน FAERS ใหม่สำหรับรายการยาที่เฝ้าติดตาม คำนวณ Reporting Odds Ratio เทียบกับส่วนที่เหลือของฐานข้อมูล ทำเครื่องหมายสัญญาณใด ๆ ที่ ROR > 2 โดยมี CI 95% ที่ไม่รวมค่า 1 จับคู่กับ ClinicalTrials.gov เพื่อตรวจว่าข้อบ่งใช้นั้นเป็นแบบตรงฉลาก (on-label) หรือนอกฉลาก (off-label) ผลลัพธ์: รายการที่จัดลำดับความสำคัญไว้สำหรับการตรวจทานยามเช้าของทีม — เทียบเคียงได้กับ รูปแบบสรุปข่าวยามเช้า สำหรับข่าวสาร
3. การยึดโยงผู้ช่วยการแพทย์ AI
สำหรับทุกคำตอบเกี่ยวกับยาที่ผู้ช่วยให้ไว้ ให้ดึงฉลาก openFDA และใช้เป็นความจริงพื้นฐานที่น่าเชื่อถือ อ้างอิงส่วนของฉลาก FDA อย่างชัดเจน ปฏิเสธที่จะตอบคำถามเกี่ยวกับขนาดยาเมื่อดึงฉลากไม่ได้ นี่คือรูปแบบการยึดโยงด้วยการอ้างอิงจาก บทความเรื่องคำพิพากษาของสหราชอาณาจักร นำมาปรับใช้กับการแพทย์ — โดยมีเดิมพันที่สูงยิ่งกว่า
กับดัก DrugBank
คุ้มค่าที่จะเน้นย้ำอีกครั้ง ลิขสิทธิ์เชิงวิชาการของ DrugBank เป็นที่รู้กันดี แต่เงื่อนไขจะเปลี่ยนไปในทันทีที่คุณเก็บเงินจากใครก็ตามสำหรับสิ่งใดก็ตามที่ใช้ข้อมูลนั้น — รวมถึงผลิตภัณฑ์ฟรีที่คุณตั้งใจจะเปลี่ยนผู้ใช้ให้กลายเป็นแบบเสียเงินในภายหลัง ผู้ก่อตั้ง SaaS รายเล็กหลายรายค้นพบเรื่องนี้อย่างเจ็บปวดหลังจากหนังสือแจ้งตกลงในกล่องจดหมายของพวกเขา
สองเส้นทางที่สะอาด:
- จ่ายค่าลิขสิทธิ์เชิงพาณิชย์ ราคามาตรฐานไม่โปร่งใส; เตรียมตัวเจรจา สำหรับผลิตภัณฑ์ที่โตเต็มที่และมีเงินทุน นี่คือคำตอบที่ถูกต้อง เพราะข้อมูลอันตรกิริยาระหว่างยาของ DrugBank นั้นหาที่เทียบได้ยาก
- ใช้ทางเลือกที่สะอาดด้านลิขสิทธิ์ในช่วงต้น ChEMBL ครอบคลุมข้อมูลเชิงกลไกส่วนใหญ่ RxNorm + DailyMed (NIH) ครอบคลุมการทำให้ชื่อยาเป็นมาตรฐานและฉลาก FAERS ครอบคลุมเหตุการณ์ไม่พึงประสงค์ การรวมกันนี้พลาดข้อมูลเฉพาะของ DrugBank บางส่วน (ตารางอันตรกิริยาที่ละเอียด เภสัชพหุคูณ) แต่ก็เพียงพอสำหรับผลิตภัณฑ์ช่วงต้นส่วนใหญ่ API Pick Clinical Search ห่อชุดย่อยที่สะอาดด้านลิขสิทธิ์ไว้ให้คุณ
จุดที่สิ่งนี้ขยายเป็นทั่วไป
รูปแบบ 'เชื่อมฐานข้อมูลสาธารณะสี่แหล่งเข้าด้วยกันพร้อมการจัดการ rate limit และวินัยด้านลิขสิทธิ์' ปรากฏในหลายอุตสาหกรรมที่ถูกกำกับดูแล — เอกสารยื่นทางการเงิน (SEC + บทถอดความผลประกอบการ + สถิติหุ้น), สิทธิบัตร (USPTO + EPO + WIPO + JPO + KIPO + CNIPA), กฎหมาย (Find Case Law + legislation.gov.uk + รายการเทียบเคียงในต่างประเทศ) เวอร์ชันข้อมูลยานั้นผิดปกติเป็นหลักเพราะฐานด้านลิขสิทธิ์เป็นที่ถกเถียงกันมากกว่า แกนอื่น ๆ ทุกแกน — ความหลากหลายของสคีมา rate limit การกำจัดข้อมูลซ้ำ การจับคู่ตัวระบุข้ามแหล่ง — ล้วนขยายเป็นทั่วไปได้
สำหรับการสืบค้นในการเรียกครั้งเดียวทั่วแหล่งข้อมูลยาที่สะอาดด้านลิขสิทธิ์ API Pick Clinical Search จัดการงานเชื่อมต่อให้ สำหรับการผสานที่ลึกกว่า (การแยกวิเคราะห์ SPL แบบเต็ม การคำนวณสัญญาณ FAERS ต้นไม้เป้าหมายของ ChEMBL) คุณยังคงต้องไปที่แต่ละแหล่งโดยตรง เลือกระดับการนามธรรมที่เหมาะสมสำหรับแต่ละส่วนของไปป์ไลน์
คำถามที่พบบ่อย
อะไรที่เปลี่ยนไปใน ClinicalTrials.gov v2 จนทำให้ไปป์ไลน์พัง?
สามอย่าง (1) โครงสร้าง endpoint — v2 เป็น REST + JSON แทนที่ CSV/XML ของ v1 (2) ชื่อฟิลด์ — ตัวห่อ protocolSection ใหม่ และการเปลี่ยนจาก snake_case เป็น camelCase คือการรีแฟกเตอร์ที่พบบ่อยที่สุด (3) การเติมข้อมูลฟิลด์ทางเลือก — หลายฟิลด์ที่ระบุว่า 'มีให้ใช้' กลับถูกเติมข้อมูลอย่างเบาบาง โดยเฉพาะการศึกษาที่เก่ากว่า การย้ายระบบมักใช้เวลา 2-3 วัน บวกกับอีกหนึ่งสัปดาห์ในการแก้บั๊กเมื่อการศึกษาแบบกรณีขอบเริ่มโผล่ขึ้นมา
เรื่องการอนุญาตใช้สิทธิของ DrugBank เป็นอย่างไร?
DrugBank ฟรีสำหรับการวิจัยเชิงวิชาการและส่วนบุคคล การใช้เชิงพาณิชย์ใด ๆ — รวมถึงผลิตภัณฑ์ SaaS ฟรี, MVP ของสตาร์ทอัพ หรือเครื่องมือที่ใช้ในงานที่ปรึกษาแบบมีค่าใช้จ่าย — ล้วนเข้าข่ายเงื่อนไขลิขสิทธิ์เชิงพาณิชย์ของ DrugBank โพสต์ของ Thinklab เรื่อง 'Sounding the alarm on DrugBank's new license' เมื่อไม่กี่ปีก่อน ยังคงเป็นบทวิเคราะห์หลักในเรื่องนี้ นักพัฒนาจำนวนมากผสาน DrugBank เข้าในช่วงพัฒนาโดยไม่ตระหนักว่าเมื่อไรที่พวกเขาปล่อยผลิตภัณฑ์ ลิขสิทธิ์ก็มีผลทันที อ่านเงื่อนไขก่อนผสานเข้า หรือเลือกใช้ทางเลือกที่สะอาดด้านลิขสิทธิ์
จะทำการตรวจจับสัญญาณเฝ้าระวังความปลอดภัยของยาเบื้องต้นได้อย่างไร?
ใช้มาตรวัดความไม่สมส่วนมาตรฐาน — Reporting Odds Ratio (ROR), Proportional Reporting Ratio (PRR), BCPNN แบบเบย์ — บนฐานข้อมูลเหตุการณ์ไม่พึงประสงค์ FAERS ไลบรารีโอเพนซอร์สอย่าง vigipy นำวิธีเหล่านี้ไปใช้ กับดักคือการกำจัดข้อมูลซ้ำของ FAERS: รายงานจำนวนมากเป็นการยื่นซ้ำของเคสเดียวกันจากหลายฝ่าย; ไลบรารีอย่าง VigiMatch ของ WHO จัดการเรื่องนี้ได้ แต่คุณต้องจ่ายเงิน สำหรับกรณีใช้งาน AI การแพทย์ส่วนใหญ่ endpoint FAERS ของ openFDA บวกกับการคำนวณ ROR อย่างง่าย ก็เพียงพอในการดึงสัญญาณที่ควรค่าแก่การตรวจสอบขึ้นมา
API Pick Clinical Search สอดคล้องกับ HIPAA หรือไม่?
แหล่งข้อมูลที่เราห่อไว้ (ClinicalTrials.gov, openFDA, ChEMBL, เมทาดาทาเภสัชวิทยาของ DrugBank) ไม่มีข้อมูลสุขภาพที่ได้รับการคุ้มครอง — ครอบคลุมโปรโตคอลการทดลอง ฉลากยา ข้อมูลรวมของเหตุการณ์ไม่พึงประสงค์ และข้อมูลเชิงโครงสร้าง/ฤทธิ์ทางชีวภาพ การปฏิบัติตาม HIPAA ใช้กับ PHI ซึ่งไม่ปรากฏในดัชนีของเรา หากคุณกำลังสร้างผลิตภัณฑ์ปลายน้ำที่จัดการ PHI จริง ๆ (เช่น การสนับสนุนการตัดสินใจทางคลินิกบนเวชระเบียนผู้ป่วย) คุณจะต้องจัดการส่วนนั้นแยกต่างหาก ข้อมูลที่ไหลผ่าน endpoint ของเราสอดคล้องกับข้อมูลกำกับดูแลสาธารณะ
ผลลัพธ์จากสิ่งนี้ใช้สำหรับการตัดสินใจทางคลินิกได้หรือไม่?
ไม่ได้ ผลลัพธ์จาก API สืบค้นใด ๆ เป็นเพียงข้อมูลประกอบ; ไม่ถือเป็นคำแนะนำทางการแพทย์หรือการสนับสนุนการตัดสินใจทางคลินิก ใช้ข้อมูลเพื่อสนับสนุนบุคลากรที่มีคุณสมบัติ — เภสัชกร แพทย์ ผู้เชี่ยวชาญด้านกำกับดูแล — ไม่ใช่เพื่อแทนที่พวกเขา ข้อนี้ใช้กับ API Pick Clinical Search และกับ API อื่น ๆ ในแวดวงนี้
API ที่ใช้ในบทความนี้
Sarah Choy เป็น CEO ของ API Pick เธอเขียนเกี่ยวกับการสร้าง API พร้อมใช้งานจริงสำหรับ AI agent และเวิร์กโฟลว์ LLM