I want to import Data from the Snapchat API inside Google Sheets (Documentation found here: https://marketingapi.snapchat.com/docs/?shell#get-all-ad-squads-under-a-campaign).
At the moment I am doing that in an inefficient way, by plotting the results one at a time. I want, instead, to plot them using a loop, if possible.
Currently, this is my code:
function readData() {
var accesstoken = "TOKEN"
var sheet = SpreadsheetApp.getActiveSheet()
var adseturl = "https://adsapi.snapchat.com/v1/campaigns/e431cbcd-2281-49fe-8d05-b26c87660eb5/adsquads"
var adseturlresponse = UrlFetchApp.fetch(adseturl, {
headers: {
"Authorization": "Bearer " + accesstoken
}
});
var adsetdata = JSON.parse(adseturlresponse.getContentText());
var adsetname1range = sheet.getRange('C3')
var adsetname2range = sheet.getRange('C4')
var adsetname3range = sheet.getRange('C5')
var adsetname4range = sheet.getRange('C6')
var adsetname5range = sheet.getRange('C7')
var adsetname6range = sheet.getRange('C8')
var adsetname7range = sheet.getRange('C9')
var adsetname8range = sheet.getRange('C10')
var adsetname1= adsetdata.adsquads[0].adsquad.name
adsetname1range.setValue(adsetname1)
var adsetname2= adsetdata.adsquads[1].adsquad.name
adsetname2range.setValue(adsetname2)
var adsetname3= adsetdata.adsquads[2].adsquad.name
adsetname3range.setValue(adsetname3)
var adsetname4= adsetdata.adsquads[3].adsquad.name
adsetname4range.setValue(adsetname4)
var adsetname5= adsetdata.adsquads[4].adsquad.name
adsetname5range.setValue(adsetname5)
var adsetname6= adsetdata.adsquads[5].adsquad.name
adsetname6range.setValue(adsetname6)
var adsetname7= adsetdata.adsquads[6].adsquad.name
adsetname7range.setValue(adsetname7)
var adsetname8= adsetdata.adsquads[7].adsquad.name
adsetname8range.setValue(adsetname8)
}
As you can see, I am plotting my results one by one, like this:
var adsetdata = JSON.parse(adseturlresponse.getContentText());
var adsetname1range = sheet.getRange('C3')
var adsetname2range = sheet.getRange('C4')
var adsetname3range = sheet.getRange('C5')
var adsetname4range = sheet.getRange('C6')
var adsetname5range = sheet.getRange('C7')
var adsetname6range = sheet.getRange('C8')
var adsetname7range = sheet.getRange('C9')
var adsetname8range = sheet.getRange('C10')
var adsetname1= adsetdata.adsquads[0].adsquad.name
adsetname1range.setValue(adsetname1)
var adsetname2= adsetdata.adsquads[1].adsquad.name
adsetname2range.setValue(adsetname2)
var adsetname3= adsetdata.adsquads[2].adsquad.name
adsetname3range.setValue(adsetname3)
var adsetname4= adsetdata.adsquads[3].adsquad.name
adsetname4range.setValue(adsetname4)
var adsetname5= adsetdata.adsquads[4].adsquad.name
adsetname5range.setValue(adsetname5)
var adsetname6= adsetdata.adsquads[5].adsquad.name
adsetname6range.setValue(adsetname6)
var adsetname7= adsetdata.adsquads[6].adsquad.name
adsetname7range.setValue(adsetname7)
var adsetname8= adsetdata.adsquads[7].adsquad.name
adsetname8range.setValue(adsetname8)
But instead, I want to be able to loop through
adsetdata.adsquads[i].adsquad.name
Also, here my results are from "C3:C10" but the number of rows is dynamic depending on the number of results.
Thank you for your input in how I can achieve this.
>Solution :
In your script, how about the following modification?
From:
var adsetname1range = sheet.getRange('C3')
var adsetname2range = sheet.getRange('C4')
var adsetname3range = sheet.getRange('C5')
var adsetname4range = sheet.getRange('C6')
var adsetname5range = sheet.getRange('C7')
var adsetname6range = sheet.getRange('C8')
var adsetname7range = sheet.getRange('C9')
var adsetname8range = sheet.getRange('C10')
var adsetname1= adsetdata.adsquads[0].adsquad.name
adsetname1range.setValue(adsetname1)
var adsetname2= adsetdata.adsquads[1].adsquad.name
adsetname2range.setValue(adsetname2)
var adsetname3= adsetdata.adsquads[2].adsquad.name
adsetname3range.setValue(adsetname3)
var adsetname4= adsetdata.adsquads[3].adsquad.name
adsetname4range.setValue(adsetname4)
var adsetname5= adsetdata.adsquads[4].adsquad.name
adsetname5range.setValue(adsetname5)
var adsetname6= adsetdata.adsquads[5].adsquad.name
adsetname6range.setValue(adsetname6)
var adsetname7= adsetdata.adsquads[6].adsquad.name
adsetname7range.setValue(adsetname7)
var adsetname8= adsetdata.adsquads[7].adsquad.name
adsetname8range.setValue(adsetname8)
To:
var values = adsetdata.adsquads.map(({ adsquad: { name } }) => [name]);
sheet.getRange(3, 3, values.length).setValues(values);
- When this modified script is run, the values are retrieved from an aray of
adsetdata.adsquadsand put to column "C".