アド マネージャーのスクリプト

AdsManagerApp クラスを使用すると、リンク先のアカウントを マネージャー アカウント。アカウントごとに個別のスクリプトを作成する代わりに、1 つのスクリプトですべての広告主アカウントを管理できます。

アカウントのリストを取得する

MCC アカウントのアカウントを取得するには、 accounts たとえば次のようにします。

const accountSelector = AdsManagerApp.accounts()
    .withCondition('customer_client.descriptive_name = "My Account"');

const accountIterator = accountSelector.get();

取得できるアカウントには次のような制限があります。

  • 階層が複数階層ある場合、MCC アカウントを取得することはできません。選択できるのはクライアント アカウントのみです。
  • デフォルトでは、閉鎖されたアカウント、キャンセルされたアカウント、停止中のアカウントは返されません。この動作をオーバーライドするには、customer_client.status に別のフィルタを指定して withCondition を呼び出します。

accounts を呼び出すと、 デフォルトで MCC アカウント階層が使用されます。ManagedAccountSelector クラスの withLimit メソッドを使用すると、スクリプトが取得するアカウントの数を制限できます。その他 オプションとして、 withIds メソッド:

// Hyphens in the account ID are optional.
const accountSelector = AdsManagerApp.accounts()
    .withIds(['123-456-7890', '234-567-8901', '345-678-9012']);

クライアント アカウントを管理する

クライアント アカウントを取得したら、 イテレータの hasNext および next あります。実行コンテキストをクライアント アカウントに切り替えるには、select メソッドを使用する必要があります。クライアント アカウントを選択すると、別のアカウントを明示的に選択するまで、以降の API 呼び出しはクライアント アカウントに適用されます。

// Keep track of the manager account for future reference.
const managerAccount = AdsApp.currentAccount();

// Select your accounts
const accountIterator = AdsManagerApp.accounts()
// ... Write some logic here to select the accounts you want using
// withCondition or withIds

// Iterate through the list of accounts
for (const account of accountIterator) {
  // Select the client account.
  AdsManagerApp.select(account);

  // Select campaigns under the client account
  const campaignIterator = AdsApp.campaigns().get();

  // Operate on client account
  ...
}

複数のアカウントで並行して作業を行う

Google 広告スクリプトでは、ManagedAccountSelector クラスの executeInParallel メソッドを使用して、複数のクライアント アカウントを並行して操作できます。executeInParallel メソッドのシグネチャは次のとおりです。

function executeInParallel(functionName, optionalCallbackFunctionName, optionalInput);

executeInParallel メソッドは、functionName で指定された関数を実行します。 各 ManagedAccount 動作が ManagedAccountSelector 一致します。すべてのアカウントが処理されると、optionalCallbackFunctionName で指定されている場合、コールバック関数が 1 回実行され、ExecutionResult オブジェクトのリストが引数として渡され、これによりさらなる処理が行われます。一般的な使用方法は次のとおりです。

function main() {
  const accountSelector = AdsManagerApp.accounts()
      .withLimit(50)
      .withCondition('customer_client.currency_code = "USD"');

  accountSelector.executeInParallel("processClientAccount", "afterProcessAllClientAccounts");
}

function processClientAccount() {
  const clientAccount = AdsApp.currentAccount();

  // Process your client account here.
  ...

  // optionally, return a result, as text.
  return "";
}

function afterProcessAllClientAccounts(results) {
  for (const result of results) {
    // Process the result further
    ...
  }
}

functionName で指定された関数は、必要に応じて文字列引数(optionalInput)を受け入れることができます。このパラメータを使用すると、executeInParallel によって呼び出されるすべての並列メソッドに追加のパラメータを渡すことができます。

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

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

次の要素を含む JavaScript 構成オブジェクトを渡すには、 設定するには、まず JSON.stringify メソッド:

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

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

functionName で指定された関数は、JSON.stringify を介してオブジェクトではなく文字列を返すこともできます。

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

返された値は、ExecutionResult オブジェクトのリストとしてコールバック関数に渡されます。関数から JSON 文字列を返した場合は、それを JavaScript オブジェクトに再読み込みします。 JSON.parse メソッド:

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

executeInParallel メソッドは、最大 50 の accounts, そのため、独自の制限を実装して、Chronicle の 取得する必要があります。こちらの withLimit または withIds メソッド ManagedAccountSelector クラスから取得するアカウントの数を制限することもできます。

実行時間の制限

アド マネージャー スクリプトの実行時間の上限について詳しくは、こちらのページをご覧ください。