慣性聚合 関心のあるブログ、ニュース、テクノロジーを効率的に追跡
原文を読む 慣性聚合で開く

おすすめ購読元

Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
M
MIT News - Artificial intelligence
博客园 - 叶小钗
MyScale Blog
MyScale Blog
V
Visual Studio Blog
月光博客
月光博客
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
I
InfoQ
有赞技术团队
有赞技术团队
阮一峰的网络日志
阮一峰的网络日志
Jina AI
Jina AI
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Blog — PlanetScale
Blog — PlanetScale
Last Week in AI
Last Week in AI
雷峰网
雷峰网
Stack Overflow Blog
Stack Overflow Blog
博客园 - Franky

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python)
どうやって臨床試験APIを構築したか - 2週間で公開データからRapidAPIに
Rahul Ban · 2026-05-25 · via DEV Community

ClinicalTrials.gov(アメリカ政府のFDA臨床試験登録所)は、毎日更新される公共のデータとして48万件以上の研究を公開しています。これは医療分野で最も価値のあるデータセットの一つです。製薬会社、CRO、ヘルステックスタートアップ、学術研究者などがすべてこのデータをプログラム的に必要としています。

しかし公式のClinicalTrials.gov API v2はどうか?それは基本的に人間の研究者向けに作られた検索エンジンをラップしたRESTです。構造化された資格条件の解析はありません。地理的な半径検索はありません。ウェブフックによるアラートはありません。ページネーションがページ中にパラメータを変更すると壊れます。基本的なキーワード検索を超えた何かを構築したいなら、ウェブサイトをスクリプティングし、2GBのテキストファイルエクスポートをダウンロードするか、または月額500ドル以上のエンタープライズベンダーに支払うことになります。

それで、Clinical Trials APIを構築した——ClinicalTrials.govの上に構築された適切なRESTレイヤーで、構造化された資格要件、地理的検索、ウェブフックアラートがある。それがどう行われたかはこちらだ。

スタック

  • 実行環境: Pythonワーカー(Pyodide、Reduxメモリスナップショット)
  • デプロイメント: Wrangler CLI -> 世界中の330以上のエッジロケーション
  • バックエンドデータ: ClinicalTrials.gov API v2(パブリックドメイン、認証不要)
  • マーケットプレイス &請求: RapidAPI
  • 価格:無料/$49/月(Pro)/$199/月(Ultra)
  • 平均レスポンス: 350-500ms 暖め、~1秒冷起動

私が作ったもの

10 は 4 つの機能グループにわたってエンドポイントを提供しています:

エンドポイント 説明 レベル
GET /v1/trials/search フルテキスト検索とフィールド検索、カーソル分页 無料
GET /v1/trials/{nct_id} 結果、場所、参考文献を含む完全な試験詳細 無料
GET /v1/trials/nearby 緯度/経度による地理的半径検索、距離順 無料
GET /v1/stats フェーズ、ステータス、スポンサー、研究タイプによる集計統計 無料
GET /v1/conditions 医療状態自動補完ブラウザ 無料
GET /v1/health ヘルスチェック、認証不要 無料
GET /v1/trials/{nct_id}/eligibility 構造化された適格基準の解析 Pro
GET /v1/alerts アクティブなウェブフックアラートのリスト表示 Pro
POST /v1/alerts 新しい試験用のウェブフックアラートを作成 Pro
DELETE /v1/alerts/{alert_id} Webhook アラートを削除 Pro

困難な部分

挑戦 1: 無構造の資格要件のパース

これは最も技術的な問題でした。ClinicalTrials.govは資格要件を自由なテキストとして保存しており、通常、構造のない単一の段落や箇条書きリストである:

「纳入标准:組織学的に確認されたトリプルネガティブ乳がん。年齢>>= 18歳。ECOG機能状態0または1。適切な血液学的および臓器機能。転移性乳がんに対する既往の全身療法なし。除外基準:乳がんに対する既往の免疫療法。活動性の自己免疫疾患で全身療法が必要。未治療または症状のあるCNS転移。妊娠中または授乳中。」

このを構造化された、機械が読み取れる基準オブジェクトにパースする必要がありました。患者マッチングアルゴリズムが実際に使用できるものです:

{
  "inclusion_criteria": [
    {"category": "Age", "text": "Age >= 18 years", "criterion": "18 years and older"},
    {"category": "Condition", "text": "Histologically confirmed triple-negative breast cancer", "criterion": "Triple-negative breast cancer confirmed by histology"},
    {"category": "Performance Status", "text": "ECOG performance status 0 or 1", "criterion": "ECOG 0-1"}
  ],
  "exclusion_criteria": [
    {"category": "Prior Treatment", "text": "Prior immunotherapy for breast cancer", "criterion": "No prior checkpoint inhibitor therapy"}
  ]
}

全画面表示モードに入る 全画面表示モードから退出する

私のアプローチ:启发式NLPパイプライン。まず、raw textをbullets、番号付きリスト、改行、文の境界に一致するregexパターンを使用して候補基準に分割します。次に、キーワードマッチングとルールベースのロジックを使用して、各候補を8つのカテゴリ(Age(年齢)、Gender(性別)、Condition(状態)、Lab Values(検査値)、Prior Treatment(既往治療)、Performance Status(機能状態)、Organ Function(臓器機能)、Other(その他))のいずれかに分類します。最後に、標準化された簡潔な形式を生成します。

精度は80~85%です。残りの15~20%は「その他」カテゴリーで元のテキストが保持されます。適切な機械学習モデルならもっと良くなるでしょうが、v1をリリースしてフィードバックに基づいて改善したいと思いました。構造化パーサリングはProプラン(月額49ドル)に含まれていますが、有料プランを正当化する核心的な価値を提供するからです.

挑戦2:地図コーディング予算なしの地理的検索

ClinicalTrials.govには施設の住所(名前、都市、州、国)がリストされていますが、緯度/経度座標は提供していません。地理的な半径検索を構築するために、私はすべての施設をジオコーディングする必要がありました.

問題点:データベースには約500,000のユニークな施設住所があります。商用のジオコーディングAPIは1,000件ごとに料金を請求します。無料のジオコーディングAPIには厳格なレート制限があります(~1リクエスト/秒)。

私のアプローチ:事前に構築した検索テーブル。3日間、Pythonスクリプトを実行してすべての住所を無料のジオコーディングAPIに対してジオコーディングし、リクエストの制限を適用しました。その結果得られたテーブルは施設の住所を緯度/経度にマッピングし、作業員のモジュールレベルのメモリにロードされます。/v1/trials/nearbyをクエリすると、作業員は

  1. ClinicalTrials.govでフィルターに一致する試験を検索します
  2. メモリ内のテーブルから各施設の座標を検索します
  3. 検索中心からのハーヴァーソン距離を計算します
  4. 距離で並べ替え、結果を返します

テーブルはメモリに~20MBを使用していますが、アクティブな試験を含む施設のみを含んでいます。近くの検索に対する応答時間は、アップストリームAPI呼び出しと距離計算を含め400-600msです。即時ではありませんが、オンザフライでジオコーディングを行うよりもはるかに速いです.

挑戦3:価格設定 - 実用的な無料プランと収益

永遠のインディーゲーム開発者のジレンマ。無料プランを十分に魅力的にしてユーザーを引き付ける一方で、変換を促進するだけの制限を設ける方法は?

私のアプローチ:データアクセスを無料で提供し、付加価値の処理に対して料金を設定する。

無料プランには10のエンドポイントのうち7つが含まれます。トライアルを検索したり、詳細を取得したり、地理的検索を行ったり、条件を閲覧したり、集計統計を取得したり——実際のプロトタイプを作るのに必要なすべてのことを行えます。1日100リクエスト、3つの保存されたウェブフックアラート。クレジットカード不要、有効期限もありません。無料プランは「あの瞬間」を提供すべきです:「おお、1つのAPI呼び出しで48万件のトライアルをクエリしたんだ!」

Proレベル($49/月)は、実際のエンジニアリング時間を節約する機能を解放します:構造化された資格判断パーサー(正規表現パーサーを自分で作る代わりに)と拡張されたウェブフックアラート(25件ではなく3件、6時間ごとのチェック頻度ではなく日次)です.

Ultra($199/月)は、臨床試験データがミッションクリティカルな会社向けです。リクエスト制限の向上、アラート無制限、優先サポート、専用SLA。

変換仮説:無料トライアルユーザーは1日100リクエストの制限に達するか、資格のパーサリングが必要であり、月$49は開発者1時間の作業費用よりも安い。

もし私が違うことをしたら

  1. ジオコーディング戦略。 3日間、無料のジオコーディングAPIに対してレートリミットをかけるのは愚かなことだった。私は50ドルで商業ジオコーディングサービスを購入すべきで、2時間で終わらせたべきだった。無料でやればお金を節約できるというインスティンクトはインディーゲーム開発者にとって強いが、あなたの時間はもっと価値がある.

  2. API設計 - 資格判定エンドポイントとインラインの分離.私は分離されたエンドポイントを選んだ(/v1/trials/{nct_id}/eligibilityは、パースが処理時間に約200msを追加するため、無料トライアル利用者はアクセスできない機能の遅延コストを負担すべきではないからです。振り返れば、トライアル詳細エンドポイントでパースされた資格をインラインで返す方がクリーンです。開発者は一つのリクエストを期待しています、二つはありません。v2でこれらをマージするかもしれません

数字(現時点で)

ただ始まったばかり。実際の数字はすぐに来ます

メトリクス
サブスクリプターズ 0 (1日目)
APIコールサービス数 0 (1日目)
収益(MRR) $0 (1日目)
稼働率 99.9%(目標)
平均応答時間 350-500ms
インフラコスト $0 (CF Workers無料プラン)

30日以内に実際の数値で更新します.

尝みてみてください

https://rapidapi.com/capifactory-capifactory-default/api/clinical-trials-api - クレジットカード不要の無料トライアル。APIキーを取得して初回の呼び出しをするのに30秒かかります。


ヘルステック製品を開発していて臨床試験のデータが必要な場合、それがあなたにとって本当に役立つエンドポイントは何か教えてください。私は速く配信します - もしまだ存在しないものが必要な場合は、教えていただければおそらく48時間以内にそれを公開します。