検索 API 仕様
薬の名前で検索し、一致した薬を 一致度の高い順の配列 (JSON) で返す API です。一般名・別名・商品名・後発品名・薬効分類名で検索でき、打ち間違いや表記ゆれも吸収します。検索の仕組みは 参照アプリ と同じです。認証・登録は不要で、無料で使えます。
GEThttps://kyuyaku-data.numero-uno-jpn.workers.dev/v1/search?q=薬の名前
1. 試してみる
2. リクエスト
| パラメータ | 必須 | 説明 |
|---|---|---|
q | 必須 | 検索語 (100 文字以内)。URL エンコードして渡す。一般名・別名・商品名・後発品名・薬効分類名 (例: DOAC) のどれでも、一部だけでも可。ひらがな・半角カナ・英字も可 |
limit | 任意 | 返す最大件数。1〜100、既定 20 |
- メソッドは
GETのみ (OPTIONSは CORS の事前確認用)。 - CORS は全開放 (
Access-Control-Allow-Origin: *)。ブラウザの JavaScript から直接呼べます。
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. 一致の種類と得点
kind | score | 意味 | 例 (検索語 → 一致) |
|---|---|---|---|
exact | 100 | 名前と完全に一致 | アスピリン → アスピリン |
prefix | 90 | 名前の先頭と一致 | ばいあすぴりん → バイアスピリン錠100mg |
partial | 80 | 名前の一部と一致 | ピドグレル → クロピドグレル |
variant | 70 | 長音・濁点などの表記ゆれを吸収して一致 | リバロキサバン → リバーロキサバン |
category | 66 | 薬効分類名と一致 | DOAC → アピキサバンほか |
typo | 40〜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. データの鮮度・キャッシュ・利用上の注意
- データは 静的 API (GitHub Pages) と同じものを、最大 10 分の遅れで反映します。データの版は
v1/meta.jsonのdata_versionで確認できます。 - 検索結果の応答は
Cache-Control: public, max-age=300(5 分) です。 - 無料の配信基盤 (Cloudflare Workers) で運用しています。全体で 1 日 10 万件程度が目安です。大量に使う場合は、全件データ を取り込むか、手元で動く同じ検索 (
assets/search.jsとv1/search-index.json) を使ってください。 - 予告なく仕様を変えることはしない方針ですが、無保証です。変更する場合は GitHub でお知らせします。
- 本データは意思決定支援のための 参考情報です。最終的な休薬判断は医療者の責任で行ってください (免責事項)。
8. ライセンスと帰属表示
- データは CC BY 4.0。次の帰属表示をすれば、商用を含め自由に利用できます:
梅谷 直亨, 休薬情報データベース (Kyuyaku Data), https://github.com/numero-uno-jpn/kyuyaku-data
あわせてライセンス名 (CC BY 4.0) を示し、改変した場合はその旨を明記してください。 - 詳細 JSON の
quote_excerpt/quote_translation_excerpt(一次資料からの引用または抜粋) は各出典の著作物で、CC BY 4.0 の対象外です。
9. 関連する API
- 静的 API (GitHub Pages):
meta.json/drugs.json/drugs/{一般名}.json/lookup.json/search-index.json - API・データ項目の仕様 (docs/api.md)
- 参照アプリの URL 検索:
https://numero-uno-jpn.github.io/kyuyaku-data/?q=アスピリン