用于管理关键字的脚本示例

以下部分显示了针对关键字执行各种操作的脚本示例。

添加关键字

若要添加关键字 (keyword) ,请先获取要添加关键字 (keyword) 的广告组。 使用 AdGroupSelector 对象选择广告组。 withIds与在 方法中withCondition传递广告组的名称相比,使用 方法可提供更好的性能。

接下来,调用广告组的 newKeywordBuilder 方法以获取用于指定关键字 (keyword) 属性的生成器。 必须指定的唯一属性是关键字 (keyword) 的文本 (查看withText方法) 。 文本应包含短语匹配类型的匹配类型 (引号,完全匹配类型的方括号,广泛匹配类型) 不包含任何内容。

如果未指定 CPC 值,则默认为广告组的 CPC 值。 默认情况下,启用关键字 (keyword) 的状态。

调用生成器的 build 方法会异步创建关键字 (keyword) ;脚本在脚本终止之前或调用生成操作的方法之一时添加关键字 (keyword) 。 有关此过程的信息,请参阅 什么是生成器?

function main() {
    // The ID of the ad group to add the keywords to.
    // IDs in Scripts are string integers.
    var adGroupId = 'AD GROUP ID GOES HERE';  
    var adGroup = getAdGroup(adGroupId);

    // Keywords to add. Update as appropriate.
    var keywords = [];
    keywords.push({
        text : "keyword 1",
        cpc : 1.25,
        finalUrl : 'http://www.example.com'
    });
    keywords.push({
        text : "keyword 2",
        cpc : 1.5,
        finalUrl : 'http://www.example.com'
    });

    var operations = [];

    if (adGroup != null)
    {
        for (var keyword of keywords) {
            var operation = addKeyword(
                adGroup, 
                keyword.text, 
                keyword.cpc, 
                keyword.finalUrl);
            operations.push(operation);
        }
    }
    else {
        Logger.log("Unable to retrieve ad group, " + adGroupId);
    }

    checkBuildStatus(operations, keywords);
}

// Get the ad group using its ID.
function getAdGroup(id) {
    var iterator = AdsApp.adGroups()
        .withIds([id])
        .get();

    // Return the ad group if it exists; otherwise, null.
    if (iterator.hasNext()) {
        return iterator.next();
    }
    else {
        return null;
    }
}

// Add the keyword to the specified ad group.
function addKeyword(adGroup, text, cpc, finalUrl) {

    return adGroup.newKeywordBuilder()
        .withText(text)
        .withCpc(cpc)
        .withFinalUrl(finalUrl)
        .build();
}

// Check the keyword's build status.
function checkBuildStatus(operations, keywords) {

    for (var i = 0; i < operations.length; i++) {
        if (!operations[i].isSuccessful()) {
            for (var error of operations[i].getErrors()) {
                Logger.log(`Failed to add, ${keywords[i].text}. Error: ${error}`);
            }
        }
    }
}

暂停关键字 (keyword)

添加关键字 (keyword) 时,其状态默认为“已启用”。 若要暂停关键字 (keyword) ,请调用 关键字 (keyword) 的 pause 方法。 若要确定关键字 (keyword) 的状态,请调用关键字的 isEnabledisPaused 方法。

function main() {
    var campaignName = 'CAMPAIGN NAME GOES HERE';
    var adGroupName = 'AD GROUP NAME GOES HERE';
    var keywordText = 'KEYWORD TEXT GOES HERE';

    var iterator = AdsApp.keywords()
        .withCondition(`Text = '${keywordText}'`)
        .withCondition(`AdGroupName = '${adGroupName}'`)
        .withCondition(`CampaignName = '${campaignName}'`)
        .get();

    while (iterator.hasNext()) {
        var keyword = iterator.next();
        keyword.pause();
    }
}

获取广告组中的所有关键字

若要获取广告组中的所有关键字,请首先调用 AdsApp 对象的 keywords 方法来获取 选择器withCondition使用 方法指定广告组和市场活动。 然后,调用选择器的 get 方法以获取用于循环访问关键字列表的 迭代器 。 若要确定迭代器中的关键字数,请调用迭代器的 totalNumEntities 方法。

如果有权访问关键字 (keyword) ID,请改用它们。 使用 ID 获取实体可提供更好的性能。 使用 方法,而不是使用withConditionwithIds筛选器方法。 例如,withIds(['12345'])。 可以使用 ID 检索的实体数有限制。

function main() {
    var campaignName = 'CAMPAIGN NAME GOES HERE';
    var adGroupName = 'AD GROUP NAME GOES HERE';

    var iterator = AdsApp.keywords()
        .withCondition(`AdGroupName = '${adGroupName}'`)
        .withCondition(`CampaignName = '${campaignName}'`)
        .get();
        
    while (iterator.hasNext()) {
        var keyword = iterator.next();
    }
}

获取帐户中的所有关键字

脚本可以为帐户返回的关键字数有限制。 该限制未定义,可能会更改。 以下示例演示如何处理帐户的关键字过多的情况。 该示例首先尝试在帐户级别提取所有关键字。 如果由于“实体太多”错误而失败,它将尝试多次调用来按市场活动提取关键字,因为市场活动级别的实体通常较少。

有关使用收益关键字 (keyword) 的信息,请参阅在获取大型实体集时使用收益关键字 (keyword)

function* getEntities() {
    const applyConditions = _ => _
        .withCondition('CampaignStatus = ENABLED')
        .withCondition('AdGroupStatus = ENABLED')
        .withCondition('Status = ENABLED')
        .withCondition("CombinedApprovalStatus = DISAPPROVED");

    try {
        // Get the account's keywords. 
        const keywords = applyConditions(AdsApp.keywords()).get();

        while (keywords.hasNext()) {
            yield keywords.next();
        }
    } catch (e) {
        if (!e.message.startsWith('There are too many entities')) {
            throw e;
        }

        // If there are too many keywords at the account level,
        // get keywords by campaigns under the account.
        const campaigns = AdsApp.campaigns().get();

        while (campaigns.hasNext()) {
            const campaign = campaigns.next();

            const keywords = applyConditions(campaign.keywords()).get();

            while (keywords.hasNext()) {
                yield keywords.next();
            }
        }
    }
}

获取关键字 (keyword) 的性能数据

若要获取关键字 (keyword) 的性能指标,请调用 关键字 (keyword) 的 getStats 方法。 获取关键字 (keyword) 时,需要指定所需指标数据的日期范围。 可以使用预定义文本(如 LAST_MONTH 或 TODAY)或开始日期和结束日期指定日期范围。 若要指定日期范围,请在选择关键字 (keyword) (请参阅 KeywordSelector) 时使用方法之一forDateRange

有关可以访问的指标列表,请参阅 Stats 对象。

function main() {
    var campaignName = 'CAMPAIGN NAME GOES HERE';
    var adGroupName = 'AD GROUP NAME GOES HERE';
    var keywordText = 'KEYWORD TEXT GOES HERE';

    // Get the keyword. You need to specify the date range of the
    // performance data you want to get.
    var iterator = AdsApp.keywords()
        .forDateRange('LAST_WEEK')
        .withCondition(`Text = '${keywordText}'`)
        .withCondition(`AdGroupName = '${adGroupName}'`)
        .withCondition(`CampaignName = '${campaignName}'`)
        .get();

    // If the keyword is found, log some metrics.
    if (iterator.hasNext()) {
        var keyword = iterator.next();
        var metrics = keyword.getStats(); // Gets the performance metrics.
    }
}

更新关键字 (keyword) 的出价值。

有关演示如何更新关键字 (keyword) 出价值的示例,请参阅呼叫 Google 服务