Les ensembles partagés vous permettent de gérer et de partager un seul ensemble de critères sur plusieurs ressources. Selon le type d'ensemble partagé, les critères peuvent être appliqués au niveau de la campagne, du groupe d'annonces ou du compte.
L'énumération SharedSetType spécifie les types d'ensembles partagés que vous pouvez utiliser dans l'API Google Ads. Ce guide vous explique comment utiliser un ensemble partagé pour créer et appliquer une liste de mots clés à exclure partagée à une campagne. Vous pouvez suivre la même procédure pour ajouter d'autres types d'ensembles partagés à des campagnes.
Créer un objet SharedSet
Commencez par créer un SharedSet qui servira de conteneur pour vos critères partagés.
Lorsque vous créez le SharedSet, spécifiez le SharedSetType.
Pour une liste de mots clés à exclure au niveau de la campagne, utilisez NEGATIVE_KEYWORDS (compatible avec les campagnes sur le Réseau de Recherche, display, Shopping, pour applications MULTI_CHANNEL et LOCAL).
Voici d'autres types :
NEGATIVE_PLACEMENTS: liste des emplacements (tels que des sites Web ou des applications) à exclure. Ce type de liste peut être associé à des campagnes avecCampaignSharedSetou à un compte avecCustomerNegativeCriterion.ACCOUNT_LEVEL_NEGATIVE_KEYWORDS: liste de mots clés à exclure du ciblage. Ce type de liste doit être associé à un compte utilisantCustomerNegativeCriterion(au maximum un ensemble partagéACCOUNT_LEVEL_NEGATIVE_KEYWORDSpeut être associé par compte).BRANDS: liste de marques (critèresBrandInfosurSharedCriterion) à utiliser dans les restrictions de marques pour les campagnes sur le Réseau de Recherche ou à exclure du ciblage.WEBPAGES(disponible uniquement pour les comptes figurant sur une liste d'autorisation) : liste des conditions de page Web (critèresWebpageInfosurSharedCriterion) à exclure du ciblage au niveau de la campagne à l'aide deWebpageListInfo(CampaignCriterion.webpage_list).VERTICAL_ADS_ITEM_GROUP_RULE_LIST: liste des règlesVerticalAdsItemGroupRuleInfo(SharedCriterion.vertical_ads_item_group_rule) pouvant être ciblées ou exclues (SharedCriterion.negative) dans les annonces verticales, comme les campagnes sur le Réseau de Recherche avec des flux de voyage.- Les dimensions de règles acceptées incluent
item_code,country_criterion_id,region_criterion_id,city_criterion_idethotel_class. - Dans la version 24 et les versions ultérieures, les dimensions de règle
user_rating,venueetevent_participant_display_namesont également acceptées.
- Les dimensions de règles acceptées incluent
RETAIL_FILTER(v24 et versions ultérieures ; comptes sur une liste d'autorisation uniquement) : ensemble de règles d'expression et de balisesRetailFilter(SharedCriterion.retail_filter) utilisées pour le filtrage dynamique des produits basé sur les balises dans les campagnes Shopping et pour le commerce.
Le processus de création de SharedSet comprend les étapes suivantes :
- Instanciez un
SharedSet. - Définissez
SharedSetTypesurNEGATIVE_KEYWORDS. - Fournissez un
namepour faciliter l'identification des ressources à l'avenir. - Utilisez
SharedSetServicepour créer leSharedSet.
La réponse fournit le nom de ressource de l'SharedSet nouvellement créé. Vous utiliserez ce nom lors des prochaines étapes.
Créer des ressources SharedCriterion
Créez ensuite des ressources SharedCriterion pour chaque élément que vous souhaitez ajouter à votre SharedSet. Dans le cas d'une liste de mots clés à exclure, il s'agit de vos mots clés à exclure.
Chaque SharedCriterion contient les éléments suivants :
- Objet
Criterioncompatible. - Nom de ressource du
SharedSetque vous avez créé à l'étape précédente.
Pour ajouter les mots clés à exclure à votre SharedSet :
- Pour chaque mot clé à exclure, créez un objet
SharedCriterion. - Dans chaque
SharedCriterion, créez un objetKeywordInfoet définissez le texte du mot clé et le type de correspondance. - Définissez le champ
shared_setdeSharedCriterionsur le nom de ressource de votreSharedSet. - Combinez vos objets
SharedCriterionOperationdans une seule requête et utilisezSharedCriterionService.MutateSharedCriteriapour les ajouter par lot plutôt que d'envoyer des requêtes distinctes pour chaque critère.
Joindre un SharedSet
Une fois qu'un SharedSet est rempli avec des ressources SharedCriterion, vous pouvez l'associer à d'autres ressources de votre compte. La ressource que vous utilisez pour associer un SharedSet dépend de son type et du niveau auquel vous souhaitez appliquer ses critères.
Au niveau de la campagne
Vous pouvez associer des ensembles partagés au niveau de la campagne à l'aide de CampaignSharedSet ou de CampaignCriterion, selon le type d'ensemble partagé.
CampaignSharedSet- Les ensembles partagés de type
NEGATIVE_KEYWORDSouNEGATIVE_PLACEMENTSdoivent être associés aux campagnes à l'aide de la ressourceCampaignSharedSet. Les critères à exclure associés à une campagne s'appliquent automatiquement à tous les groupes d'annonces de cette campagne. Pour associer unSharedSetà une campagne en tant que critère à exclure :
- Créez un objet
CampaignSharedSet. - Définissez le champ
campaignsur le nom de ressource de la campagne à laquelle vous souhaitez ajouter leSharedSet. - Définissez le champ
shared_setsur le nom de ressource duSharedSetque vous avez créé. - Utilisez
CampaignSharedSetServicepour créerCampaignSharedSet. Cela établit le lien entre la campagne et leSharedSet.
CampaignCriterion- Les ensembles partagés de type
BRANDSouWEBPAGES(disponibles uniquement pour les comptes figurant sur une liste d'autorisation) peuvent être associés à des campagnes à l'aide d'unCampaignCriterion(en définissantbrand_listsur un objetBrandListInfoouwebpage_listsur un objetWebpageListInfo). Pour associer un ensembleBRANDSpartagé à une campagne :
- Créez un objet
CampaignCriterion. - Définissez le champ
brand_listsur un objetBrandListInfo. - Définissez
BrandListInfo.shared_setsur le nom de ressource deBRANDSSharedSet. - Utilisez
CampaignCriterionServicepour créerCampaignCriterion.
Au niveau du groupe d'annonces
Les ensembles partagés de type BRANDS,
VERTICAL_ADS_ITEM_GROUP_RULE_LIST ou
RETAIL_FILTER (version 24 et ultérieures, comptes sur une liste d'autorisation uniquement) peuvent être associés au niveau du groupe d'annonces à l'aide d'un AdGroupCriterion.
Pour associer un ensemble partagé BRANDS à un groupe d'annonces (ciblage par inclusion uniquement ; le ciblage par exclusion n'est compatible qu'au niveau de la campagne) :
- Créez un
AdGroupCriterion. - Définissez le champ
brand_listsur un objetBrandListInfo. - Définissez
BrandListInfo.shared_setsur le nom de ressource deBRANDSSharedSet. - Utilisez
AdGroupCriterionServicepour créerAdGroupCriterion.
Pour associer un ensemble partagé VERTICAL_ADS_ITEM_GROUP_RULE_LIST à un groupe d'annonces :
- Créez un
AdGroupCriterion. - Définissez le champ
vertical_ads_item_group_rule_listsur un objetVerticalAdsItemGroupRuleListInfo. - Définissez
VerticalAdsItemGroupRuleListInfo.shared_setsur le nom de ressource deVERTICAL_ADS_ITEM_GROUP_RULE_LISTSharedSet. - Utilisez
AdGroupCriterionServicepour créerAdGroupCriterion.
Pour associer un ensemble partagé RETAIL_FILTER à un groupe d'annonces (v24 et versions ultérieures, comptes sur une liste d'autorisation uniquement) :
- Créez un
AdGroupCriterion. - Définissez le champ
retail_filter_bundlesur un objetRetailFilterBundle. - Définissez
RetailFilterBundle.shared_setsur le nom de ressource deSharedSetRETAIL_FILTER. - Utilisez
AdGroupCriterionServicepour créerAdGroupCriterion.
Au niveau du compte
Si vous utilisez un compte administrateur, vous pouvez créer des ressources SharedSet et les partager avec les comptes client qui font partie de votre hiérarchie de comptes.
Par exemple, pour associer un NEGATIVE_PLACEMENTS
SharedSet dans votre compte administrateur à un compte client, utilisez un
CustomerNegativeCriterion :
- Créez un objet
CustomerNegativeCriteriondans le compte client. - Définissez son champ
placement_listsur un objetPlacementListInfooùPlacementListInfo.shared_setest défini sur le nom de ressource deSharedSetà partir du compte administrateur. - Utilisez
CustomerNegativeCriterionServicepour créerCustomerNegativeCriterion.
De même, vous pouvez associer un
ACCOUNT_LEVEL_NEGATIVE_KEYWORDS
SharedSet dans votre compte administrateur à un compte client :
- Créez un objet
CustomerNegativeCriteriondans le compte client. - Définissez son champ
negative_keyword_listsur un objetNegativeKeywordListInfooùNegativeKeywordListInfo.shared_setest défini sur le nom de ressource deSharedSetà partir du compte administrateur. - Utilisez
CustomerNegativeCriterionServicepour créerCustomerNegativeCriterion.
Exemple de code d'ensemble de mots clés partagé
Java
// Copyright 2018 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package com.google.ads.googleads.examples.advancedoperations; import static com.google.ads.googleads.examples.utils.CodeSampleHelper.getPrintableDateTime; import com.beust.jcommander.Parameter; import com.google.ads.googleads.examples.utils.ArgumentNames; import com.google.ads.googleads.examples.utils.CodeSampleParams; import com.google.ads.googleads.lib.GoogleAdsClient; import com.google.ads.googleads.v25.common.KeywordInfo; import com.google.ads.googleads.v25.enums.KeywordMatchTypeEnum.KeywordMatchType; import com.google.ads.googleads.v25.enums.SharedSetTypeEnum.SharedSetType; import com.google.ads.googleads.v25.errors.GoogleAdsError; import com.google.ads.googleads.v25.errors.GoogleAdsException; import com.google.ads.googleads.v25.resources.CampaignSharedSet; import com.google.ads.googleads.v25.resources.SharedCriterion; import com.google.ads.googleads.v25.resources.SharedSet; import com.google.ads.googleads.v25.services.CampaignSharedSetOperation; import com.google.ads.googleads.v25.services.CampaignSharedSetServiceClient; import com.google.ads.googleads.v25.services.MutateCampaignSharedSetsResponse; import com.google.ads.googleads.v25.services.MutateSharedCriteriaResponse; import com.google.ads.googleads.v25.services.MutateSharedCriterionResult; import com.google.ads.googleads.v25.services.MutateSharedSetsResponse; import com.google.ads.googleads.v25.services.SharedCriterionOperation; import com.google.ads.googleads.v25.services.SharedCriterionServiceClient; import com.google.ads.googleads.v25.services.SharedSetOperation; import com.google.ads.googleads.v25.services.SharedSetServiceClient; import com.google.ads.googleads.v25.utils.ResourceNames; import com.google.common.collect.ImmutableList; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** Creates a shared list of negative broad match keywords. It then attaches them to a campaign. */ public class CreateAndAttachSharedKeywordSet { private static class CreateAndAttachSharedKeywordSetParams extends CodeSampleParams { @Parameter(names = ArgumentNames.CUSTOMER_ID, required = true) private Long customerId; @Parameter(names = ArgumentNames.CAMPAIGN_ID, required = true) private Long campaignId; } public static void main(String[] args) throws IOException { CreateAndAttachSharedKeywordSetParams params = new CreateAndAttachSharedKeywordSetParams(); if (!params.parseArguments(args)) { // Either pass the required parameters for this example on the command line, or insert them // into the code here. See the parameter class definition above for descriptions. params.customerId = Long.parseLong("INSERT_CUSTOMER_ID_HERE"); params.campaignId = Long.parseLong("INSERT_CAMPAIGN_ID_HERE"); } GoogleAdsClient googleAdsClient = null; try { googleAdsClient = GoogleAdsClient.newBuilder().fromPropertiesFile().build(); } catch (FileNotFoundException fnfe) { System.err.printf( "Failed to load GoogleAdsClient configuration from file. Exception: %s%n", fnfe); System.exit(1); } catch (IOException ioe) { System.err.printf("Failed to create GoogleAdsClient. Exception: %s%n", ioe); System.exit(1); } try { new CreateAndAttachSharedKeywordSet() .runExample(googleAdsClient, params.customerId, params.campaignId); } catch (GoogleAdsException gae) { // GoogleAdsException is the base class for most exceptions thrown by an API request. // Instances of this exception have a message and a GoogleAdsFailure that contains a // collection of GoogleAdsErrors that indicate the underlying causes of the // GoogleAdsException. System.err.printf( "Request ID %s failed due to GoogleAdsException. Underlying errors:%n", gae.getRequestId()); int i = 0; for (GoogleAdsError googleAdsError : gae.getGoogleAdsFailure().getErrorsList()) { System.err.printf(" Error %d: %s%n", i++, googleAdsError); } System.exit(1); } } /** * Runs the example. * * @param googleAdsClient the Google Ads API client. * @param customerId the client customer ID. * @param campaignId the campaign ID. * @throws GoogleAdsException if an API request failed with one or more service errors. */ private void runExample(GoogleAdsClient googleAdsClient, long customerId, long campaignId) { // Creates a keywords list to create a shared set of. List<String> keywords = Arrays.asList("mars cruise", "mars hotels"); // Creates shared negative keyword set. SharedSet sharedSet = SharedSet.newBuilder() .setName("API Negative keyword list - " + getPrintableDateTime()) .setType(SharedSetType.NEGATIVE_KEYWORDS) .build(); SharedSetOperation operation = SharedSetOperation.newBuilder().setCreate(sharedSet).build(); String sharedSetResourceName; try (SharedSetServiceClient sharedSetServiceClient = googleAdsClient.getLatestVersion().createSharedSetServiceClient()) { MutateSharedSetsResponse response = sharedSetServiceClient.mutateSharedSets( Long.toString(customerId), ImmutableList.of(operation)); sharedSetResourceName = response.getResults(0).getResourceName(); System.out.printf("Created shared set %s%n", sharedSetResourceName); } List<SharedCriterionOperation> sharedCriterionOperations = new ArrayList<>(); for (String keyword : keywords) { SharedCriterion sharedCriterion = SharedCriterion.newBuilder() .setKeyword( KeywordInfo.newBuilder() .setText(keyword) .setMatchType(KeywordMatchType.BROAD) .build()) .setSharedSet(sharedSetResourceName) .build(); SharedCriterionOperation sharedCriterionOperation = SharedCriterionOperation.newBuilder().setCreate(sharedCriterion).build(); sharedCriterionOperations.add(sharedCriterionOperation); } try (SharedCriterionServiceClient sharedCriterionServiceClient = googleAdsClient.getLatestVersion().createSharedCriterionServiceClient()) { MutateSharedCriteriaResponse response = sharedCriterionServiceClient.mutateSharedCriteria( Long.toString(customerId), sharedCriterionOperations); System.out.printf("Added %d shared criteria:%n", response.getResultsCount()); for (MutateSharedCriterionResult result : response.getResultsList()) { System.out.printf("\t%s%n", result.getResourceName()); } } String campaignResourceName = ResourceNames.campaign(customerId, campaignId); CampaignSharedSet campaignSharedSet = CampaignSharedSet.newBuilder() .setCampaign(campaignResourceName) .setSharedSet(sharedSetResourceName) .build(); CampaignSharedSetOperation campaignSharedSetOperation = CampaignSharedSetOperation.newBuilder().setCreate(campaignSharedSet).build(); try (CampaignSharedSetServiceClient campaignSharedSetServiceClient = googleAdsClient.getLatestVersion().createCampaignSharedSetServiceClient()) { MutateCampaignSharedSetsResponse response = campaignSharedSetServiceClient.mutateCampaignSharedSets( Long.toString(customerId), ImmutableList.of(campaignSharedSetOperation)); String campaignSharedSetResourceName = response.getResults(0).getResourceName(); System.out.printf("Created campaign shared set %s%n", campaignSharedSetResourceName); } } }
C#
// Copyright 2019 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. using CommandLine; using Google.Ads.Gax.Examples; using Google.Ads.GoogleAds.Lib; using Google.Ads.GoogleAds.V25.Common; using Google.Ads.GoogleAds.V25.Errors; using Google.Ads.GoogleAds.V25.Resources; using Google.Ads.GoogleAds.V25.Services; using System; using System.Collections.Generic; using static Google.Ads.GoogleAds.V25.Enums.KeywordMatchTypeEnum.Types; using static Google.Ads.GoogleAds.V25.Enums.SharedSetTypeEnum.Types; namespace Google.Ads.GoogleAds.Examples.V25 { /// <summary> /// This code example creates a shared list of negative broad match keywords. It then /// attaches them to a campaign. /// </summary> public class CreateAndAttachSharedKeywordSet : ExampleBase { /// <summary> /// Command line options for running the <see cref="CreateAndAttachSharedKeywordSet"/> /// example. /// </summary> public class Options : OptionsBase { /// <summary> /// The Google Ads customer ID for which the call is made. /// </summary> [Option("customerId", Required = true, HelpText = "The Google Ads customer ID for which the call is made.")] public long CustomerId { get; set; } /// <summary> /// The ID of the campaign for which shared criterion is updated. /// </summary> [Option("campaignId", Required = true, HelpText = "The ID of the campaign for which shared criterion is updated.")] public long CampaignId { get; set; } } /// <summary> /// Main method, to run this code example as a standalone application. /// </summary> /// <param name="args">The command line arguments.</param> public static void Main(string[] args) { Options options = ExampleUtilities.ParseCommandLine<Options>(args); CreateAndAttachSharedKeywordSet codeExample = new CreateAndAttachSharedKeywordSet(); Console.WriteLine(codeExample.Description); codeExample.Run(new GoogleAdsClient(), options.CustomerId, options.CampaignId); } /// <summary> /// Returns a description about the code example. /// </summary> public override string Description => "This code example creates a shared list of negative broad match keywords. It then " + "attaches them to a campaign."; /// <summary> /// Runs the code example. /// </summary> /// <param name="client">The Google Ads client.</param> /// <param name="customerId">The Google Ads customer ID for which the call is made.</param> /// <param name="campaignId">The ID of the campaign for which shared criterion is updated. /// </param> public void Run(GoogleAdsClient client, long customerId, long campaignId) { SharedSetServiceClient sharedSetService = client.GetService( Services.V25.SharedSetService); SharedCriterionServiceClient sharedCriterionService = client.GetService(Services.V25.SharedCriterionService); CampaignSharedSetServiceClient campaignSharedSetService = client.GetService(Services.V25.CampaignSharedSetService); try { // Keywords to create a shared set of. string[] keywords = new string[] { "mars cruise", "mars hotels" }; // Create shared negative keyword set. SharedSet sharedSet = new SharedSet() { Name = "API Negative keyword list - " + ExampleUtilities.GetRandomString(), Type = SharedSetType.NegativeKeywords, }; SharedSetOperation operation = new SharedSetOperation() { Create = sharedSet }; MutateSharedSetsResponse sharedSetResponse = sharedSetService.MutateSharedSets( customerId.ToString(), new SharedSetOperation[] { operation }); string sharedSetResourceName = sharedSetResponse.Results[0].ResourceName; Console.WriteLine($"Created shared set {sharedSetResourceName}."); // Create negative keywords in the shared set. List<SharedCriterionOperation> criterionOperations = new List<SharedCriterionOperation>(); foreach (string keyword in keywords) { SharedCriterion sharedCriterion = new SharedCriterion() { Keyword = new KeywordInfo() { Text = keyword, MatchType = KeywordMatchType.Broad }, SharedSet = sharedSetResourceName }; criterionOperations.Add(new SharedCriterionOperation() { Create = sharedCriterion }); } MutateSharedCriteriaResponse criteriaResponse = sharedCriterionService.MutateSharedCriteria( customerId.ToString(), criterionOperations); foreach (MutateSharedCriterionResult result in criteriaResponse.Results) { Console.WriteLine($"Created shared criterion {result.ResourceName}."); } // Attach shared set to campaign. CampaignSharedSet campaignSet = new CampaignSharedSet() { Campaign = ResourceNames.Campaign(customerId, campaignId), SharedSet = sharedSetResourceName }; CampaignSharedSetOperation sharedSetoperation = new CampaignSharedSetOperation() { Create = campaignSet }; MutateCampaignSharedSetsResponse response = campaignSharedSetService.MutateCampaignSharedSets(customerId.ToString(), new CampaignSharedSetOperation[] { sharedSetoperation }); Console.WriteLine("Created campaign shared set {0}.", response.Results[0].ResourceName); } catch (GoogleAdsException e) { Console.WriteLine("Failure:"); Console.WriteLine($"Message: {e.Message}"); Console.WriteLine($"Failure: {e.Failure}"); Console.WriteLine($"Request ID: {e.RequestId}"); throw; } } } }
PHP
<?php /** * Copyright 2018 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ namespace Google\Ads\GoogleAds\Examples\AdvancedOperations; require __DIR__ . '/../../vendor/autoload.php'; use GetOpt\GetOpt; use Google\Ads\GoogleAds\Examples\Utils\ArgumentNames; use Google\Ads\GoogleAds\Examples\Utils\ArgumentParser; use Google\Ads\GoogleAds\Examples\Utils\Helper; use Google\Ads\GoogleAds\Lib\V25\GoogleAdsClient; use Google\Ads\GoogleAds\Lib\V25\GoogleAdsClientBuilder; use Google\Ads\GoogleAds\Lib\V25\GoogleAdsException; use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder; use Google\Ads\GoogleAds\Util\V25\ResourceNames; use Google\Ads\GoogleAds\V25\Common\KeywordInfo; use Google\Ads\GoogleAds\V25\Enums\KeywordMatchTypeEnum\KeywordMatchType; use Google\Ads\GoogleAds\V25\Enums\SharedSetTypeEnum\SharedSetType; use Google\Ads\GoogleAds\V25\Errors\GoogleAdsError; use Google\Ads\GoogleAds\V25\Resources\CampaignSharedSet; use Google\Ads\GoogleAds\V25\Resources\SharedCriterion; use Google\Ads\GoogleAds\V25\Resources\SharedSet; use Google\Ads\GoogleAds\V25\Services\CampaignSharedSetOperation; use Google\Ads\GoogleAds\V25\Services\MutateCampaignSharedSetsRequest; use Google\Ads\GoogleAds\V25\Services\MutateSharedCriteriaRequest; use Google\Ads\GoogleAds\V25\Services\MutateSharedSetsRequest; use Google\Ads\GoogleAds\V25\Services\SharedCriterionOperation; use Google\Ads\GoogleAds\V25\Services\SharedSetOperation; use Google\ApiCore\ApiException; /** * This example creates a shared list of negative broad match keywords. It then attaches them to a * campaign. */ class CreateAndAttachSharedKeywordSet { private const CUSTOMER_ID = 'INSERT_CUSTOMER_ID_HERE'; private const CAMPAIGN_ID = 'INSERT_CAMPAIGN_ID_HERE'; public static function main() { // Either pass the required parameters for this example on the command line, or insert them // into the constants above. $options = (new ArgumentParser())->parseCommandArguments( [ ArgumentNames::CUSTOMER_ID => GetOpt::REQUIRED_ARGUMENT, ArgumentNames::CAMPAIGN_ID => GetOpt::REQUIRED_ARGUMENT ] ); // Generate a refreshable OAuth2 credential for authentication. $oAuth2Credential = (new OAuth2TokenBuilder())->fromFile()->build(); // Construct a Google Ads client configured from a properties file and the // OAuth2 credentials above. $googleAdsClient = (new GoogleAdsClientBuilder())->fromFile() ->withOAuth2Credential($oAuth2Credential) ->build(); try { self::runExample( $googleAdsClient, $options[ArgumentNames::CUSTOMER_ID] ?: self::CUSTOMER_ID, $options[ArgumentNames::CAMPAIGN_ID] ?: self::CAMPAIGN_ID ); } catch (GoogleAdsException $googleAdsException) { printf( "Request with ID '%s' has failed.%sGoogle Ads failure details:%s", $googleAdsException->getRequestId(), PHP_EOL, PHP_EOL ); foreach ($googleAdsException->getGoogleAdsFailure()->getErrors() as $error) { /** * @var GoogleAdsError $error */ printf( "\t%s: %s%s", $error->getErrorCode()->getErrorCode(), $error->getMessage(), PHP_EOL ); } exit(1); } catch (ApiException $apiException) { printf( "ApiException was thrown with message '%s'.%s", $apiException->getMessage(), PHP_EOL ); exit(1); } } /** * Runs the example. * * @param GoogleAdsClient $googleAdsClient the Google Ads API client * @param int $customerId the customer ID * @param int $campaignId the ID of the campaign */ public static function runExample( GoogleAdsClient $googleAdsClient, int $customerId, int $campaignId ) { // Create shared negative keyword set. $sharedSet = new SharedSet( [ 'name' => 'API Negative keyword list - ' . Helper::getPrintableDatetime(), 'type' => SharedSetType::NEGATIVE_KEYWORDS, ] ); $sharedSetOperation = new SharedSetOperation(); $sharedSetOperation->setCreate($sharedSet); $sharedSetServiceClient = $googleAdsClient->getSharedSetServiceClient(); $response = $sharedSetServiceClient->mutateSharedSets( MutateSharedSetsRequest::build( $customerId, [$sharedSetOperation] ) ); $sharedSetResourceName = $response->getResults()[0]->getResourceName(); print 'Created shared set ' . $sharedSetResourceName . PHP_EOL; // Creates shared set criteria. $sharedCriterionOperations = []; // Keywords to create a shared set of. $keywords = ['mars cruise', 'mars hotels']; foreach ($keywords as $keyword) { $sharedCriterion = new SharedCriterion( [ 'keyword' => new KeywordInfo( [ 'text' => $keyword, 'match_type' => KeywordMatchType::BROAD ] ), 'shared_set' => $sharedSetResourceName ] ); $sharedCriterionOperation = new SharedCriterionOperation(); $sharedCriterionOperation->setCreate($sharedCriterion); $sharedCriterionOperations[] = $sharedCriterionOperation; } $sharedCriterionServiceClient = $googleAdsClient->getSharedCriterionServiceClient(); $response = $sharedCriterionServiceClient->mutateSharedCriteria( MutateSharedCriteriaRequest::build($customerId, $sharedCriterionOperations) ); printf("Added %d shared criteria:%s", $response->getResults()->count(), PHP_EOL); foreach ($response->getResults() as $addedSharedCriterion) { /** * @var SharedCriterion $addedSharedCriterion */ print "\t" . $addedSharedCriterion->getResourceName() . PHP_EOL; } // Creates campaign shared set. $campaignSharedSet = new CampaignSharedSet( [ 'campaign' => ResourceNames::forCampaign($customerId, $campaignId), 'shared_set' => $sharedSetResourceName ] ); $campaignSharedSetOperation = new CampaignSharedSetOperation(); $campaignSharedSetOperation->setCreate($campaignSharedSet); $campaignSharedSetServiceClient = $googleAdsClient->getCampaignSharedSetServiceClient(); $response = $campaignSharedSetServiceClient->mutateCampaignSharedSets( MutateCampaignSharedSetsRequest::build($customerId, [$campaignSharedSetOperation]) ); print 'Created campaign shared set: ' . $response->getResults()[0]->getResourceName() . PHP_EOL; } } CreateAndAttachSharedKeywordSet::main();
Python
#!/usr/bin/env python # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Demonstrates how to create a shared list of negative broad match keywords. Note that the keywords will be attached to the specified campaign. """ import argparse import sys from typing import List import uuid from google.ads.googleads.client import GoogleAdsClient from google.ads.googleads.errors import GoogleAdsException from google.ads.googleads.v24.errors.types.errors import GoogleAdsError from google.ads.googleads.v24.resources.types.campaign_shared_set import ( CampaignSharedSet, ) from google.ads.googleads.v24.resources.types.shared_criterion import ( SharedCriterion, ) from google.ads.googleads.v24.resources.types.shared_set import SharedSet from google.ads.googleads.v24.services.services.campaign_service import ( CampaignServiceClient, ) from google.ads.googleads.v24.services.services.campaign_shared_set_service import ( CampaignSharedSetServiceClient, ) from google.ads.googleads.v24.services.types.campaign_shared_set_service import ( CampaignSharedSetOperation, MutateCampaignSharedSetsResponse, ) from google.ads.googleads.v24.services.services.shared_criterion_service import ( SharedCriterionServiceClient, ) from google.ads.googleads.v24.services.services.shared_set_service import ( SharedSetServiceClient, ) from google.ads.googleads.v24.services.types.shared_criterion_service import ( MutateSharedCriteriaResponse, MutateSharedCriterionResult, SharedCriterionOperation, ) from google.ads.googleads.v24.services.types.shared_set_service import ( MutateSharedSetsResponse, SharedSetOperation, ) def main(client: GoogleAdsClient, customer_id: str, campaign_id: str) -> None: campaign_service: CampaignServiceClient = client.get_service( "CampaignService" ) shared_set_service: SharedSetServiceClient = client.get_service( "SharedSetService" ) shared_criterion_service: SharedCriterionServiceClient = client.get_service( "SharedCriterionService" ) campaign_shared_set_service: CampaignSharedSetServiceClient = ( client.get_service("CampaignSharedSetService") ) # Create shared negative keyword set. shared_set_operation: SharedSetOperation = client.get_type( "SharedSetOperation" ) shared_set: SharedSet = shared_set_operation.create shared_set.name = f"API Negative keyword list - {uuid.uuid4()}" shared_set.type_ = client.enums.SharedSetTypeEnum.NEGATIVE_KEYWORDS try: shared_set_response: MutateSharedSetsResponse = ( shared_set_service.mutate_shared_sets( customer_id=customer_id, operations=[shared_set_operation] ) ) shared_set_resource_name: str = shared_set_response.results[ 0 ].resource_name print(f'Created shared set "{shared_set_resource_name}".') except GoogleAdsException as ex: handle_googleads_exception(ex) # Keywords to create a shared set of. keywords: List[str] = ["mars cruise", "mars hotels"] shared_criteria_operations: List[SharedCriterionOperation] = [] for keyword in keywords: shared_criterion_operation: SharedCriterionOperation = client.get_type( "SharedCriterionOperation" ) shared_criterion: SharedCriterion = shared_criterion_operation.create shared_criterion.keyword.text = keyword shared_criterion.keyword.match_type = ( client.enums.KeywordMatchTypeEnum.BROAD ) shared_criterion.shared_set = shared_set_resource_name shared_criteria_operations.append(shared_criterion_operation) try: response: MutateSharedCriteriaResponse = ( shared_criterion_service.mutate_shared_criteria( customer_id=customer_id, operations=shared_criteria_operations ) ) shared_criterion_result: MutateSharedCriterionResult for shared_criterion_result in response.results: print( "Created shared criterion " f'"{shared_criterion_result.resource_name}".' ) except GoogleAdsException as ex: handle_googleads_exception(ex) campaign_set_operation: CampaignSharedSetOperation = client.get_type( "CampaignSharedSetOperation" ) campaign_set: CampaignSharedSet = campaign_set_operation.create campaign_set.campaign = campaign_service.campaign_path( customer_id, campaign_id ) campaign_set.shared_set = shared_set_resource_name try: campaign_shared_set_response: MutateCampaignSharedSetsResponse = ( campaign_shared_set_service.mutate_campaign_shared_sets( customer_id=customer_id, operations=[campaign_set_operation] ) ) print( "Created campaign shared set " f'"{campaign_shared_set_response.results[0].resource_name}".' ) except GoogleAdsException as ex: handle_googleads_exception(ex) def handle_googleads_exception(exception: GoogleAdsException) -> None: print( f'Request with ID "{exception.request_id}" failed with status ' f'"{exception.error.code().name}" and includes the following errors:' ) error: GoogleAdsError for error in exception.failure.errors: print(f'\tError with message "{error.message}".') if error.location: for field_path_element in error.location.field_path_elements: print(f"\t\tOn field: {field_path_element.field_name}") sys.exit(1) if __name__ == "__main__": parser = argparse.ArgumentParser( description=( "Adds a list of negative broad match keywords to the " "provided campaign, for the specified customer." ) ) # The following argument(s) should be provided to run the example. parser.add_argument( "-c", "--customer_id", type=str, required=True, help="The Google Ads customer ID.", ) parser.add_argument( "-i", "--campaign_id", type=str, required=True, help="The campaign ID." ) args = parser.parse_args() # GoogleAdsClient will read the google-ads.yaml configuration file in the # home directory if none is specified. googleads_client: GoogleAdsClient = GoogleAdsClient.load_from_storage( version="v24" ) main(googleads_client, args.customer_id, args.campaign_id)
Ruby
#!/usr/bin/env ruby # Encoding: utf-8 # # Copyright 2018 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # This example creates a shared list of negative broad match keywords. It then # attaches them to a campaign. require "optparse" require "google/ads/google_ads" require "date" def create_and_attach_shared_keyword_set(customer_id, campaign_id) # GoogleAdsClient will read a config file from # ENV['HOME']/google_ads_config.rb when called without parameters client = Google::Ads::GoogleAds::GoogleAdsClient.new # Keywords to create a shared set of. keywords = ["mars cruise", "mars hotels"] # Create shared negative keyword set. shared_set = client.resource.shared_set do |ss| ss.name = "API Negative keyword list - #{(Time.new.to_f * 1000).to_i}" ss.type = :NEGATIVE_KEYWORDS end operation = client.operation.create_resource.shared_set(shared_set) response = client.service.shared_set.mutate_shared_sets( customer_id: customer_id, operations: [operation], ) shared_set_resource_name = response.results.first.resource_name puts "Created shared set #{shared_set_resource_name}" shared_criteria = keywords.map do |keyword| client.resource.shared_criterion do |sc| sc.keyword = client.resource.keyword_info do |kw| kw.text = keyword kw.match_type = :BROAD end sc.shared_set = shared_set_resource_name end end operations = shared_criteria.map do |criterion| client.operation.create_resource.shared_criterion(criterion) end response = client.service.shared_criterion.mutate_shared_criteria( customer_id: customer_id, operations: operations, ) response.results.each do |result| puts "Created shared criterion #{result.resource_name}" end campaign_set = client.resource.campaign_shared_set do |css| css.campaign = client.path.campaign(customer_id, campaign_id) css.shared_set = shared_set_resource_name end operation = client.operation.create_resource.campaign_shared_set(campaign_set) response = client.service.campaign_shared_set.mutate_campaign_shared_sets( customer_id: customer_id, operations: [operation], ) puts "Created campaign shared set #{response.results.first.resource_name}" end if __FILE__ == $PROGRAM_NAME options = {} # The following parameter(s) should be provided to run the example. You can # either specify these by changing the INSERT_XXX_ID_HERE values below, or on # the command line. # # Parameters passed on the command line will override any parameters set in # code. # # Running the example with -h will print the command line usage. options[:customer_id] = 'INSERT_CUSTOMER_ID_HERE' options[:campaign_id] = 'INSERT_CAMPAIGN_ID_HERE' OptionParser.new do |opts| opts.banner = sprintf('Usage: ruby %s [options]', File.basename(__FILE__)) opts.separator '' opts.separator 'Options:' opts.on('-C', '--customer-id CUSTOMER-ID', String, 'Customer ID') do |v| options[:customer_id] = v end opts.on('-c', '--campaign-id CAMPAIGN-ID', String, 'Campaign ID') do |v| options[:campaign_id] = v end opts.separator '' opts.separator 'Help:' opts.on_tail('-h', '--help', 'Show this message') do puts opts exit end end.parse! begin create_and_attach_shared_keyword_set(options.fetch(:customer_id).tr("-", ""), options[:campaign_id]) rescue Google::Ads::GoogleAds::Errors::GoogleAdsError => e e.failure.errors.each do |error| STDERR.printf("Error with message: %s\n", error.message) if error.location error.location.field_path_elements.each do |field_path_element| STDERR.printf("\tOn field: %s\n", field_path_element.field_name) end end error.error_code.to_h.each do |k, v| next if v == :UNSPECIFIED STDERR.printf("\tType: %s\n\tCode: %s\n", k, v) end end raise end end
Perl
#!/usr/bin/perl -w # # Copyright 2019, Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # # This example creates a shared list of negative broad match keywords. It then # attaches them to a campaign. use strict; use warnings; use utf8; use FindBin qw($Bin); use lib "$Bin/../../lib"; use Google::Ads::GoogleAds::Client; use Google::Ads::GoogleAds::Utils::GoogleAdsHelper; use Google::Ads::GoogleAds::V25::Resources::SharedSet; use Google::Ads::GoogleAds::V25::Resources::SharedCriterion; use Google::Ads::GoogleAds::V25::Resources::CampaignSharedSet; use Google::Ads::GoogleAds::V25::Common::KeywordInfo; use Google::Ads::GoogleAds::V25::Enums::SharedSetTypeEnum qw(NEGATIVE_KEYWORDS); use Google::Ads::GoogleAds::V25::Enums::KeywordMatchTypeEnum qw(BROAD); use Google::Ads::GoogleAds::V25::Services::SharedSetService::SharedSetOperation; use Google::Ads::GoogleAds::V25::Services::SharedCriterionService::SharedCriterionOperation; use Google::Ads::GoogleAds::V25::Services::CampaignSharedSetService::CampaignSharedSetOperation; use Google::Ads::GoogleAds::V25::Utils::ResourceNames; use Getopt::Long qw(:config auto_help); use Pod::Usage; use Cwd qw(abs_path); use Data::Uniqid qw(uniqid); # The following parameter(s) should be provided to run the example. You can # either specify these by changing the INSERT_XXX_ID_HERE values below, or on # the command line. # # Parameters passed on the command line will override any parameters set in # code. # # Running the example with -h will print the command line usage. my $customer_id = "INSERT_CUSTOMER_ID_HERE"; my $campaign_id = "INSERT_CAMPAIGN_ID_HERE"; sub create_and_attach_shared_keyword_set { my ($api_client, $customer_id, $campaign_id) = @_; # Create shared negative keyword set. my $shared_set = Google::Ads::GoogleAds::V25::Resources::SharedSet->new({ name => "API Negative keyword list - " . uniqid(), type => NEGATIVE_KEYWORDS }); my $shared_set_operation = Google::Ads::GoogleAds::V25::Services::SharedSetService::SharedSetOperation ->new({ create => $shared_set }); my $shared_sets_response = $api_client->SharedSetService()->mutate({ customerId => $customer_id, operations => [$shared_set_operation]}); my $shared_set_resource_name = $shared_sets_response->{results}[0]{resourceName}; printf "Created shared set: '%s'.\n", $shared_set_resource_name; # Create shared set criterion. my $shared_criterion_operations = []; # Keywords to create a shared set of. my $keywords = ['mars cruise', 'mars hotels']; foreach my $keyword (@$keywords) { my $shared_criterion = Google::Ads::GoogleAds::V25::Resources::SharedCriterion->new({ keyword => Google::Ads::GoogleAds::V25::Common::KeywordInfo->new({ text => $keyword, matchType => BROAD } ), sharedSet => $shared_set_resource_name }); my $shared_criterion_operation = Google::Ads::GoogleAds::V25::Services::SharedCriterionService::SharedCriterionOperation ->new({ create => $shared_criterion }); push @$shared_criterion_operations, $shared_criterion_operation; } my $shared_criteria_response = $api_client->SharedCriterionService()->mutate({ customerId => $customer_id, operations => $shared_criterion_operations }); my $shared_criterion_results = $shared_criteria_response->{results}; printf "Added %d shared criterion:\n", scalar @$shared_criterion_results; foreach my $shared_criterion_result (@$shared_criterion_results) { printf "\t%s\n", $shared_criterion_result->{resourceName}; } # Create campaign shared set. my $campaign_shared_set = Google::Ads::GoogleAds::V25::Resources::CampaignSharedSet->new({ campaign => Google::Ads::GoogleAds::V25::Utils::ResourceNames::campaign( $customer_id, $campaign_id ), sharedSet => $shared_set_resource_name }); my $campaign_shared_set_operation = Google::Ads::GoogleAds::V25::Services::CampaignSharedSetService::CampaignSharedSetOperation ->new({ create => $campaign_shared_set }); my $campaign_shared_sets_response = $api_client->CampaignSharedSetService()->mutate({ customerId => $customer_id, operations => [$campaign_shared_set_operation]}); printf "Created campaign shared set: '%s'.\n", $campaign_shared_sets_response->{results}[0]{resourceName}; return 1; } # Don't run the example if the file is being included. if (abs_path($0) ne abs_path(__FILE__)) { return 1; } # Get Google Ads Client, credentials will be read from ~/googleads.properties. my $api_client = Google::Ads::GoogleAds::Client->new(); # By default examples are set to die on any server returned fault. $api_client->set_die_on_faults(1); # Parameters passed on the command line will override any parameters set in code. GetOptions("customer_id=s" => \$customer_id, "campaign_id=i" => \$campaign_id); # Print the help message if the parameters are not initialized in the code nor # in the command line. pod2usage(2) if not check_params($customer_id, $campaign_id); # Call the example. create_and_attach_shared_keyword_set($api_client, $customer_id =~ s/-//gr, $campaign_id); =pod =head1 NAME create_and_attach_shared_keyword_set =head1 DESCRIPTION This example creates a shared list of negative broad match keywords. It then attaches them to a campaign. =head1 SYNOPSIS create_and_attach_shared_keyword_set.pl [options] -help Show the help message. -customer_id The Google Ads customer ID. -campaign_id The campaign ID. =cut