MCC 脚本

借助于 AdWords 脚本中的 MccApp 类,您可以在我的客户中心帐户下管理关联帐户。您可以通过单个脚本管理所有的广告客户帐户,从而无需为每个帐户分别创建脚本。这类脚本的一个常见用法是在 MCC 级别生成报告;请访问我们的解决方案中心查看其他 MCC 使用情形示例。

检索帐户列表

您可以使用 accounts 方法检索 MCC 下的所有帐户(除了 AdWords Express 帐户之外),例如

var accountSelector = MccApp.accounts()
    .withCondition("Impressions > 100")
    .forDateRange("LAST_MONTH")
    .orderBy("Clicks DESC");

var accountIterator = accountSelector.get();

默认情况下,帐户调用将检索 MCC 层级下的所有客户帐户。您可以使用 ManagedAccountSelector 类的 withLimit 方法来限制脚本检索的帐户数量。另一种选择是使用 withIds 方法按客户 ID 来选择帐户,如下所示:

var accountSelector = MccApp.accounts()
    .withIds(['918-501-8835', '320-368-4437', '925-591-3280']);

处理客户帐户

检索客户帐户后,就可以使用 ManagedAccountIteratorhasNextnext 方法来遍历它们。您需要使用 select 方法将执行环境切换到某个客户帐户。选定客户帐户后,任何进一步的 API 调用都将应用于该客户帐户,直到您明确选择另一个帐户。例如:

// Keep track of the MCC account for future reference.
var mccAccount = AdWordsApp.currentAccount();

// Select your accounts
...

// Iterate through the list of accounts
while (accountIterator.hasNext()) {
  var account = accountIterator.next();

  // Select the client account.
  MccApp.select(account);

  // Select campaigns under the client account
  var campaignIterator = AdWordsApp.campaigns().get();

  // Operate on client account
  ...
}

// Switch back to MCC account
MccApp.select(mccAccount);

同时处理多个帐户

AdWords 脚本可同时在多个客户帐户上运行,只需使用 ManagedAccountSelector 类的 executeInParallel 方法即可。executeInParallel 方法具有以下签名:

function executeInParallel(functionName, optionalCallbackFunctionName, optionalInput);

executeInParallel 方法针对 ManagedAccountSelector 所匹配的每个 ManagedAccount 执行由 functionName 指定的函数。在处理完所有帐户后,会执行一次回调函数(如果由 optionalCallbackFunctionName 指定),将一个包含所有响应对象的数组作为参数传递,用于进一步的处理。典型用法如下所示:

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();

  // Process your client account here.
  ...

  // 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
    …
  }
}

functionName 指定的函数可以选择接受一个字符串参数 (optionalInput)。该参数可以用来将一个额外的参数传递到被 executeInParallel 方法调用的所有并行方法。例如

function main() {
  var accountSelector = MccApp.accounts().withIds([1234567890, 3456787890]);
  var sharedParameter = "INSERT_SHARED_PARAMETER_HERE";
  accountSelector.executeInParallel("processClientAccount", null, sharedParameter);
}

function processClientAccount(sharedParameter) {
  // Process your client account here.
  ...
}

如果您想传递一个包含帐户设置信息的 JavaScript 配置对象,可以使用 JSON.stringify 方法将该对象转换成一个字符串,例如

function main() {
  ...
  var accountFlags = {
    '1234567890': {
       'label': 'Brand 1 campaigns',
     },
    '3456787890': {
       'label': 'Brand 2 campaigns',
     }
  };
  accountSelector.executeInParallel("processClientAccount", null,
      JSON.stringify(accountFlags));
  ...
}

function processClientAccount(sharedParameter) {
  var accountFlags = JSON.parse(sharedParameter);
  // Process your client account here.
  ...
}

functionName 指定的函数也可以选择返回一个字符串。如果您想返回一个 JavaScript 对象,可以使用 JSON.stringify 方法将其转换成字符串,例如

function processClientAccount() {
  ...
  var jsonObj = {value: 10, list: [1,2,3,4,5,6], name: "Joe Smith"};
  return JSON.stringify(jsonObj);
}

返回的值将以 ExecutionResult 对象列表的形式传递到回调函数中。如果从函数中返回的是 JSON 字符串,您可以使用 JSON.parse 方法将其转换回 JavaScript 对象。

function callbackFunctionName(results) {
  for (var i = 0; i < results.length; i++) {
    var resultObj = JSON.parse(results[i].getReturnValue());
  }
}

executeInParallel 方法最多可在 50 个 accounts 上操作,因此您必须对脚本所能检索的帐户数量进行限制。您可以使用 ManagedAccountSelector 类的 withLimitwithIds 方法来限制脚本检索的帐户数量。

执行时间限制

请参阅此页了解有关 MCC 执行时间限制的详细信息。

发送以下问题的反馈:

此网页
AdWords Scripts
AdWords Scripts
需要帮助?请访问我们的支持页面