Secuencias de comandos de Ad Manager

Obtener todas las cuentas

function getAllAccounts() {   const accountIterator = AdsManagerApp.accounts().get();    for (const account of accountIterator) {     const accountName = account.getName() ? account.getName() : '--';     console.log('%s,%s,%s,%s', account.getCustomerId(), accountName,         account.getTimeZone(), account.getCurrencyCode());   } }

Obtener cuentas a partir de los ID de cliente

function getAccountsFromCustomerIds() {   // This is useful when you are reading customer IDs from an external data   // source, such as a Google Spreadsheet.    // You can also use the condition "CustomerId in ['123-456-7890',   // '345-678-9000', '890-123-6000']".   const accountIterator = AdsManagerApp.accounts()       .withIds(['123-456-7890', '345-678-9000', '890-123-6000'])       .get();    for (const account of accountIterator) {     const accountName = account.getName() ? account.getName() : '--';     console.log('%s,%s,%s,%s', account.getCustomerId(), accountName,         account.getTimeZone(), account.getCurrencyCode());   } }

Obtener cuentas según etiquetas

function getAccountsByLabel() {   // Only CONTAINS and DOES_NOT_CONTAIN operators are supported.   const accountIterator = AdsManagerApp.accounts()       .withCondition("LabelNames CONTAINS 'High spend accounts'")       .get();    for (const account of accountIterator) {     const accountName = account.getName() ? account.getName() : '--';     console.log('%s,%s,%s,%s', account.getCustomerId(), accountName,         account.getTimeZone(), account.getCurrencyCode());   } }

Actualizar varias cuentas en serie

function updateAccountsInSeries() {   // You can use this approach when you have only minimal processing to   // perform in each of your client accounts.    // Select the accounts to be processed.   const accountIterator = AdsManagerApp.accounts()       .withCondition("LabelNames CONTAINS 'Cars'")       .get();    for (const account of accountIterator) {     // Switch to the account you want to process.     AdsManagerApp.select(account);      // Retrieve all Search and Display campaigns to be paused.     const campaignIterator = AdsApp.campaigns()         .withCondition("LabelNames = 'Christmas promotion'")         .get();      for (const campaign of campaignIterator) {       console.log(`Pausing campaign ${campaign.getName()} in ` +           `account ${account.getCustomerId()}`);       campaign.pause();     }   } }

Actualizar varias cuentas de forma paralela

function updateAccountsInParallel() {   // You can use this approach when you have a large amount of processing   // to do in each of your client accounts.    // Select the accounts to be processed. You can process up to 50 accounts.   const accountSelector = AdsManagerApp.accounts()       .withCondition("LabelNames CONTAINS 'High spend accounts'")       .withLimit(50);    // Process the account in parallel. The 'processAccount' function will   // be called in the context of each account in the selector. The 'allFinished' function   // will be called in this script once processing is complete, and is optional.   accountSelector.executeInParallel('processAccount', 'allFinished'); }  /**  * Process one account at a time. This method is called by the executeInParallel  * method call in updateAccountsInParallel function for every account that  * it processes.  *  * @return {Number} the number of campaigns paused by this method.  */ function processAccount() {   // executeInParallel will automatically switch context to the account being   // processed, so all calls to AdsApp will apply to the selected account.   const campaignIterator = AdsApp.campaigns()       .withCondition("LabelNames = 'Christmas promotion'")       .get();    for (const campaign of campaignIterator) {     console.log(`Pausing campaign ${campaign.getName()} in ` +         `account ${account.getCustomerId()}`);     campaign.pause();   }   // Optional: return a string value. If you have a more complex JavaScript   // object to return from this method, use JSON.stringify(value). This value   // will be passed on to the callback method, if specified, in the   // executeInParallel method call.   return campaignIterator.totalNumEntities().toFixed(0); }  /**  * Post-process the results from processAccount. This method will be called  * once all the accounts have been processed by the executeInParallel method  * call.  *  * @param {Array.<ExecutionResult>} results An array of ExecutionResult objects,  * one for each account that was processed by the executeInParallel method.  */ function allFinished(results) {   for (const result of results) {     console.log(`Customer ID: ${result.getCustomerId}; ` +         `status = ${result.getStatus}.`);      // Check the execution status. This can be one of ERROR, OK, or TIMEOUT.     if (result.getStatus() == 'ERROR') {       console.log(`-- Failed with error: '${result.getError()}'.`);     } else if (result.getStatus() == 'OK') {       // This is the value you returned from processAccount method. If you       // used JSON.stringify(value) in processAccount, you can use       // JSON.parse(text) to reconstruct the JavaScript object.       const retval = result.getReturnValue();       console.log(`--Processed ${retval} campaigns.`);     } else {       // Handle timeouts here.     }   } }