解析错误请检查您的选择器AWQL

问题描述

我收到与我当前正在设置的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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...