4限は、電子お薬手帳アプリに関するネット記事と、「電子化お薬手帳の使用実態と患者の意識調査」という論文を読みました。電子お薬手帳が注目されるようになったきっかけは、なんと東日本大震災なんだそうです。現在提供されているお薬手帳アプリはたくさんあり、中には様々な機能が搭載されていて非常に便利そうだと思いました。2016年時点では電子お薬手帳の普及は低いようですが、優秀なお薬手帳も次々と出ているため、これからますます需要が高まるのではないでしょうか。
これからシステムを作る上で、どんな機能が必要なのか、しっかり考えていきたいと思います。
5限は、前回の続きとして、文字列の結合を行う+演算子や改行「¥n」を使用して文字を出力する方法を試しました。
また、テキストメッセージ生成関数を作成して、文字を連結しながら送信するメッセージを作っていく演習も行いました。ここでポイントなのは「.push」です。宣言した配列にどんどん追加していくことができます。これは非常に重要ですので、覚えておきましょう!!
1月のゼミも本日で終了です。また3月から頑張っていきましょう!
完成したGASのプログラム
【プログラム1】
LINE DevelopersのWebhookに設定するプログラムは以下のとおり。これはLINE公式アカウントアプリで利用者が送信するメッセージに対応して行う処理を記述するプログラムです。メッセージはdoPost関数に送信されます。doPost関数の引数eはWebhookイベントオブジェクトで、詳細はLINE Developersのドキュメント(Webhookイベントオブジェクト)に書いてあります。
function doPost(e) {
var replyToken= JSON.parse(e.postData.contents).events[0].replyToken;
if (typeof replyToken === 'undefined') {
return;
}
var url = 'https://api.line.me/v2/bot/message/reply';
var channelToken = 'kXoJ1O・・・・・・・・・・・・・・1cDnyilFU=';
var input = JSON.parse(e.postData.contents).events[0].message;
var source = JSON.parse(e.postData.contents).events[0].source;
var messages = [];
if(input.type == 'text') {
if(input.text.match('ありがとう')) {
messages.push(createTextMessage('どういたしまして'));
}else if(input.text.match(/w34\d{5}/)){
var person = getPersonalData(input.text);
messages.push(
createTextMessage('名前:' + person.name +
'\n性別:' + person.attribute.gender +
'\n生年月日:' + person.attribute.birth
)
);
}else if(input.text.match('クリスマスの予定は?')){
messages.push(createTextMessage('まだ未定です'));
}else if(input.text.match('わたしは誰?')){
messages.push(createTextMessage(source.userId));
}else{
messages.push(createTextMessage(input.text + 'ですか?'));
}
}
UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + channelToken,
},
'method': 'post',
'payload': JSON.stringify({
'replyToken': replyToken,
'messages': messages,
}),
});
return ContentService.createTextOutput(JSON.stringify({'content': 'post ok'})).setMimeType(ContentService.MimeType.JSON);
}
function createTextMessage(text){
var message = {
'type':'text',
'text': text,
};
return message;
}
function getPersonalData(id){
var url = "https://script.google.com/macros/s/AKfycb・・・NebFh-4Q/exec";
var response = UrlFetchApp.fetch(url + '?id=' + id);
var content = JSON.parse(response.getContentText());
return content;
}
function testgetPersonalData(){
var person = getPersonalData('w3418000');
Logger.log(JSON.stringify(person,null,''));
}
【プログラム2】
上記プログラム中のgetPersonalData関数内で呼び出す(fetchする)WebAPIのプログラムは以下のとおり。このプログラムはid=w3418000といったクエリストリングス(検索文字列)をWebAPIのURLにつけて呼び出すと、該当する個人データをJSONフォーマットで返すWebサービスを実現するものです。GETメソッドでWebAPIを呼び出すとdoGet関数が呼ばれ、クエリストリング中のキーidに対する値(e.parameter.id)を使って該当する個人データを検索して返します。
var data = [
{
"id":"w3418000",
"name":"〇× △■▽",
"attribute":{
"gender":"男",
"phone_number":"086-999-0000",
"birth":"1999/12/31",
"blood_type":"O"
},
"certification":[
"ITパスポート試験",
"医療情報技師能力認定試験",
"診療報酬請求事務能力認定試験",
"医科医療事務管理士技能認定試験",
"普通自動車第一種運転免許"
],
"hobby":[
"クイズ",
"イラスト作成",
"スポーツ鑑賞"
],
"club":[
"登山部"
]
},
{
"id":"w3418111",
"name":"▽□ ●×",
"attribute":{
"gender":"女",
"phone_number":"123-456-7890",
"birth":"1999/01/01",
"blood_type":"A"
},
"certification":[
"医療情報基礎知識検定",
],
"hobby":[
"映画を観ること",
"食べること"
],
"club":[
"ラクロス部"
],
"favoritefood":[
"うどん",
"枝豆"
]
},
{
"id":"w3418777",
"name":"□▽ ×△",
"attribute":{
"gender":"男",
"phone_namber":"090-5678-4321",
"birth":"1999/05/05",
"blood_type":"A",
},
"certification":[
"医療情報技師能力検定試験",
"診療報酬請求事務能力認定試験",
"医科医療事務管理士技能認定試験",
"基礎知識検定",
"普通自動車第一種運転免許",
],
"hobby":[
"美術鑑賞",
"野球観戦",
"料理番組の録画",
"株式投資",
],
"club":[
"卓球部",
]
},
{
"id":"w3418999",
"name":"●□ △×▼",
"attribute":{
"gender":"女",
"phone_number":"080-888-5555",
"birth":"2000/03/03",
"blood_type":"O",
},
"certification":[
"実用数学技能検定準二級",
"普通自動車第一種運転免許",
],
"hobby":[
"犬とダンスすること",
"楽しいことを想像する",
"走る"
]
}
]
/** idを指定して個人データを取得する関数 */
function getPersonByld(id){
var person = null;
for(var i=0; i<data.length; i++){
if(id == data[i].id){
person = data[i];
break;
}
}
return person;
}
/** getPersonByldをテストする関数 */
function testGetPersonByld(){
var person = getPersonByld('w3418000');
Logger.log(JSON.stringify(person,null,''));
}
function doGet(e){
var parm = e.parameter;
var person = getPersonByld(parm.id);
return ContentService.createTextOutput(JSON.stringify(person)).setMimeType(ContentService.MimeType.JSON);
}