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をクエリすると、作業員は
- ClinicalTrials.govでフィルターに一致する試験を検索します
- メモリ内のテーブルから各施設の座標を検索します
- 検索中心からのハーヴァーソン距離を計算します
- 距離で並べ替え、結果を返します
テーブルはメモリに~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時間の作業費用よりも安い。
もし私が違うことをしたら
ジオコーディング戦略。 3日間、無料のジオコーディングAPIに対してレートリミットをかけるのは愚かなことだった。私は50ドルで商業ジオコーディングサービスを購入すべきで、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時間以内にそれを公開します。











