【问题标题】:MCC Adwords Script by campaign and date按广告系列和日期划分的 MCC Adwords 脚本
【发布时间】:2015-01-29 21:57:27
【问题描述】:

大家下午好

我需要开发一个 adwords 脚本。这将是我开始着手的第一个自定义脚本。之前的所有脚本都是来自 google 的示例脚本。

我有一个 MCC 帐户,其中包含多个客户帐户。我想要一个为 MCC 中的每个帐户运行的脚本,并查询该月每一天的数据。然后我希望将其添加到谷歌电子表格中。

我已经写了一个我想要发生的例子,但需要指出如何到达那里

  1. 获取客户账户列表
  2. 选择帐户
  3. 列表项
  4. 选择一个月的第一天
  5. 列表项
  6. 生成报告创建一个谷歌文档,为每个创建一个工作表 一天
  7. 选择第二天。如果是一个月的最后一天,则停止循环
  8. 选择下一个帐户

我已经手动执行上述操作已有一段时间了,它开始变得乏味。我还发现分析中的转化在几天内都没有过滤掉,所以它回复我处理一些系统来提取数据。

如果我到达脚本正在运行的地步,那么我将安排它在当月的最后一天或下个月的第一天运行

任何帮助将不胜感激

*****更新*****

我已经开发了以下代码,但我的输出有些问题。

我期待一个谷歌电子表格 - 每个月的每一天都有一张纸 - 我在我的 mcc 中拥有的所有子帐户的所有广告系列的列表 - 与每月相关日期的每个活动相关的统计数据

我得到的是

  • 每月每一天的工作表
  • 只有第一张表填充了数据
  • 电子表格中的其余工作表仅包含列标题

    var row = 2;
    var reportMonth;
    var reportYear;
    var reportDays;
    var reportMonthName;
    
    function main() { 
      var mccAccount = AdWordsApp.currentAccount();
      var childAccounts = MccApp.accounts().get();
    
      reportMonth = getPreviousMonth();
       Logger.log("Report Month" + reportMonth);
    
      reportYear = new Date().getFullYear()
    
      if (reportMonth = 12) {
        reportYear = reportYear - 1;
      }
    
      Logger.log("Report Year" + reportYear);
    
      reportDays = daysInMonth(reportMonth,reportYear);
      Logger.log("Report Days" + reportDays);
      reportMonthName = monthNumberToName(reportMonth);
      Logger.log("Month Name" + reportMonthName);
    
      // Create a new spreadsheet (will have private access for you only).
    var reportName = "Weekly QS Report – " + reportMonthName;
    var spreadsheet = SpreadsheetApp.create(reportName);
    
      for (i=1; i < (reportDays+1);i++) {
    var reportDay;
    
    if (i < 10) {
    
    
    reportDay = "" + "0" + i;
    
    }
    else
    {
    reportDay = i;  
    }
    
    
    var reportDate = "" + reportYear + reportMonth + reportDay;
    
    
    Logger.log("Create Sheet" + reportDate);
    var sheet = spreadsheet.insertSheet()
    sheet.setName(i)
    
    // Write header row.
    sheet.getRange("A1").setValue("Account");
    sheet.getRange("B1").setValue("Campaign");
    sheet.getRange("C1").setValue("Impressions");
    sheet.getRange("D1").setValue("Clicks");
    sheet.getRange("E1").setValue("Cost");
    
    
    
    while (childAccounts.hasNext()) {
    
      var childAccount = childAccounts.next();
    
      MccApp.select(childAccount);
    
      // Select campaigns under the client account
      var campaignIterator = AdWordsApp.campaigns().get();
    
      // Write body of report.
      while (campaignIterator.hasNext()) {
    
        var campaign = campaignIterator.next();
    
        Logger.log("Report Date" + reportDate);
    
        var stats = campaign.getStatsFor(reportDate,reportDate);
    
    
        sheet.getRange("A" + row).setValue(childAccount.getName());
        sheet.getRange("B" + row).setValue(campaign.getName());
        sheet.getRange("C" + row).setValue(stats.getImpressions());
        sheet.getRange("D" + row).setValue(stats.getClicks());
        sheet.getRange("E" + row).setValue(stats.getCost()); 
    
        row ++;
      }
    }
    
      }
    
    MccApp.select(mccAccount);          
    }
    
    function getDateInfo() {
      var premonth = getPreviousMonth();
      var dayIn = daysInMonth(premonth,year);
    
    
    
    }
    
    function daysInMonth(month,year) {
        return new Date(year, month, 0).getDate();
    }
    
    function getPreviousMonth() {
        var d = new Date();
        var n = d.getMonth();
        n = n - 1;
    
      if (n = -1) {
       n = 12;
      }
      return n;
    }
    
    function monthNumberToName (monthnum) {
    
      var months = [];
     months[1] = 'january';
     months[2] = 'february';
     months[3] = 'march';
     months[4] = 'april';
     months[5] = 'may';
     months[6] = 'june';
     months[7] = 'july';
     months[8] = 'august';
     months[9] = 'september';
     months[10] = 'october';
     months[11] = 'november';
     months[12] = 'december';
    
      var myMonthName = months[monthnum];
    
      return myMonthName;
    
    };
    

任何帮助将不胜感激,在此先感谢各位

【问题讨论】:

    标签: google-ads-api


    【解决方案1】:

    如果您能展示您所做的研究(如果有的话),那就太好了。但是,我假设您具有基本的编程语言。因此,您可以查看以下链接以供参考,建立在您的知识基础上,然后在您的代码上。

    Mcc 帐户详细信息和其他操作:

    1) https://developers.google.com/adwords/scripts/docs/reference/mccapp/mccapp

    工作表操作和将项目移动到工作表:

    1)https://developers.google.com/apps-script/reference/spreadsheet/

    2)https://developers.google.com/apps-script/reference/spreadsheet/sheet

    要选择第二天,您应该使用 JavaScript Date 对象开始循环,并以合适的条件结束。

    【讨论】:

    • 感谢您的回复,碰巧我几乎可以正常工作了。我正在努力解决的一件事是如何在电子表格中创建一个新工作表。大多数人都在使用模板,但每个月的长度都不同,我的目标是让它动态
    • 忽略上面我现在找到了.insertsheet()
    • 我已经解决了上述问题,明天将发布我的工作示例。
    • 抱歉今天没时间了。我会先做这件事
    【解决方案2】:

    这是上面问题的答案,

    但是我不得不对原始设计进行一些更改

    我发现我在运行脚本时遇到了 30 超时

    然后我实现了executeinparallel来解决它

    但是由于我拥有的帐户的大小,它仍然在超时时失败

    解决方案是将返回的数据发送到另一个将其写入电子表格的函数

    我会在某个时候根据解决方案发布我的答案,但我还有一些其他紧迫的事情要处理

    请随时详细说明我的答案,因为它可能会帮助我和其他人节省一些时间

    var row = 2;
    var reportMonth;
    var reportYear;
    var reportDays;
    var reportMonthName;
    
    
    function main() {
    
      var accountSelector = MccApp.accounts()
          .withLimit(50)
          .withCondition("Impressions > 100")
          .forDateRange("LAST_MONTH")
          .orderBy("Clicks DESC");
    
      accountSelector.executeInParallel("processClientAccount", "afterProcessAllClientAccounts");
    }
    
    function processClientAccount() {
      var clientAccount = AdWordsApp.currentAccount();
    
      reportMonth = getPreviousMonth();
       Logger.log("Report Month" + reportMonth);
    
      reportYear = new Date().getFullYear();
    
      if (reportMonth = 12) {
        reportYear = reportYear - 1;
      }
    
      Logger.log("Report Year" + reportYear);
    
      reportDays = daysInMonth(reportMonth,reportYear);
      Logger.log("Report Days" + reportDays);
      reportMonthName = monthNumberToName(reportMonth);
      Logger.log("Month Name" + reportMonthName);
    
          // Create a new spreadsheet (will have private access for you only).
        var reportName = clientAccount.getName() + " Weekly QS Report – " + reportMonthName;
        var spreadsheet = SpreadsheetApp.create(reportName);
    
      for (i=1; i < (reportDays+1);i++) {
        row = 2;
    
        var reportDay;
    
        if (i < 10) {
          reportDay = "" + "0" + i;
    
        }
        else
        {
        reportDay = i;  
        }
    
    
    
        var reportDate = "" + reportYear + reportMonth + reportDay;
    
    
        Logger.log("Create Sheet" + reportDate);
        var sheet = spreadsheet.insertSheet();
        sheet.setName(i)
    
        // Write header row.
    
        row = row + 2;
          Logger.log("Writing Header Row:" + row)
        sheet.getRange("A" + row).setValue("Account");
        sheet.getRange("B" + row).setValue("Campaign");
        sheet.getRange("C" + row).setValue("Impressions");
        sheet.getRange("D" + row).setValue("Clicks");
        sheet.getRange("E" + row).setValue("Cost");
        sheet.getRange("F" + row).setValue("Average CPC");
        sheet.getRange("G" + row).setValue("CTR");
        sheet.getRange("H" + row).setValue("Avg. Pos");
        sheet.getRange("I" + row).setValue("Avg. PageView");
        sheet.getRange("J" + row).setValue("Avg. Time");
        sheet.getRange("K" + row).setValue("Conv");
        sheet.getRange("L" + row).setValue("Conv Rate");
        row ++;
    
    
    
          // Select campaigns under the client account
          var campaignIterator = AdWordsApp.campaigns().get();
    
          // Write body of report.
          while (campaignIterator.hasNext()) {
    
            var campaign = campaignIterator.next();
    
            Logger.log("Report on " + clientAccount.getName() + "," + campaign.getName() + " on " + reportDate);
    
            var stats = campaign.getStatsFor(reportDate,reportDate);
    
    
            sheet.getRange("A" + row).setValue(clientAccount.getName());
            sheet.getRange("B" + row).setValue(campaign.getName());
            sheet.getRange("C" + row).setValue(stats.getImpressions());
            sheet.getRange("D" + row).setValue(stats.getClicks());
            sheet.getRange("E" + row).setValue(stats.getCost()); 
            sheet.getRange("F" + row).setValue(stats.getAverageCpc());
            sheet.getRange("G" + row).setValue(stats.getCtr()); 
            sheet.getRange("H" + row).setValue(stats.getAveragePosition());
            sheet.getRange("I" + row).setValue(stats.getAveragePageviews());
            sheet.getRange("J" + row).setValue(stats.getAverageTimeOnSite());
            sheet.getRange("K" + row).setValue(stats.getConvertedClicks()); 
            sheet.getRange("L" + row).setValue(stats.getClickConversionRate());
    
            row ++;
          }
        }
    
    
      // optionally, return a result, as a text.
      return "";
    }
    
    function afterProcessAllClientAccounts(results) {
      for (var i = 0; i < results.length; i++) {
        var result = results[i].getReturnValue();
        // Process the result further
      }
    }
    
    
    
    function getDateInfo() {
      var premonth = getPreviousMonth();
      var dayIn = daysInMonth(premonth,year);
    
    
    
    }
    
    function daysInMonth(month,year) {
        return new Date(year, month, 0).getDate();
    }
    
    function getPreviousMonth() {
        var d = new Date();
        var n = d.getMonth();
        n = n - 1;
    
      if (n = -1) {
       n = 12;
      }
      return n;
    }
    
    function monthNumberToName (monthnum) {
    
      var months = [];
     months[1] = 'january';
     months[2] = 'february';
     months[3] = 'march';
     months[4] = 'april';
     months[5] = 'may';
     months[6] = 'june';
     months[7] = 'july';
     months[8] = 'august';
     months[9] = 'september';
     months[10] = 'october';
     months[11] = 'november';
     months[12] = 'december';
    
      var myMonthName = months[monthnum];
    
      return myMonthName;
    
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多