javascript - 引用错误: "PropertiesService" is not defined

标签 javascript google-apps-script google-ads-api

来自以下question ,我尝试在 Adwords 脚本

中使用以下部分代码
function runMe() {
  var startTime= (new Date()).getTime();

  //do some work here

  var scriptProperties = PropertiesService.getScriptProperties();
  var startRow= scriptProperties.getProperty('start_row');
  for(var ii = startRow; ii <= size; ii++) {
    var currTime = (new Date()).getTime();
    if(currTime - startTime >= MAX_RUNNING_TIME) {
      scriptProperties.setProperty("start_row", ii);
      ScriptApp.newTrigger("runMe")
               .timeBased()
               .at(new Date(currTime+REASONABLE_TIME_TO_WAIT))
               .create();
      break;
    } else {
      doSomeWork();
    }
  }

  //do some more work here

}

但是我得到了ReferenceError:“PropertiesService”未定义。 (第 170 行) 来自 google-apps-script。我该如何解决这个问题?您能告诉我它在 AdWords 中是否适合您?

已更新

这是我在考虑前一个函数的情况下构建的函数:

function adjustCPCmax() {
    //min CPC
    var minCPC = 0.50;

    var accountIterator = MccApp.accounts().get();
    var mccAccount = AdWordsApp.currentAccount();
    while(accountIterator.hasNext()) { 
        var account = accountIterator.next();
        Logger.log('============================================== ' + account.getName() + ' ====================================================')
        MccApp.select(account)

        var campaignIterator = AdWordsApp.campaigns().get();
        while (campaignIterator.hasNext()) {
            var campaign = campaignIterator.next();
            try {
                var maxCPC = getMaxCPC(account, campaign)
            }
            catch(e) {
            }

            if (maxCPC) {
                var startTime= (new Date()).getTime();

                Logger.log('The entrence worked with max CPC : ' + maxCPC + '\n')
                keywordIterator = campaign.keywords().get();
                while (keywordIterator.hasNext()) {
                    var keyword= keywordIterator.next()
                    var keywordId = Number(keyword.getId()).toPrecision()

                    Logger.log('THE NAME OF THE KEYWORDID IS ' + keywordId + '\n')

                    var report = AdWordsApp.report(
                               'SELECT Id, Criteria, CampaignName, CpcBid, FirstPageCpc, FirstPositionCpc, TopOfPageCpc, Criteria ' +
                               'FROM   KEYWORDS_PERFORMANCE_REPORT ' +
                               'WHERE ' + 
                               'Id = ' + keywordId);
                    var rows = report.rows();
                    while(rows.hasNext()) {
                        var row = rows.next();
                        var keywordIdReport = row['Id'];
                        var keywordNameReport = row['Criteria'];
                        var campaignName = row['CampaignName'];
                        var cpcBid = row['CpcBid'];
                        var firstPageCpc = row['FirstPageCpc'];
                        var firstPositionCpc = row['FirstPositionCpc'];
                        var topOfPageCpc = row['TopOfPageCpc'];

                        Logger.log('INFO')
                        Logger.log(keyword.getText())
                        Logger.log(keywordId)
                        Logger.log(keywordNameReport)
                        Logger.log(keywordIdReport + '\n')

                        if (keywordId === keywordIdReport) {

                            if (firstPositionCpc && (firstPositionCpc > 0 && firstPositionCpc <= maxCPC)) {
                                var newCPC = firstPositionCpc;
                            } else if (topOfPageCpc  && (topOfPageCpc > 0 && topOfPageCpc <= maxCPC)) {
                                var newCPC = topOfPageCpc;
                            } else if (firstPageCpc && (firstPageCpc > 0 && firstPageCpc <= maxCPC )) {
                                var newCPC = firstPageCpc;
                            } else {
                                var newCPC = minCPC;
                            }

                            Logger.log('KeywordIdReport :' + keywordIdReport)
                            Logger.log('campaignName :' + campaignName)
                            Logger.log('CPCbid :' + cpcBid)
                            Logger.log('firstPositionCpc : ' + firstPositionCpc)
                            Logger.log('topOfPageCpc : ' + topOfPageCpc)
                            Logger.log('firstPageCpc : ' + firstPageCpc)
                            Logger.log('NewCPC : ' + newCPC + '\n')

                            keyword.bidding().setCpc(newCPC)
                            break;
                        }
                    }
                    var REASONABLE_TIME_TO_WAIT = 4*6000;
                    var MAX_RUNNING_TIME = 1*6000;
                    try {
                        var scriptProperties = PropertiesService.getScriptProperties();
                    }
                    catch(e){
                        Logger.log(e)
                    }
                    var startRow= scriptProperties.getProperty('start_row');
                    for(var ii = startRow; ii <= size; ii++) {
                        var currTime = (new Date()).getTime();
                        if(currTime - startTime >= MAX_RUNNING_TIME) {
                            scriptProperties.setProperty("start_row", ii);
                            ScriptApp.newTrigger("runMe")
                                .timeBased()
                                .at(new Date(currTime+REASONABLE_TIME_TO_WAIT))
                                .create();
                            break;
                        }
                    }
                }
            }
        }
    }
    MccApp.select(mccAccount);
}

从该函数中,我可以做什么来解决这个问题?这很奇怪,因为我可以找到 documentation就这个主题而言。

最佳答案

您正在使用AdWords Script这与 Google Apps 脚本不同,尽管它们共享许多 API。 Google Apps 脚本可以访问 Properties Service ,AdWords 脚本没有。证据:AdWords 脚本引用 ( screenshot ) 不包括脚本服务中的属性服务。

您正在使用脚本属性来存储一个数字,即当前行号。另一种方法是将其存储在电子表格中,因为 AdWords 脚本可以访问电子表格服务。因此,在脚本的开头,您将拥有

var ss = SpreadsheetApp.openByUrl('...'); // url of some spreadsheet
var sheet = ss.getSheets()[0];    // first sheet in it
var cell = sheet.getRange("A1");  // storing the number in A1 cell

然后在脚本正文中替换

var startRow = scriptProperties.getProperty('start_row');

var startRow = cell.getValue() || 1;  // 1 by default 

并替换

scriptProperties.setProperty("start_row", ii);

cell.setValue(ii);

这应该可以做到。

关于javascript - 引用错误: "PropertiesService" is not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47291439/

相关文章:

facebook - Mac App Store 的转化跟踪

java - 我的 AdMob 广告未在 Android Studio 中展示

javascript - 尽管对象在数组中,indexOf 仍返回 -1 - Google 电子表格脚本中的 Javascript

javascript - ng-show 和 ng-change 不必要的延迟

javascript - 如何仅选择第一级子节点的最后一个子节点

javascript - 如何通过 IoT 提高 AWS Lambda 和 Web 应用程序之间 MQTT 消息的可靠性

javascript - 为什么我的 Google 脚本在每次执行后都会添加 3 行?

google-apps-script - 使用应用程序脚本设置文本格式(Google 文档)

soap - 如何在 Go 中进行 SOAP 调用?

javascript - 语义 UI 侧边栏内的下拉菜单