LoginSignup
70
71

More than 5 years have passed since last update.

GASでJSONを返すAPIを作る

Last updated at Posted at 2017-12-23

目的/ゴール

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 = [SpreadsheetのID]
  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$ 
70
71
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
70
71