標準病名マスター(第5.05版)はnmain505(病名基本テーブル)が26,646件ある。標準病名からICDコードを検索するプログラムを作る場合を考えると、もっとも安易なプログラムはGoogleスプレッドシートいnmain505をインポートし、GASで病名からICDコードを検索する関数を作ることが思い浮かぶ。この場合、2つの問題が発生する。一つは1件の検索に数秒(2~6秒)かかる問題で、もう一つは「不明なエラーが発生しました。しばらくしてからもう一度お試しください。」という原因不明なエラーが発生する問題である。前者の問題は検索アルゴリズムの問題ではなくスプレッドシートを読み込む処理自体に時間がかかっているようだ。後者の問題は原因不明で、どうもスプレッドシートの容量(テキストデータだけで4MB)に問題があるようだ。
そこで、スプレッドシートは諦めて、以下のようなJSONデータ(辞書データ、ハッシュ、あるいは仮想配列)を作成し、これを使って病名からICDコード等を検索するWebAPIを作成する戦略をとることにした。
const nmain505 = {
"11β-水酸化酵素欠損症":{"id":"20100524","code":"QJ83","icd":"E250"},
"17α-水酸化酵素欠損症":{"id":"20100530","code":"CP8K","icd":"E250"},
"17β-ヒドロキシステロイド脱水素酵素欠損症":{"id":"20103377","code":"A1R3","icd":"Q561"},
"18-水酸化酵素欠損症":{"id":"20100527","code":"KP6Q","icd":"E250"},
・
・
・
];
これを使うとWebAPIのプログラムは次のようになる。
/**
* 標準病名マスターWebWebサービス
* 【GETメソッド】
* @input
* https://script.google.com/macros/s/{id}/exec?disease=顔面皮膚欠損創
* @output
* {"id":"20094003","code":"M86F","icd":"S018"}
*/
function doGet(e) {
const disease = nmain505[e.parameter.disease];
return ContentService.createTextOutput(JSON.stringify(disease)).setMimeType(ContentService.MimeType.JSON);
}
/**
* 【POSTメソッド】
* @input
* {'disease':'顔面皮膚欠損創'}
* @output
* {"id":"20094003","code":"M86F","icd":"S018"}
*/
function doPost(e) {
const param = JSON.parse(e.postData.getDataAsString());
const disease = nmain505[param.disease];
return ContentService.createTextOutput(JSON.stringify(disease)).setMimeType(ContentService.MimeType.JSON);
}
このようにWebAPIはGETリクエストとPOSTリクエストの2通りを準備した。下記のプログラムはこの2通りでWebAPIを呼び出すプログラムのサンプルである。
GETリクエスト
const url = 'https://script.google.com/macros/s/{id}/exec';
const response = UrlFetchApp.fetch(url + '?disease=顔面皮膚欠損創');
Logger.log(response);
POSTリクエスト
const url = 'https://script.google.com/macros/s/{id}/exec';
const data = {
"disease": "顔面皮膚欠損創",
};
var options =
{
"method" : "post",
"contentType": "application/json",
"payload" : JSON.stringify(data),
};
const response = UrlFetchApp.fetch(url, options);
Logger.log(response);
0 件のコメント:
コメントを投稿