標準病名マスター(第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 件のコメント:
コメントを投稿