Ads 相關
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
新增延展型文字廣告
function addExpandedTextAd(adGroupName,campaignName) {
const campaignIterator = AdsApp.campaigns()
.withCondition(`campaign.name = "${campaignName}"`)
.get();
if (!campaignIterator.hasNext()){
throw new error (`No campaign found with name: "${campaignname}"`);
}
const adGroupIterator = AdsApp.adGroups()
.withCondition(`ad_group.name = "${adGroupName}"`)
.get();
if (!adGroupIterator.hasNext()){
throw new error (`No ad group found with name: "${adGroupName}"`);
}
const adGroup = adGroupIterator.next();
adGroup.newAd().expandedTextAdBuilder()
.withHeadlinePart1('First headline of ad')
.withHeadlinePart2('Second headline of ad')
.withHeadlinePart3('Third headline of ad')
.withDescription('First Ad description')
.withDescription2('Second Ad description')
.withPath1('path1')
.withPath2('path2')
.withFinalUrl('http://www.example.com')
.build();
// ExpandedTextAdBuilder has additional options.
// For more details, see
// https://developers.google.com/google-ads/scripts/docs/reference/adsapp/adsapp_expandedtextadbuilder
}
新增圖像廣告
function addImageAd(adGroupName,imageUrl,imageName) {
const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();
const mediaOperation = AdsApp.adMedia().newImageBuilder()
.withName(`${imageName}`)
.withData(imageBlob)
.build();
const image = mediaOperation.getResult();
if (!image.isSuccessful()) {
throw new Error(`Media could not be created from url: "${imageUrl}"`)
}
const adGroupIterator = AdsApp.adGroups()
.withCondition(`ad_group.name = "${adGroupName}"`)
.get();
if (!adGroupIterator.hasNext()) {
throw new Error(`No ad group found with name: "${adGroupName}"`);
}
if (adGroupIterator.totalNumEntities() > 1) {
console.warn(`Multiple ad groups named "${name}" found. Using the one
from campaign "${adGroup.getCampaign().getName()}".`);
}
const mediaIterator = AdsApp.adMedia().media()
.withCondition(`media_file.name = "${imageName}"`)
.get();
if (!mediaIterator.hasNext()) {
throw new Error(`No media found with name: "${imageName}"`);
}
const adGroup = adGroupIterator.next();
const image2 = mediaIterator.next();
adGroup.newAd().imageAdBuilder()
.withName('Ad name')
.withImage(image2)
.withDisplayUrl('http://www.example.com')
.withFinalUrl('http://www.example.com')
.build();
// ImageAdBuilder has additional options.
// For more details, see
// https://developers.google.com/google-ads/scripts/docs/reference/adsapp/adsapp_imageadbuilder
}
新增回應式多媒體廣告
// You create responsive display ads in two steps:
// 1. Create or retrieve assets (marketing images, square marketing images,
// optional logos, optional landscape logos, and optional YouTube videos)
// 2. Create the ad.
//
// The following function assumes you have not already created named assets.
function addResponsiveDisplayAd(campaignName,adGroupName) {
// If you have multiple adGroups with the same name, this snippet will
// pick an arbitrary matching ad group each time. In such cases, just
// filter on the campaign name as well:
//
// AdsApp.adGroups()
// .withCondition(`ad_group.name = "${adGroupName}"`)
// .withCondition(`campaign.name = "${campaignName}"`)
const adGroupIterator = AdsApp.adGroups()
.withCondition(`ad_group.name = "${adGroupName}"`)
.get();
if (!adGroupIterator.hasNext()) {
throw new Error(`No ad group found with name: ${adGroupName}`);
}
// If you have already created named image assets, select them like this:
//
// const marketingImages = [];
// const marketingImageIterator = AdsApp.adAssets()
// .assets()
// .withCondition(`ad_group_ad.ad.name IN ("INSERT_FIRST_ASSET_NAME_HERE",
// "INSERT_SECOND_ASSET_NAME_HERE")`)
// .get();
// while (marketingImageIterator.hasNext()) {
// marketingImages.push(marketingImageIterator.next());
// }
const adGroup = adGroupIterator.next();
const adGroupBuilder = adGroup.newAd()
.responsiveDisplayAdBuilder()
.withBusinessName('Your business name')
.withFinalUrl('http://www.example.com')
.withHeadlines(['First headline', 'Second headline'])
.withLongHeadline('Long Headline')
.withDescriptions(
['First description', 'Second description', 'Third description']);
// If you selected assets with a snippet as shown above, then provide those
// assets here like this:
//
// adGroupBuilder = adGroupBuilder.withMarketingImages(marketingImages);
adGroupBuilder
.addMarketingImage(
buildImageAsset("rectangular image asset", "https://goo.gl/3b9Wfh"))
.addSquareMarketingImage(
buildImageAsset("square image asset", "https://goo.gl/mtt54n"))
.build();
// ResponsiveDisplayAdBuilder has additional options.
// For more details, see
// https://developers.google.com/google-ads/scripts/docs/reference/adsapp/adsapp_responsivedisplayadbuilder
}
function buildImageAsset(assetName, imageUrl) {
const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();
return AdsApp.adAssets().newImageAssetBuilder()
.withData(imageBlob)
.withName(assetName)
.build()
.getResult();
}
暫停廣告群組中的廣告
function pauseAdInAdGroup(adGroupName) {
const adGroupIterator = AdsApp.adGroups()
.withCondition(`ad_group.name = "${adGroupName}"`)
.get();
if (!adGroupIterator.hasNext()) {
throw new Error(`No ad group found with name: "${adGroupName}"`);
}
const adGroup = adGroupIterator.next();
const adsIterator = adGroup.ads().get();
if (!adsIterator.hasNext()) {
throw new Error(`No ads found in ad group: "${adGroupName}"`);
}
const ad = adsIterator.next();
ad.pause();
}
取得廣告群組中的延展型文字廣告疊代器
function getExpandedTextAdsIteratorInAdGroup(adGroupName) {
const adGroupIterator = AdsApp.adGroups()
.withCondition(`ad_group.name = "${adGroupName}"`)
.get();
if (!adGroupIterator.hasNext()) {
throw new Error(`No ad group found with name: "${adGroupName}"`);
}
const adGroup = adGroupIterator.next();
// You can filter for ads of a particular type, using the AdType selector.
// See https://developers.google.com/google-ads/scripts/docs/reference/adsapp/adsapp_ad#getType_0
// for possible values.
const expandedTextAdsIterator = adGroup.ads()
.withCondition(`ad_group_ad.ad.type = "EXPANDED_TEXT_AD"`)
.get();
if (!expandedTextAdsIterator.hasNext()) {
throw new Error(`No expanded text ads found in ad group: "${adGroupName}"`);
}
return expandedTextAdsIterator;
}
取得廣告群組中的文字廣告疊代器
function getTextAdsIteratorInAdGroup(adGroupName) {
const adGroupIterator = AdsApp.adGroups()
.withCondition(`ad_group.name = "${adGroupName}"`)
.get();
if (!adGroupIterator.hasNext()) {
throw new Error(`No ad group found with name: "${adGroupName}"`);
}
const adGroup = adGroupIterator.next();
// You can filter for ads of a particular type, using the AdType selector.
// See https://developers.google.com/google-ads/scripts/docs/reference/adsapp/adsapp_ad#getType_0
// for possible values.
const textAdsIterator = adGroup.ads()
.withCondition(`ad_group_ad.ad.type = "TEXT_AD"`)
.get();
if (!textAdsIterator.hasNext()) {
throw new Error(`No text ads found in ad group: "${adGroupName}"`);
}
return textAdsIterator;
}
為廣告群組中的廣告擷取統計資料
function getAdGroupAdStats(adGroupName) {
const adGroupIterator = AdsApp.adGroups()
.withCondition(`ad_group.name = "${adGroupName}"`)
.get();
if (!adGroupIterator.hasNext()) {
throw new Error(`No ad group found with name: "${adGroupName}"`);
}
const adGroup = adGroupIterator.next();
// If you want to restrict your search to some ads only, then you could
// apply a label and retrieve ads as
//
// const label = AdsApp.labels()
// .withCondition(`ad_group_ad_label.name ="INSERT_LABEL_NAME_HERE"`)
// .get()
// .next();
// const adsIterator = label.ads().get();
const adsIterator = adGroup.ads().get();
if (!adsIterator.hasNext()) {
throw new Error(`No ads found in ad group: "${adGroupName}"`);
}
const ad = adsIterator.next();
// You can also request reports for pre-defined date ranges. See
// https://developers.google.com/google-ads/api/docs/query/date-ranges
// DateRangeLiteral section for possible values.
const stats = ad.getStatsFor('LAST_MONTH');
console.log(`${adGroup.getName()},
${stats.getClicks()},
${stats.getImpressions()}`);
}
在廣告群組中取得回應式多媒體廣告
function getResponsiveDisplayAdIteratorInAdGroup(adGroupName) {
const adGroupIterator = AdsApp.adGroups()
.withCondition(`ad_group.name = "${adGroupName}"`)
.get();
if (!adGroupIterator.hasNext()) {
throw new Error(`No ad group found with name: ${adGroupName}`);
}
const adGroup = adGroupIterator.next();
const responsiveDisplayAdsIterator = adGroup.ads()
.withCondition(`ad_group_ad.ad.type IN ("RESPONSIVE_DISPLAY_AD",
"LEGACY_RESPONSIVE_DISPLAY_AD")`)
.get();
if (!responsiveDisplayAdsIterator.hasNext()) {
throw new Error(`No Responsive Display ads found in ad group:
"${adGroupName}"`);
}
return responsiveDisplayAdsIterator;
}
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2024-08-21 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2024-08-21 (世界標準時間)。"],[[["The provided Google Ads scripts demonstrate how to manage ads, including creating various ad types like Expanded Text Ads, Image Ads, and Responsive Display Ads within specified ad groups and campaigns."],["The scripts enable functionalities such as pausing ads, retrieving iterators for different ad types (Expanded Text Ads, Text Ads, Responsive Display Ads), and fetching performance statistics for ads within a given ad group."],["The scripts use error handling to ensure smooth execution and provide informative messages when issues like missing campaigns, ad groups, or ads are encountered."],["The scripts leverage Google Ads API functionalities for managing ad assets, building ads with specific attributes, and accessing performance data for reporting purposes."],["The scripts are designed to be modular and reusable, allowing for customization and integration into larger Google Ads management workflows."]]],[]]