複数アカウント アクセス

複数のアカウントがある場合、または他のユーザーのアカウントを管理している場合、すべては AccountsApp オブジェクトから始まります。 AccountsApp は、アクセス権を持つアカウントの一覧を取得し、管理するアカウントを選択するために使用する最上位のオブジェクトです。 アカウントを取得して選択したら、 AdsApp オブジェクトを使用してアカウントのエンティティにアクセスするように切り替えます。

注:

マルチアカウント スクリプトの場合は、Microsoft 広告 Web アプリケーションの [アカウントの概要 ] からアクセスするスクリプト エディターを使用します。 UI に [アカウントの概要 ] が表示されない場合は、マルチアカウント スクリプト エディターを使用しません。

[アカウントの概要] から [スクリプト] エディターにアクセスするには、左側のウィンドウの [一括操作] をクリックします。 次に、[ スクリプト] で [ スクリプトの作成と管理] をクリックします。

アクセスできるアカウントを一覧表示する

アクセスできるすべてのアカウントを一覧表示するには、 accounts メソッドを呼び出します。 このメソッドは、アカウントのリストをフィルター処理するために使用できる BingAdsAccountSelector オブジェクトを返します。 セレクターを使用してリストをフィルター処理する方法の詳細については、「 セレクターの使用」を参照してください。

次の例では、アクセスできるすべてのアカウントが返されます。

function main() {
    var accounts = AccountsApp.accounts()
        .get();

    while (accounts.hasNext()) {
        var account = accounts.next();

        Logger.log(`Account ID: ${account.getAccountId()}
            Account name: ${account.getName()}
            Account number: ${account.getAccountNumber()}
            Customer ID: ${account.getCustomerId()}
            Currency code: ${account.getCurrencyCode()}
            Time zone: ${account.getTimeZone()}\n\n`);
    }
}

アカウントごとに関数を並列に実行する

複数のアカウントで並列で作業を実行するには、 セレクターのexecuteInParallel() メソッドを呼び出します。 呼び出すことができる executeInParallel() メソッドを次に示します。

  • executeInParallel(string functionName, string optionalCallbackFunctionName)

    セレクターが返す各アカウントに対して Scripts が呼び出す関数の名前を指定します。 この関数は、値を文字列として返す場合があります。 複合オブジェクトを返すには、JSON.stringify メソッドを使用してオブジェクトを文字列に変換します。 その後、JSON.parse メソッドを使用して文字列をオブジェクトに変換し直すことができます。

    関数が値を返す場合は、コールバック関数を指定して戻り値をキャプチャする必要があります。 選択したすべてのアカウントに対して関数が実行されると、スクリプトはオプションのコールバック関数を呼び出します。 戻り値は、 ExecutionResult オブジェクトの配列として渡されます。

  • executeInParallel(string functionName, string optionalCallbackFunctionName, string optionalInput)

    セレクターが返す各アカウントに対して Scripts が呼び出す関数の名前を指定します。 スクリプトが関数に渡すオプションの入力文字列を指定できます。 複合オブジェクトを渡すには、JSON.stringify メソッドを使用してオブジェクトを文字列に変換します。 その後、関数内で JSON.parse メソッドを使用して、文字列をオブジェクトに変換し直すことができます。

    この関数は、値を文字列として返す場合があります。 複合オブジェクトを返すには、JSON.stringify メソッドを使用してオブジェクトを文字列に変換します。 その後、JSON.parse メソッドを使用して文字列をオブジェクトに変換し直すことができます。

    関数が値を返す場合は、コールバック関数を指定して戻り値をキャプチャする必要があります。 選択したすべてのアカウントに対して関数が実行されると、スクリプトはオプションのコールバック関数を呼び出します。 戻り値は、 ExecutionResult オブジェクトの配列として渡されます。

アカウント数は 50 に制限する必要があります。そうしないと、セレクターが 50 を超えるアカウントを返した場合、呼び出しは失敗します。 アカウント数を制限するには、 withLimit()、 withIds()、および withAccountNumbers() メソッドを使用できます。

次の例は、先週のクリック率が 5% 未満だったアカウントごとに関数を実行する簡単な例を示しています。 この例では、 withLimit() メソッドを使用して、呼び出しが 50 アカウントの制限を超えないようにしています。

function main() {
    // Select the accounts to process.
    var accounts = AccountsApp.accounts()
        .withLimit(50) 
        .withCondition('Ctr < 0.05')
        .forDateRange('LAST_WEEK')
        .executeInParallel('bump', 'resultsHandler');
}

function bump() {
    var account = AdsApp.currentAccount();

    // Do something with the entities in the account.

    Logger.log(`Processing account: ${account.getAccountId()} (${account.getName()})`);

    // Return a value that's processed by resultsHandler(). If 
    // the function returns a value, it must be a string. To return
    // a complex object, use JSON.stringify(object) to return the 
    // object as a string.

    return account.getAccountId();
}

// Handles all return values from the bump() function after the 
// function completes for all accounts.

function resultsHandler(results) {
    
    for (var result of results) {
        if (result.getStatus() === 'OK') {
            value = result.getReturnValue();
        }
    }
}

スクリプトが処理するアカウントの変更

処理するアカウントを選択するまで、 AdsApp メソッドを呼び出してアカウントのエンティティ データを取得することはできません。 アカウントを選択するには、AccountsApp の選択メソッドを使用します 。

ただし、最初に アカウント メソッドを呼び出して、処理するアカウントを選択する必要があります。 accounts() を使用してアカウントのリストをフィルタリングする方法については、「アクセスできるアカウントを一覧表示する」を参照してください。

アカウントを取得したら、 select() メソッドを呼び出して、アカウントを現在のアカウントにします。 次の例は、このプロセスを示しています。

function main() {
    // This call logs null. Before using any
    // of the AdsApp methods, you must first
    // select an account to process.

    Logger.log(AdsApp.currentAccount());

    // Select the accounts to process

    var accounts = AccountsApp.accounts()
        .withIds(['123', '456', '789'])
        .get();

    while (accounts.hasNext()) {
        AccountsApp.select(accounts.next());

        // AdsApp is now set to the current account.
        // Do something with the account's entities.
    }
}