LANG SELRCT

コードを書く場所

2019年8月30日金曜日

GASでAPIを作ってみる(ContentService)


Google Apps Script側でAPIを用意してJSONを返したい
の発展形で、アプリのURLにパラメータを渡して、一致するプロパティの値を返す仕組みを作ってみます。


APIとして値を返す側のコード

コード2.gsからパラメータを付けてコード1.gsのアプリのURLにアクセスして
コード1.gs内のobjを参照して
パラメータの文字列に一致するプロパティの値を返す


コード1.gs
function getObj() {
  var obj = {'hello': 'はろー', 'world': 'わーるど', 'foo': 'ふー', 'bar': 'ばー'}; 
  return obj;
}

function doGet(e) {
  var sentence = e.parameter.sentence;
  var obj = getObj();
  var json = JSON.stringify(obj);
  var matchValues = returnMatchValues(json, sentence);
  return ContentService.createTextOutput(matchValues)
  .setMimeType(ContentService.MimeType.JSON);
}

function returnMatchValues(json, sentence) {
  var jobj = JSON.parse(json);
  var words = sentence.split(' ');
  var matchValues = [];
  for(var i = 0; i < words.length; i++) {
    var word = words[i];
    var value = jobj[word];
    matchValues.push(value);
  }
  return matchValues;
}


APIをたたく側のコード

「hello bar」という文字列をコード1.gsのアプリのURLにパラメータで渡して
コード1.gs内のobjの一致するプロパティの値を受け取ってログに出す


コード2.gs
function getData() {
  var sentence = 'hello bar';
  var url = 'https://script.google.com/macros/s/コード1.gsをWebアプリとして導入した際のID/exec' + '?sentence=' + sentence;
  var response = UrlFetchApp.fetch(url).getContentText();
  Logger.log(response);
}


実行結果



補足
  1. コード1.gsとコード2.gsはそれぞれ新規プロジェクトで作成します
  2. コード2.gsはGASで書きましたが、ブラウザで以下のようにアクセスしても結果を得られます
    https://script.google.com/macros/s/コード1.gsのWebアプリのID/exec?sentence=hello foo