検索 API 仕様

薬の名前で検索し、一致した薬を 一致度の高い順の配列 (JSON) で返す API です。一般名・別名・商品名・後発品名・薬効分類名で検索でき、打ち間違いや表記ゆれも吸収します。検索の仕組みは 参照アプリ と同じです。認証・登録は不要で、無料で使えます。

GEThttps://kyuyaku-data.numero-uno-jpn.workers.dev/v1/search?q=薬の名前

1. 試してみる

「検索する」を押すと、実際の API の応答がここに表示されます。

2. リクエスト

パラメータ必須説明
q必須検索語 (100 文字以内)。URL エンコードして渡す。一般名・別名・商品名・後発品名・薬効分類名 (例: DOAC) のどれでも、一部だけでも可。ひらがな・半角カナ・英字も可
limit任意返す最大件数。1〜100、既定 20

3. レスポンス

Content-Type: application/json; charset=utf-8。例 (q=エンレスト、一部省略):

{
  "query": "エンレスト",
  "count": 2,
  "results": [
    {
      "name": "バルサルタン",
      "category": "ARB (降圧薬)",
      "score": 90,
      "kind": "prefix",
      "matched": "エンレスト錠50mg",
      "surgery_high_risk_days_before": 1,
      "surgery_low_risk_days_before": 0,
      "surgery_high_risk_day_of": false,
      "surgery_low_risk_day_of": false,
      "contrast_required": false,
      "contrast_days_before": null,
      "contrast_day_of": false,
      "detail": "https://numero-uno-jpn.github.io/kyuyaku-data/v1/drugs/バルサルタン.json",
      "page": "https://numero-uno-jpn.github.io/kyuyaku-data/#/drugs/バルサルタン"
    },
    { "name": "サクビトリル・バルサルタン", … }
  ],
  "suggestions": [],
  "_notice": {
    "license": "CC BY 4.0",
    "license_url": "https://creativecommons.org/licenses/by/4.0/",
    "license_exceptions": "quote_excerpt / quote_translation_excerpt は CC BY 4.0 の対象外 …",
    "attribution": "梅谷 直亨, 休薬情報データベース (Kyuyaku Data), https://github.com/numero-uno-jpn/kyuyaku-data",
    "disclaimer": "本データは意思決定支援のための参考情報です。 …"
  }
}

トップレベル

項目型説明
query文字列受け付けた検索語 (前後の空白は除去)
count数値results の件数
results配列一致した薬。一致度 (score) の高い順。一致なしなら空配列
suggestions配列一致なしの時のみ、「もしかして」の候補 (最大 3 件)。各要素は name (一般名)・term (近い名前)・distance (違う文字数)
_noticeオブジェクトライセンス・帰属表示・免責

results[] の各要素

項目型説明
name文字列一般名 (このデータベースでの薬の名前)
category文字列薬効分類
score数値一致度 (40〜100)。下表 参照
kind文字列一致の種類。下表 参照
matched文字列 / null一致した名前 (商品名など)。薬効分類で一致した場合は null
surgery_high_risk_days_before数値 / nullリスクの高い手術・処置の前の休薬日数 (安全側の値)。0 は休薬不要、null は記載なし
surgery_high_risk_day_of真偽true はリスクの高い手術・処置で 手術当日の休薬 (前日まで服用可)。このとき日数は null
surgery_low_risk_days_before数値 / nullリスクの低い手術・処置の前の休薬日数 (同上)
surgery_low_risk_day_of真偽同上 (リスクの低い手術・処置)
contrast_required真偽 / null造影 CT 前の休薬が必要か
contrast_days_before数値 / null造影 CT 前の休薬日数
contrast_day_of真偽造影 CT 当日の休薬
detail文字列その薬の詳細 JSON (ガイドライン別の値・根拠・出典) の URL
page文字列参照アプリのその薬のページの URL

休薬日数は、現行版のガイドラインの最長値 (安全側)、記載がなければ PMDA 添付文書の値です。時間で書かれた値は日数に切り上げ (48 時間 → 2 日)、手術当日の休薬は 0 日より長く 1 日より短いものとして比べます。ガイドラインごとの値・値の出どころ・根拠は detail の JSON で確認してください。

4. 一致の種類と得点

kindscore意味例 (検索語 → 一致)
exact100名前と完全に一致アスピリン → アスピリン
prefix90名前の先頭と一致ばいあすぴりん → バイアスピリン錠100mg
partial80名前の一部と一致ピドグレル → クロピドグレル
variant70長音・濁点などの表記ゆれを吸収して一致リバロキサバン → リバーロキサバン
category66薬効分類名と一致DOAC → アピキサバンほか
typo40〜65打ち間違いを補って一致 (4 文字以上で 1 文字、8 文字以上で 2 文字まで)アスピリソ → アスピリン

比較の前に、全角/半角・ひらがな/カタカナ・小書き文字 (ュ/ユ)・大文字/小文字・空白の違いはすべて吸収します。同じ得点の場合は名前の短い順です。

5. エラー

状態HTTP応答
q がない・空400{"error": "q is required", "usage": …}
q が 100 文字超400{"error": "q is too long (max 100 chars)"}
GET 以外のメソッド405{"error": "Method not allowed (GET only)"}
存在しないパス404{"error": "unknown endpoint", …}
データの取得に一時的に失敗503{"error": "data unavailable"} (Retry-After: 60)

一致が 0 件の場合はエラーではなく、200 で count: 0・空の results・suggestions を返します。

6. コード例

curl

curl -G https://kyuyaku-data.numero-uno-jpn.workers.dev/v1/search --data-urlencode "q=エンレスト"

JavaScript (ブラウザ / Node.js)

const url = new URL('https://kyuyaku-data.numero-uno-jpn.workers.dev/v1/search');
url.searchParams.set('q', 'エリキュース');
const { results } = await (await fetch(url)).json();
for (const r of results) {
  console.log(r.name, r.surgery_high_risk_days_before, r.surgery_low_risk_days_before);
}
// → アピキサバン 3 1

Python (requests)

import requests
r = requests.get('https://kyuyaku-data.numero-uno-jpn.workers.dev/v1/search', params={'q': 'アスピリン'})
print(r.json()['results'][0]['name'])   # アスピリン

Python (標準ライブラリ urllib)

urllib では User-Agent を必ず指定してください。 既定の Python-urllib/… は配信基盤 (Cloudflare) の仕組みで拒否されます (HTTP 403、error code 1010)。

import json, urllib.parse, urllib.request
url = 'https://kyuyaku-data.numero-uno-jpn.workers.dev/v1/search?' + urllib.parse.urlencode({'q': 'アスピリン'})
req = urllib.request.Request(url, headers={'User-Agent': 'my-app/1.0'})
print(json.load(urllib.request.urlopen(req))['results'][0]['name'])   # アスピリン

検索結果から詳細を取得する

const { results } = await (await fetch('https://kyuyaku-data.numero-uno-jpn.workers.dev/v1/search?q=' + encodeURIComponent('プラビックス'))).json();
const { drug } = await (await fetch(results[0].detail)).json();
console.log(drug.guideline_variations.surgery);   // ガイドライン別の値・値の出どころ・根拠

7. データの鮮度・キャッシュ・利用上の注意

8. ライセンスと帰属表示

← 参照アプリへ