Google Apps Script

GASエディタの開き方

1. ログインして下記URLにアクセス
https://script.google.com
2. GoogleDriveから[新規]→[その他]→[Google App Script]

GASでWebAPIの作り方

 1. 「今から10分ではじめる Google Apps Script(GAS) で Web API公開」にしたがってWebAPIを作成する。
https://qiita.com/riversun/items/c924cfe70e16ee3fe3ba 
2. 「GASでwebアプリの作成とパラメータの確認方法(doGet、doPost)」ではPOSTメソッドの作り方の説明がある。
https://breezegroup.co.jp/201906/gas-get/ 
要約すると,POSTメソッドもGETメソッドと作り方は同じ
データはe.parameterで受け取る
例) e.parameter: {name=白い巨匠, hobby=カラオケ} 
下記はPOSTメソッドの受け渡しデータの例(webapi_sample03)
例)http://172.16.108.7/~mtanaka/googleappscript/doPost.html 
{
    "e": {
        "parameter": {
            "text": "こんにちは"
        },
        "contextPath": "",
        "contentLength": 50,
        "queryString": "",
        "parameters": {
            "text": [
                "こんにちは"
            ]
        },
        "postData": {
            "type": "application/x-www-form-urlencoded",
            "length": 50,
            "contents": "text=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF",
            "name": "postData"
        }
    }
}
下記はGETメソッドの受け渡しデータの例(webapi_sample03)
{
    "e": {
        "parameter": {
            "text": "Hello"
        },
        "contextPath": "",
        "contentLength": -1,
        "queryString": "text=Hello",
        "parameters": {
            "text": [
                "Hello"
            ]
        }
    },
    "parameter": {
        "text": "Hello"
    }
}

テスト用サイト 

http://172.16.108.7/~mtanaka/googleappscript/ 

CalendarApp 

http://google-apps-script.net/instructions/?p=249 

■イベントの作成

下記の関数はイベントの作成と色の設定を行っている。
function createEvents() {
  var calendar = CalendarApp.getDefaultCalendar();
  var title = '夜のお薬の時間です';
  var startTime = new Date();
  var endTime = new Date();
  endTime.setMinutes(endTime.getMinutes() + 30);
  
  var option = {
    description: 'クラビット細粒10% 100mg',
    location: '医療法人 オルカ医院'
  }
  
  // イベントを登録
  var event = calendar.createEvent(title, startTime, endTime, option);

  // 色を設定(赤色) 色は数字で指定する
  event.setColor(11);

  // idを取得
  var id = event.getId();

  // idを保存
  var properties = PropertiesService.getScriptProperties();
  properties.setProperty("id", id);

}
下記の関数はイベントの色を更新している
function setEventColor() {
  // イベントidを取得
  var properties = PropertiesService.getScriptProperties();
  var id = properties.getProperty("id");
  Logger.log(id);

  // 色を設定
  var event = CalendarApp.getEventById(id);
  event.setColor(10);
}

WebAPIテストプログラム 

1.イベント登録(Formバージョン)
 HTML:http://172.16.108.250/~mtanaka/googleappscript/createEvent.html
 GAS:webapi_googleCal_createEvent
 URL(POST):https://script.google.com/macros/s/AKfycbx-mSe7................wbw7OW0y/exec
//
// Google calendarにイベントを登録する
//

// https://script.google.com/macros/s/AKfycbx-mSe7................wbw7OW0y/exec

function doPost(e) {

  var parameter = e.parameter;
  
  var eventData = {
    'title': parameter.title,
    'description': parameter.description,
    'location': parameter.location,
    'color': parameter.color,
  }
  
  var id = createEvents(eventData);
  Logger.log('id=' + id);
  
  var result = {
    'id': id
  }
  
  var out = ContentService.createTextOutput();
  
  responseText = JSON.stringify(result);
  
  //Mime Typeをapplication/jsonに設定
  out.setMimeType(ContentService.MimeType.JSON);
  
  //JSONPテキストをセットする
  out.setContent(responseText);
  
  return out;
}

// イベントの作成
function createEvents(eventData) {
  Logger.log('eventData=' + JSON.stringify(eventData));
  var calendar = CalendarApp.getDefaultCalendar();
  var title = eventData.title;
  var startTime = new Date();
  var endTime = new Date();
  endTime.setMinutes(endTime.getMinutes() + 30);
  
  var option = {
    description: eventData.description,
    location: eventData.location
  }
  
  // イベントを登録
  var event = calendar.createEvent(title, startTime, endTime, option);

  // 色を設定(赤色)
  event.setColor(eventData.color);

  // idを取得
  var id = event.getId();

  return id;
}

function testCreateEvent() {

    var eventData = {
        'title': '朝のお薬の時間です',
        'description': 'クラビット細粒10% 100mg 3錠',
        'location': '医療法人 川崎病院',
        'color': 11,
    }
    var id = createEvents(eventData);
    Logger.log('id=' + id);
}

2.当日のイベント取得(jQueryバージョン)
 HTML:http://172.16.108.250/~mtanaka/googleappscript/getEventsForDay.html
 GAS:webapi_googleCal_getEventsForDay
 URL(GET):https://script.google.com/macros/s/AKfycbx9k....................ft27MA/exec
//
// Google calendarからイベントを取得する
// e.parameter.id ==null の場合は当日の全てのイベントを取得
// e.parameter.id !=null の場合は指定したidのイベントを取得
//

// https://script.google.com/macros/s/AKfycbx9k....................ft27MA/exec

function doGet(e) {

  var parameter = e.parameter;

  var eventData;
  
  // parameter.idが設定されていたらそのidのイベントを取得
  if(parameter.id) {
    eventData = getEventById(parameter.id);
  } else {
    // そうでなければその日の全てのイベントを取得
    eventData = getEventsForDay();
  }

  responseText = JSON.stringify(eventData);
  Logger.log('responseText=' + responseText);
  
  var out = ContentService.createTextOutput();

//Mime Typeをapplication/jsonに設定
  out.setMimeType(ContentService.MimeType.JSON);
  
  //JSONPテキストをセットする
  out.setContent(responseText);
  
  return out;
}

//当日の予定をすべて取得して返す
function getEventsForDay() {
  var date = new Date();
  var options = {
    'search': 'お薬',
  };
  var events = CalendarApp.getEventsForDay(date, options);
  var eventData = [];
  events.forEach(function(event){
    var data = {
      'title': event.getTitle(),
      'description': event.getDescription(),
      'id': event.getId(),
      'location': event.getLocation(),
      'startTime': event.getStartTime(),
      'endTime': event.getEndTime(),
      'color': event.getColor(),
    }
    eventData.push(data);
    Logger.log(JSON.stringify(data, null, ' '));
  });
  return eventData;
}

//指定されたidのイベントを取得して返す
function getEventById(id) {
  var event = CalendarApp.getEventById(id);
  var eventData = {
    'title': event.getTitle(),
    'description': event.getDescription(),
    'id': event.getId(),
    'location': event.getLocation(),
    'startTime': event.getStartTime(),
    'endTime': event.getEndTime(),
    'color': event.getColor(),
  }
  return eventData;
}
[
    {
        "title": "朝のお薬の時間です",
        "description": "クラビット細粒10% 100mg 3錠",
        "id": "t4s1bi3v05bhvcjp41rr89qulg@google.com",
        "location": "医療法人 川崎病院",
        "startTime": "2019-08-03T00:31:51.000Z",
        "endTime": "2019-08-03T01:01:51.000Z",
        "color": "11"
    },
    {
        "title": "夜のお薬の時間です",
        "description": "クラビット細粒10% 100mg",
        "id": "v84ho65ceseoja7257s1moj1o8@google.com",
        "location": "医療法人 オルカ医院",
        "startTime": "2019-08-03T09:00:00.000Z",
        "endTime": "2019-08-03T09:30:00.000Z",
        "color": "11"
    }
]
3.イベント登録(jQueryバージョン)
 HTML:http://172.16.108.250/~mtanaka/googleappscript/createEventByjQuery.html
 GAS:webapi_googleCal_createEvent
 URL(POST):https://script.google.com/macros/s/AKfycbx-mSe....................bw7OW0y/exec
//
// Google calendarにイベントを登録する
//

// https://script.google.com/macros/s/AKfycbx-mSe....................bw7OW0y/exec

function doPost(e) {

  var parameter = e.parameter;
  
  var eventData = {
    'title': parameter.title,
    'description': parameter.description,
    'location': parameter.location,
    'color': parameter.color,
  }
  
  var id = createEvents(eventData);
  Logger.log('id=' + id);
  
  var result = {
    'id': id
  }
  
  var out = ContentService.createTextOutput();
  
  responseText = JSON.stringify(result);
  
  //Mime Typeをapplication/jsonに設定
  out.setMimeType(ContentService.MimeType.JSON);
  
  //JSONPテキストをセットする
  out.setContent(responseText);
  
  return out;
}

// イベントの作成
function createEvents(eventData) {
  Logger.log('eventData=' + JSON.stringify(eventData));
  var calendar = CalendarApp.getDefaultCalendar();
  var title = eventData.title;
  var startTime = new Date();
  var endTime = new Date();
  endTime.setMinutes(endTime.getMinutes() + 30);
  
  var option = {
    description: eventData.description,
    location: eventData.location
  }
  
  // イベントを登録
  var event = calendar.createEvent(title, startTime, endTime, option);

  // 色を設定(赤色)
  event.setColor(eventData.color);

  // idを取得
  var id = event.getId();

  return id;
}

function testCreateEvent() {

    var eventData = {
        'title': '朝のお薬の時間です',
        'description': 'クラビット細粒10% 100mg 3錠',
        'location': '医療法人 川崎病院',
        'color': 11,
    }
    var id = createEvents(eventData);
    Logger.log('id=' + id);
}

0 件のコメント:

コメントを投稿