Hoe maak je een eigen API, waardoor data die in een sheet zit, kan afgevraagd worden alsof het een db is.
Hiervoor heb je een aantal verplichte functies nodig:
doGet(request)
var query=request.parameter.q -> dit komt overeen met de url ?q=....
je mag dus zo veel parameters benoemen als je wil
Maak de toegang tot de sheet mogelijk in apps script.
We bewaren de sheet ID in een propety zodat hij later kan gebruikt worden.
/**
* activate access to sheet and save sheetId in script property "key"
*/
function Setup(){
var doc = SpreadsheetApp.getActiveSpreadsheet()
PropertiesService.getScriptProperties().setPropertie("key",doc.getId())
}
Maak de doGet() functie, waarmee je parameters die via de url worden doorgegeven, kan onderscheppen.
De parameters worden in een url achteraan toegevoegd als ?parameternaam=value
vb ?q=James
/**
* doGet(request)
*/
function doGet(request) {
var query = request.parameter.q
var parameters = 2 //2de kolom
var sheetname = "sheet1"//naam sheet waar data zit
var doc = SpreadsheetApp.openById(PropertiesService.getScriptProperties().getProperty("key"))
var sheet = doc.getSheetByName(sheetname)
var lastrow = sheet.getLastRow()
var rows = []
var range = sheet.getRange(2, 1, lastrow, parameters)
var values = range.getValues()
//vorm sheet om naar array in array
for (var row in values) {
rows.push([]) //array in array
for (var col in values[row]) {
rows[row].push(values[row][col])
}
}
if (query != null) {
var rowtoreturn = rows.filter(a => a[0] == query) //indien het o de element in de array row "a" (eerste colom) gelijk is aan de query paramater, geef dan de row terug "a"
//geeft JSON data terug met velden op basis van de query
return ContentService.createTextOutput(JSON.stringify({ "data": rowtoreturn, "error": false })).getMimeType(ContentService.MimeType.JSON)
}
//geeft JSON data terug met velden op basis van volledige sheet
return ContentService.createTextOutput(JSON.stringify({ "data": rows, "error": false })).getMimeType(ContentService.MimeType.JSON)
}
Deploy dit als een webapp, waardoor je een link krijgt die je kan gebruiken.
Standaard geef je de toegang aan iedereen en anoniem, maar je kan de toegang beperken, waardoor er ook heel wat code bij komt om de toegang te krijgen.
test de functie en de app in een site.
Je kan de doGet ook testen door een klein stukje code te gebruiken.
De request is een object, waarin een aantal properties zitten, zoals de parameters property.
Hieruit kan je de zelf gedefiniëerde parameter kiezen of toekennen.
zie oude maps video
function testdoGet(){
var request={parameters:{ q:'J Low'}}
var results = doGet(request)
}