LANG SELRCT

コードを書く場所

2019年9月8日日曜日

GASでAPIを作ってみる(ドライブのJSONから返す)


このようなオブジェクトをJSONにしてGoogleドライブに保存しておいて
  var obj = {
    'hello': 'はろー',
    'world': 'わーるど',
    'foo': 'ふー',
    'bar': 'ばー'
  };


GASのWebアプリでhelloとfooをパラメータで渡したら、はろーとふーを返してくれるアプリ

https://script.google.com/macros/s/WebアプリのID/exec?sentence=hello foo

を作ってみる



  1. GoogleドライブにJSONファイルを保存する
  2. JSONを読み込んで返すWebアプリを作る
  3. そのアプリにアクセスしてJSONから欲しいデータを取得する


関連記事

JSONデータを作ってGoogleドライブに保存する
Google Apps Script側でAPIを用意してJSONを返したい
GASでAPIを作ってみる(ContentService)


1. GoogleドライブにJSONファイルを保存する

以下コード1.gsの「file_name」「folder_id」を設定して
save_as_json()を実行すると
指定したフォルダにcreate_data()のJSONファイルが保存され
そのファイルIDがログに出ます。


コード1.gs
/************************************
JSONファイルを作成してドライブに保存する
************************************/
function save_as_json() {
  var file_name = 'ファイル名';// 保存するJSONファイルの名前
  var folder_id = 'フォルダID';// JSONファイルを保存するGoogleドライブのフォルダID
  
  var json = create_data();
  var file_id = create_file(json, file_name, folder_id);
  Logger.log(file_id);
}

function create_data() {
  var obj = {
    'hello': 'はろー', 
    'world': 'わーるど', 
    'foo': 'ふー', 
    'bar': 'ばー'
  }; 
  var json = JSON.stringify(obj);
  return json;
}

function create_file(json, file_name, folder_id) {
  var content_type = 'application/json';
  var blob = Utilities.newBlob("", content_type, file_name);
  var file = blob.setDataFromString(json, 'UTF-8');
  var folder = DriveApp.getFolderById(folder_id);
  var created_file = folder.createFile(file);
  var file_id = created_file.getId();
  return file_id;
}


2. JSONを読み込んで返すWebアプリを作る

コード1.gsで保存したJSONのIDを
以下のコード2.gsの「jsonFileId」のJSON_IDに入れて
Webアプリをデプロイします。


コード2.gs
/************************************
JSONから一致するkeyのvalueを返す
************************************/
function doGet (e) {
  var jsonFileId = "JSON_ID";// 保存したJSONファイルのID
  
  var sentence = e.parameter.sentence;
  var json = getJSON(jsonFileId);
  var values = returnValues(json, sentence);
  return ContentService.createTextOutput(values)
  .setMimeType(ContentService.MimeType.JSON);
}

function getJSON(fileId) {
  var file = DriveApp.getFileById(fileId);
  var blob = file.getBlob();
  var json = blob.getDataAsString();
  return json;
}

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



3. そのアプリにアクセスしてJSONから欲しいデータを取得する

Webアプリをデプロイ後にそのURLにパラメータ(?sentence=hello foo)をつけてアクセスすると
JSONから一致する「はろー, ふー」が返ってくるはずです。

https://script.google.com/macros/s/WebアプリのID/exec?sentence=hello foo