问题描述
我收到与我当前正在设置的Google Ads脚本有关的解析错误。不太确定为什么会收到此错误。
错误在第163行var report = AdsApp.report(query).rows()
错误消息“解析错误。请检查选择器。(文件Code.gs,第163行)”
在调试之前的内容时,我收到以下消息
查询:从CAMPAIGN_PERFORMANCE_REPORT WHERE CampaignName CONTAINS_IGnorE_CASE“ G_D” AND AdvertisingChannelType = disPLAY 20201001,20201231,20200930中选择日期和费用
任何帮助将不胜感激! :)
//Specify sheet URL
URL = 'https://docs.google.com/spreadsheets/d/1jVxD9pOeiFOS7H331dANrjOXxogIba_u0gIgigHly-w/edit#gid=0'
//Specify the email for notifications
EMAIL = ''
//Specify the email's subject line
EMAILSUBJECT = ''
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//
function getLabelId(name)
{
return AdWordsApp.labels().withCondition('LabelName = ' + '"' + name + '"').get().next().getId()
}
function getSettings(sheet,tabName,headerRange,valuesRange,stopEmpty)
{
var tab = sheet.getSheetByName(tabName)
var header = tab.getRange(headerRange).getValues()
var values = tab.getRange(valuesRange).getValues()
var parsed = []
for(var row in values)
{
var temp = {}
for(var value in values[row])
{
var field = header[0][value]
if( values[row][value] == '')
{
temp[field] = ''
}
else
{
if(field == 'Campaign')
{
temp[field] = values[row][value][0] != '-' ? 'CampaignName CONTAINS_IGnorE_CASE ' + '"'+values[row][value]+'"' : 'CampaignName DOES_NOT_CONTAIN_IGnorE_CASE ' + '"'+values[row][value].slice(1,values[row][value].length+'"')
}
else if(field == 'Label')
{
temp[field] = values[row][value][0] != '-' ? 'LabelIds CONTAINS_ANY ' + '[' + getLabelId(values[row][value]) + ']' : 'LabelIds CONTAINS_NONE ' + '[' + getLabelId(values[row][value].slice(1,values[row][value].length)) + ']'
}
else if(field == 'Channel')
{
temp[field] = values[row][value][0] != '-' ? 'AdvertisingChannelType = ' + values[row][value] : 'AdvertisingChannelType != ' + values[row][value].slice(1,values[row][value].length)
}
else if(field == 'Tab Name')
{
temp[field] = values[row][value]
}
else
{
temp[field] = values[row][value]
}
}
}
if(stopEmpty && values[row][0] == '')
{break}
parsed.push(temp)
}
return parsed
}
function createTabs(settings,budgets,sheet,days)
{
for(var setting in settings)
{
try
{
var tabName = settings[setting]['Tab Name']
sheet.insertSheet(tabName)
createGraph(sheet,settings[setting])
}
catch(e)
{
continue
}
var newTab = sheet.getSheetByName(tabName)
newTab.getRange('A1:A1').setValue(tabName)
newTab.getRange('A2:A2').setValue('Total Budget')
newTab.getRange('B2:B2').setValue(budgets[tabName])
newTab.getRange('A4:A4').setValue('Daily Budget')
newTab.getRange('A5:F5').setValues([['Daily','Predicted','Actual','Projected at Current Spend','How to meet Target','Budget']])
for(var i = 6; i <= days + 5; i++)
{
newTab.getRange('A' + i + ':' + 'A' + i).setValue(i-5)
newTab.getRange('F' + i + ':' + 'F' + i).setValue(budgets[tabName])
}
}
}
function formatDate(date)
{
return Utilities.formatDate(date,'GMT','YYYYMMdd')
}
function parseDate(sheet)
{
var oneDay = 24*60*60*1000
var userDate = sheet.getRange('B3:B3').getValue()
var yesterday = formatDate(new Date(new Date() - oneDay))
var quarters = ['20190101','20190401','20190701','20191001']
var ends = ['20190331','20190630','20190931','20191231']
if(userDate == 'Monthly')
{
return ['THIS_MONTH','THIS_MONTH']
}
else if (userDate == 'Yearly')
{
var currentYear = (new Date()).getYear()
var startDate = currentYear + '0101'
return [startDate + ',' + yesterday,startDate + ',' + currentYear + '1231']
}
else if (userDate == 'Quartely')
{
var currentMonth = (new Date()).getMonth() + 1
var currentQuarter = parseInt(currentMonth / 3)
var startDate = quarters[currentQuarter]
return [startDate + ',' + ends[currentQuarter]]
}
else
{
return [userDate + ',userDate + ',' + yesterday]
}
}
function getReport(settings,date)
{
var fields = ['Campaign','Label','Channel']
var conditions = []
for(var i in fields)
{
if(settings[fields[i]] != '')
{
conditions.push(settings[fields[i]])
}
}
var fullCondition = 'WHERE ' + conditions.join(' AND ') + ' DURING ' + date
if(conditions.length == 0)
{fullCondition = fullCondition.replace('WHERE','')}
var query = 'SELECT Date,Cost FROM CAMPAIGN_PERFORMANCE_REPORT ' + fullCondition
Logger.log('Query: '+query)
var report = AdsApp.report(query).rows()
var data = {}
var dataArray = []
var parsed = []
while(report.hasNext())
{
var row = report.next()
data[row.Date] = Object.keys(data).indexOf(row.Date) != -1 ? data[row.Date] + parseFloat(row.Cost.replace(',')) : parseFloat(row.Cost.replace(','))
}
var keys = Object.keys(data)
for(var key in keys)
{
dataArray.push([keys[key],data[keys[key]]])
}
dataArray.sort(function(a,b) {return a[0] > b[0] ? 1 : -1})
for(var i in dataArray)
{
var total = 0
for(var j = 0; j <= i; j++)
{
total = total + dataArray[j][1]
}
parsed.push([total])
}
return date != 'THIS_MONTH' ? parsed : parsed.slice(0,parsed.length - 1)
}
function putActual(sheet,settings,actuals)
{
var days = actuals.length + 5
var range = 'C6:C' + days
var tab = sheet.getSheetByName(settings['Tab Name'])
tab.getRange(range).setValues(actuals)
}
function putPredicted(sheet,actuals,days)
{
var predicted = []
var lastDay = actuals[actuals.length - 1]
var mean = lastDay/actuals.length
for(var i = 0; i < days; i++)
{
if(i < actuals.length)
{
predicted.push([parseFloat(actuals[i]).toFixed(2)])
}
else
{
var value = parseFloat(lastDay) + (mean * (i - actuals.length))
predicted.push([value.toFixed(2)])
}
}
var range = 'D6:D' + (days + 5)
sheet.getSheetByName(settings['Tab Name']).getRange(range).setValues(predicted)
}
function putPredictedInput(sheet,days,dailyBudgets)
{
var values = []
for(var i= 0; i < days; i++)
{
var total = 0
for(var j = 0; j <= i; j++)
{
total = total + dailyBudgets[j][settings['Tab Name']]
}
values.push([total.toFixed(2)])
}
var range = 'B6:B' + (days + 5)
sheet.getSheetByName(settings['Tab Name']).getRange(range).setValues(values)
}
function putHowToMeet(sheet,days)
{
var values = []
for(var i = 0; i < days; i++)
{
if(i < actuals.length)
{
values.push([parseFloat(actuals[i]).toFixed(2)])
}
else
{
var formula = '=round(E' + (i+5) + '+(($B$2-$E$' + (actuals.length+5) + ')/($A$' + (days+5) + '-$A$' + (actuals.length+5) + ')),2)'
values.push([formula])
}
}
var range = 'E6:E' + (days + 5)
sheet.getSheetByName(settings['Tab Name']).getRange(range).setValues(values)
}
function createGraph(sheet,settings)
{
var tab = sheet.getSheetByName(settings['Tab Name'])
var yAxis1 = tab.getRange('B5:B1000')
var yAxis2 = tab.getRange('D5:F1000')
var chart = tab.newChart().asLineChart()
.addRange(yAxis1)
.addRange(yAxis2)
.setPosition(8,8,1,1)
.setNumHeaders(1)
.setoption('height',510)
.setoption('width',825)
.setoption('legend',{'position':'top'})
.build()
tab.insertChart(chart)
}
function getDifference(date)
{
if(date == 'THIS_MONTH')
{
var Now = new Date();
var firstDay = new Date(Now.getFullYear(),Now.getMonth(),1);
var lastDay = new Date(Now.getFullYear(),Now.getMonth() + 1,0);
}
else
{
var day_1 = date.slice(6,8)
var month_1 = date.slice(4,6)
var year_1 = date.slice(0,4)
var day_2 = date.slice(15,17)
var month_2 = date.slice(13,15)
var year_2 = date.slice(9,13)
var firstDay = new Date(year_1,month_1,day_1);
var lastDay = new Date(year_2,month_2,day_2);
}
var timeDiff = Math.abs(firstDay.getTime() - lastDay.getTime());
return Math.ceil(timeDiff / (1000 * 3600 * 24)) + 1;
}
function main()
{
var sheet = SpreadsheetApp.openByUrl(URL)
var settings = getSettings(sheet,'Inputs','B5:E5','B6:E',true)
var dailyBudgets = getSettings(sheet,'Daily budget inputs','B3:E3','B7:E',true)
var periodLength = dailyBudgets.length
var date = parseDate(sheet)[0]
var difference = getDifference(parseDate(sheet)[1])
if(difference != dailyBudgets.length)
{
Logger.log('Wrong number of days in the Daily budget inputs tab')
Logger.log('Input: ' + dailyBudgets.length +' days')
Logger.log('Specified time range: ' + difference +' days')
return
}
var accountName = AdWordsApp.currentAccount().getName()
var budgets = getSettings(sheet,'B4:E4',true)
var body = 'Budget summary for '+ accountName + ',% of budget spent: \n\n'
Logger.log('Creating tabs')
for(var budget in budgets)
{
createTabs(settings,budgets[budget],periodLength)
}
for(var setting in settings)
{
var single = settings[setting]
var actuals = getReport(single,date)
Logger.log('Processing ' + single['Tab Name'])
putActual(sheet,single,actuals)
putPredicted(sheet,periodLength)
putPredictedInput(sheet,periodLength,dailyBudgets)
putHowToMeet(sheet,periodLength)
var percentage = (100*(actuals[actuals.length - 1]/budgets[0][single['Tab Name']])).toFixed(2)
body = body + single['Tab Name'] + ' ' + percentage + '%\n'
}
MailApp.sendEmail(EMAIL,'',EMAILSUBJECT,body)
Logger.log('Finished')
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)