Edited at

GASでJSONを返すAPIを作る

More than 1 year has passed since last update.


目的/ゴール

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$