Google 広告スクリプトを使用すると、P-MAX キャンペーンの一部を管理できます。スクリプトを使用して P-MAX キャンペーンを取得したり、アセット グループを管理したり、レポートを実行したりすることはできますが、スクリプトを使用して P-MAX キャンペーンを作成することはできません。より高度なオペレーションを行うには、このガイドの残りの部分をご覧ください。ここでは、mutate
を使用したより一般的なアプローチについて説明します。
P-MAX キャンペーンの取得
P-MAX キャンペーンは、AdsApp
オブジェクトの performanceMaxCampaigns
コレクションで使用できます。通常どおり取得できます。
const campaignName = "My Performance Max campaign";
const campaignIterator = AdsApp.performanceMaxCampaigns()
.withCondition(`campaign.name = "${campaignName}"`)
.get();
for (const campaign of campaignIterator) {
...
}
他のキャンペーン タイプとは異なり、P-MAX キャンペーンには、表示できる広告グループや広告オブジェクトはありません。他のキャンペーンのこれらのコンセプトに関連するすべての処理は、設定したアセット グループに基づいて自動的に処理されます。
アセットとアセット グループ
P-MAX キャンペーンの広告は、動画、画像、広告見出し、説明文などのアセットに基づいて配信されます。これらのアセットは、お客様が提供するものでも、自動生成されたものでもかまいません。必要なアセットの種類について詳しくは、Google Ads API P-MAX アセット ガイドをご覧ください。
P-MAX キャンペーンのアセットは、アセット グループにまとめられます。各 P-MAX キャンペーンには、少なくとも 1 つのアセット グループが必要です。これらのアセット グループはスクリプトで直接作成することはできませんが、既存のアセット グループにアセットを追加したり、アセットを削除したりすることはできます。
アセット グループにアセットを追加する
まず、アセットを作成します。
const imageUrl = "http://www.example.com/example.png";
const imageBlob = UrlFetchApp.fetch(imageUrl).getBlob();
const assetOperation = AdsApp.adAssets().newImageAssetBuilder()
.withName("new asset name")
.withData(imageBlob)
.build();
const imageAsset = assetOperation.getResult();
次に、作成したアセットを使用して、既存のアセット グループに追加します。
// First, fetch the Performance Max campaign we want to operate on.
const campaignIterator = AdsApp.performanceMaxCampaigns()
.withCondition(`campaign.name = '${campaignName}'`)
.get();
let campaign;
if (campaignIterator.hasNext()) {
campaign = campaignIterator.next();
} else {
throw `No campaign found with name ${campaignName}.`
}
// Then, get that campaign's asset groups.
const assetGroupIterator = campaign.assetGroups().get();
// The campaign must have at least one asset group, so we can just assume so here.
const assetGroup = assetGroupIterator.next();
// Add the asset from the previous step.
assetGroup.addAsset(imageAsset, 'MARKETING_IMAGE');
最後のステップでアセットのタイプを指定する必要があります。アセットタイプの一覧については、Google Ads API のドキュメントをご覧ください。
既存のアセットを使用するには、まずアセット セレクタを作成します。
const assetSelector = AdsApp.adAssets().assets();
次に、withCondition
フィルタを使用して、操作するアセットに絞り込みます。フィルタ オプションの一覧については、AssetSelector
のリファレンス ドキュメントをご覧ください。
最後に、イテレータを取得し、他のエンティティと同様に反復処理します。
const assetIterator = assetSelector.get();
for (const asset of assetIterator) {
...
}
テキスト アセット
テキスト アセットは、事前にアセットを作成する必要がない点で、少し異なります。アセットの代わりにテキストを指定すると、システムによってアセットが自動的に作成されます。テキストが既存のテキスト アセットと完全に重複する場合は、代わりに既存のアセットが再利用されます。
たとえば、ヘッドライン アセットを作成する方法は次のとおりです。
assetGroup.addAsset('asset text here', 'HEADLINE');
アセット グループからアセットを削除する
アセット グループからアセットを削除することもできますが、キャンペーンを有効にするには、特定の種類のアセットの最小数が必要です。
前の例で追加したアセットを削除する方法は次のとおりです。
assetGroup.removeAsset(imageAsset, 'MARKETING_IMAGE');
search
関数を使用して、特定のアセット グループ内のアセットのリストを取得することもできます。
// The resource name is a unique identifier for this asset group.
const assetGroupName = assetGroup.getResourceName();
results = AdsApp.search(
`SELECT asset.resource_name, asset_group_asset.field_type
FROM asset_group_asset
WHERE asset_group.resource_name = '${assetGroupName}'`
);
これにより、アセットのリソース名が一意の識別子として選択されます。asset.type
や asset.text_asset.text
などの他のフィールドを選択して、結果をさらに絞り込むこともできます。このレポート タイプのクエリビルダーを使用して、独自のクエリを作成します。
対象アセットを取得したら、アセット グループで remove
を呼び出して、アセット グループからアセットを削除します。
// Let's assume at least one asset is returned. We'll just remove the first
// asset, whatever it is. In your code, customize this to choose the right asset.
const row_info = results.next().asset;
assetGroup.remove(row_info.asset.resource_name, row_info.asset_group_asset.field_type);