最高成效
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
function getAllPerformanceMaxCampaigns() {
// AdsApp.performanceMaxCampaigns() will return all campaigns that are not
// removed by default.
const performanceMaxCampaignIterator = AdsApp.performanceMaxCampaigns().get();
console.log(`Total campaigns found : ${performanceMaxCampaignIterator.totalNumEntities()}`);
return performanceMaxCampaignIterator;
}
用量
const performanceMaxCampaigns = getAllPerformanceMaxCampaigns();
for (const performanceMaxCampaign of performanceMaxCampaigns) {
// Process your campaign.
}
function getPerformanceMaxCampaignByName(campaignName) {
const performanceMaxCampaignIterator = AdsApp.performanceMaxCampaigns()
.withCondition(`campaign.name = "${campaignName}"`)
.get();
if (!performanceMaxCampaignIterator.hasNext()) {
throw new Error(`No performance max campaign with name ${campaignName} found.`);
}
const performanceMaxCampaign = performanceMaxCampaignIterator.next();
console.log(`Campaign Name: ${performanceMaxCampaign.getName()}`);
console.log(`Enabled: ${performanceMaxCampaign.isEnabled()}`);
console.log(`Bidding strategy: ${performanceMaxCampaign.getBiddingStrategyType()}`);
console.log(`Ad rotation: ${performanceMaxCampaign.getAdRotationType()}`);
console.log(`Start date: ${formatDate(performanceMaxCampaign.getStartDate())}`);
console.log(`End date: ${formatDate(performanceMaxCampaign.getEndDate())}`);
return performanceMaxCampaign;
}
function formatDate(date) {
function zeroPad(number) { return Utilities.formatString('%02d', number); }
return (date == null) ? 'None' : zeroPad(date.year) + zeroPad(date.month) +
zeroPad(date.day);
}
function getPerformanceMaxCampaignStats(campaignName) {
const performanceMaxCampaignIterator = AdsApp.performanceMaxCampaigns()
.withCondition(`campaign.name = "${campaignName}"`)
.get();
if (!performanceMaxCampaignIterator.hasNext()) {
throw new Error(`No performance max campaign with name ${campaignName} found.`);
}
const performanceMaxCampaign = performanceMaxCampaignIterator.next();
// Fetch stats for the last month. See the DateRangeLiteral section at
// https://developers.google.com/adwords/api/docs/guides/awql#formal_grammar
// for a list of all supported pre-defined date ranges.
// Note: Reports can also be used to fetch stats. See
// https://developers.google.com/google-ads/scripts/docs/features/reports
// for more information.
var stats = performanceMaxCampaign.getStatsFor('LAST_MONTH');
console.log(`${performanceMaxCampaign.getName()}, ${stats.getImpressions()} impressions, ` +
`${stats.getViews()} views`);
return stats;
}
function pausePerformanceMaxCampaign(campaignName) {
const performanceMaxCampaignIterator = AdsApp.performanceMaxCampaigns()
.withCondition(`campaign.name = "${campaignName}"`)
.get();
if (performanceMaxCampaignIterator.hasNext()) {
const performanceMaxCampaign = performanceMaxCampaignIterator.next();
performanceMaxCampaign.pause();
}
}
按名稱擷取素材資源群組
function getAssetGroupByName(campaignName, assetGroupName) {
// Defined above
const performanceMaxCampaign = getPerformanceMaxCampaignByName(campaignName);
if (performanceMaxCampaign == null) {
return null;
}
const assetGroupIterator = performanceMaxCampaign.assetGroups()
.withCondition(`asset_group.name = "${assetGroupName}"`)
.get();
if (!assetGroupIterator.hasNext()) {
throw new Error(`No asset group found with name ${assetGroupName}.`);
}
return assetGroupIterator.next();
}
暫停素材資源群組
function pausePerformanceMaxAssetGroup(campaignName, assetGroupName) {
// Defined above
const assetGroup = getAssetGroupByName(campaignName, assetGroupName);
assetGroup.pause();
console.log(`AssetGroup with name: ${assetGroup.getName()} ` +
`has paused status: ${assetGroup.isPaused()}`);
}
擷取特定影片供素材資源群組使用
function getVideoByYouTubeId(youTubeVideoId) {
// You can filter on the YouTubeVideoId if you already have that video in
// your account to fetch the exact one you want right away.
const videos = AdsApp.adAssets().assets()
.withCondition(`asset.type = YOUTUBE_VIDEO AND ` +
`asset.youtube_video_asset.youtube_video_id = '${youTubeVideoId}'`)
.get();
if (videos.hasNext()) {
return videos.next();
}
return null;
}
將特定影片新增至素材資源群組
function addVideoToAssetGroup(youTubeVideoId, campaignName, assetGroupName) {
// Defined above
const video = getVideoByYouTubeId(youTubeVideoId);
const assetGroup = getAssetGroupByName(campaignName, assetGroupName);
assetGroup.addAsset(video, 'YOUTUBE_VIDEO');
}
從素材資源群組中移除特定影片
function removeVideoFromAssetGroup(youTubeVideoId, campaignName, assetGroupName) {
// Defined above
const video = getVideoByYouTubeId(youTubeVideoId);
const assetGroup = getAssetGroupByName(campaignName, assetGroupName);
assetGroup.removeAsset(video, 'YOUTUBE_VIDEO');
}
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-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"]],["上次更新時間:2025-08-21 (世界標準時間)。"],[[["\u003cp\u003eThis script provides functions to manage Google Ads Performance Max campaigns, including retrieving, pausing, and getting stats for campaigns and asset groups.\u003c/p\u003e\n"],["\u003cp\u003eYou can retrieve campaigns by name or iterate through all of them, and access campaign details like bidding strategy and start/end dates.\u003c/p\u003e\n"],["\u003cp\u003eAsset group management includes retrieving by name, pausing, and adding or removing specific videos identified by their YouTube IDs.\u003c/p\u003e\n"],["\u003cp\u003eFunctions to get campaign and asset group stats are included, utilizing predefined date ranges or enabling the use of reports for more customized analysis.\u003c/p\u003e\n"],["\u003cp\u003eError handling is incorporated to identify and report when campaigns or asset groups with specified names are not found.\u003c/p\u003e\n"]]],[],null,["# Performance Max\n\nRetrieve all performance max campaigns\n--------------------------------------\n\n```gdscript\nfunction getAllPerformanceMaxCampaigns() {\n // AdsApp.performanceMaxCampaigns() will return all campaigns that are not\n // removed by default.\n const performanceMaxCampaignIterator = AdsApp.performanceMaxCampaigns().get();\n console.log(`Total campaigns found : ${performanceMaxCampaignIterator.totalNumEntities()}`);\n return performanceMaxCampaignIterator;\n}\n```\n\n### Usage\n\n```gdscript\nconst performanceMaxCampaigns = getAllPerformanceMaxCampaigns();\n\nfor (const performanceMaxCampaign of performanceMaxCampaigns) {\n\n // Process your campaign.\n}\n```\n\nRetrieve a performance max campaign by its name\n-----------------------------------------------\n\n```gdscript\nfunction getPerformanceMaxCampaignByName(campaignName) {\n const performanceMaxCampaignIterator = AdsApp.performanceMaxCampaigns()\n .withCondition(`campaign.name = \"${campaignName}\"`)\n .get();\n if (!performanceMaxCampaignIterator.hasNext()) {\n throw new Error(`No performance max campaign with name ${campaignName} found.`);\n }\n const performanceMaxCampaign = performanceMaxCampaignIterator.next();\n console.log(`Campaign Name: ${performanceMaxCampaign.getName()}`);\n console.log(`Enabled: ${performanceMaxCampaign.isEnabled()}`);\n console.log(`Bidding strategy: ${performanceMaxCampaign.getBiddingStrategyType()}`);\n console.log(`Ad rotation: ${performanceMaxCampaign.getAdRotationType()}`);\n console.log(`Start date: ${formatDate(performanceMaxCampaign.getStartDate())}`);\n console.log(`End date: ${formatDate(performanceMaxCampaign.getEndDate())}`);\n return performanceMaxCampaign;\n}\n\nfunction formatDate(date) {\n function zeroPad(number) { return Utilities.formatString('%02d', number); }\n return (date == null) ? 'None' : zeroPad(date.year) + zeroPad(date.month) +\n zeroPad(date.day);\n}\n```\n\nRetrieve a performance max campaign's stats\n-------------------------------------------\n\n```gdscript\nfunction getPerformanceMaxCampaignStats(campaignName) {\n const performanceMaxCampaignIterator = AdsApp.performanceMaxCampaigns()\n .withCondition(`campaign.name = \"${campaignName}\"`)\n .get();\n if (!performanceMaxCampaignIterator.hasNext()) {\n throw new Error(`No performance max campaign with name ${campaignName} found.`);\n }\n const performanceMaxCampaign = performanceMaxCampaignIterator.next();\n // Fetch stats for the last month. See the DateRangeLiteral section at\n // https://developers.google.com/adwords/api/docs/guides/awql#formal_grammar\n // for a list of all supported pre-defined date ranges.\n // Note: Reports can also be used to fetch stats. See\n // https://developers.google.com/google-ads/scripts/docs/features/reports\n // for more information.\n var stats = performanceMaxCampaign.getStatsFor('LAST_MONTH');\n console.log(`${performanceMaxCampaign.getName()}, ${stats.getImpressions()} impressions, ` +\n `${stats.getViews()} views`);\n return stats;\n}\n```\n\nPause a performance max campaign\n--------------------------------\n\n```gdscript\nfunction pausePerformanceMaxCampaign(campaignName) {\n const performanceMaxCampaignIterator = AdsApp.performanceMaxCampaigns()\n .withCondition(`campaign.name = \"${campaignName}\"`)\n .get();\n if (performanceMaxCampaignIterator.hasNext()) {\n const performanceMaxCampaign = performanceMaxCampaignIterator.next();\n performanceMaxCampaign.pause();\n }\n}\n```\n\nRetrieve an asset group by its name\n-----------------------------------\n\n```gdscript\nfunction getAssetGroupByName(campaignName, assetGroupName) {\n // Defined above\n const performanceMaxCampaign = getPerformanceMaxCampaignByName(campaignName);\n if (performanceMaxCampaign == null) {\n return null;\n }\n const assetGroupIterator = performanceMaxCampaign.assetGroups()\n .withCondition(`asset_group.name = \"${assetGroupName}\"`)\n .get();\n if (!assetGroupIterator.hasNext()) {\n throw new Error(`No asset group found with name ${assetGroupName}.`);\n }\n return assetGroupIterator.next();\n}\n```\n\nPause an asset group\n--------------------\n\n```gdscript\nfunction pausePerformanceMaxAssetGroup(campaignName, assetGroupName) {\n // Defined above\n const assetGroup = getAssetGroupByName(campaignName, assetGroupName);\n assetGroup.pause();\n console.log(`AssetGroup with name: ${assetGroup.getName()} ` +\n `has paused status: ${assetGroup.isPaused()}`);\n}\n```\n\nRetrieve a specific video for use in an asset group\n---------------------------------------------------\n\n```gdscript\nfunction getVideoByYouTubeId(youTubeVideoId) {\n // You can filter on the YouTubeVideoId if you already have that video in\n // your account to fetch the exact one you want right away.\n const videos = AdsApp.adAssets().assets()\n .withCondition(`asset.type = YOUTUBE_VIDEO AND ` +\n `asset.youtube_video_asset.youtube_video_id = '${youTubeVideoId}'`)\n .get();\n if (videos.hasNext()) {\n return videos.next();\n }\n return null;\n}\n```\n\nAdd a specific video to an asset group\n--------------------------------------\n\n```gdscript\nfunction addVideoToAssetGroup(youTubeVideoId, campaignName, assetGroupName) {\n // Defined above\n const video = getVideoByYouTubeId(youTubeVideoId);\n const assetGroup = getAssetGroupByName(campaignName, assetGroupName);\n assetGroup.addAsset(video, 'YOUTUBE_VIDEO');\n}\n```\n\nRemove a specific video from an asset group\n-------------------------------------------\n\n```gdscript\nfunction removeVideoFromAssetGroup(youTubeVideoId, campaignName, assetGroupName) {\n // Defined above\n const video = getVideoByYouTubeId(youTubeVideoId);\n const assetGroup = getAssetGroupByName(campaignName, assetGroupName);\n assetGroup.removeAsset(video, 'YOUTUBE_VIDEO');\n}\n```"]]