api
GoogleAppsScript
JSON
gas
GoogleSpreadSheet

目的/ゴール

GoogleAppsScriptを利用して、SpreadSheetのデータをJSONで返すAPIを作成する

背景

Django家計簿アプリの作成にトライ中。
今はGoogleSpreadSheetで家計簿をつけているので、そのデータをDjangoでも利用したいと考えている
そこでSpreadSheetから現状のデータを取り出し、JSONで返してくれるAPIを作成したい。

GoogleAppsScriptで、単にreturn [json data]でいいのかと思ったらだめだった。どうやらContentServiceを利用する必要があるらしい
なんとかAPI-Callに成功したのでとりあえずメモ

GAS

script

function doGet(e) {
  // listデータをjsonに変換
  payload = JSON.stringify(get_kakeibo())
  // payloadをreturnするだけではだめ
  // ContentServiceを利用して、responseを作成
  ContentService.createTextOutput()
  var output = ContentService.createTextOutput();
  output.setMimeType(ContentService.MimeType.JSON);
  output.setContent(payload);
  // return response-data
  return output;
}

function get_kakeibo(){
  var id = [SpreadsheetID]
  var ss = SpreadsheetApp.openById(id)
  var sheet = ss.getSheetByName("シート名")
  var values = sheet.getRange(1, 1, 3, 10).getValues()

  var res = {}
  for(var i=0; i<10; i++){
    res[values[2][i]] = values[0][i]
  }
  Logger.log(res)
  return res  
}

設定

公開>Webアプリケーションとして導入
・CurlやWebアプリでアクセスできるようにするため、アクセスできるユーザは「全員(匿名ユーザも含む)」にする

curlで叩く

無事、APIを叩けました

# -Lオプションでリダイレクトに対応させる。jqでJSON表示
UG26:~ user$ curl -L "https://script.google.com/macros/s/AKfycbyszn8odB6D9bkL6H6fQJyA83PO3uske-I34F0bNhPsJeSlAN8/exec?method=get_kakeibo" | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   546    0   546    0     0    392      0 --:--:--  0:00:01 --:--:--   392
100   216    0   216    0     0     93      0 --:--:--  0:00:02 --:--:--   250
{
  "年月": "Now",
  "合計資産": 2198700,
  "資産運用": 864710,
  "SBI【5万+貯金】": 800000,
  "ゆうちょ【40万over】": 521254,
  "財布": 12736,
  "貯金": 86200,
  "収入": 536954,
  "現金支出": 121682,
  "カード払い": 0
}
UG26:~ user$