Find And Remove Criteria From Shared Set

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 
  
 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.v21.enums.CriterionTypeEnum.CriterionType 
 ; 
 import 
  
 com.google.ads.googleads.v21.errors.GoogleAdsError 
 ; 
 import 
  
 com.google.ads.googleads.v21.errors.GoogleAdsException 
 ; 
 import 
  
 com.google.ads.googleads.v21.resources.SharedCriterion 
 ; 
 import 
  
 com.google.ads.googleads.v21.resources.SharedSet 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.GoogleAdsRow 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.GoogleAdsServiceClient 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.GoogleAdsServiceClient.SearchPagedResponse 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.MutateSharedCriteriaResponse 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.MutateSharedCriterionResult 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.SearchGoogleAdsRequest 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.SharedCriterionOperation 
 ; 
 import 
  
 com.google.ads.googleads.v21.services.SharedCriterionServiceClient 
 ; 
 import 
  
 com.google.common.base.Joiner 
 ; 
 import 
  
 java.io.FileNotFoundException 
 ; 
 import 
  
 java.io.IOException 
 ; 
 import 
  
 java.util.ArrayList 
 ; 
 import 
  
 java.util.List 
 ; 
 /** 
 * Demonstrates how to find shared sets, how to find shared set criteria, and how to remove shared 
 * set criteria. 
 */ 
 public 
  
 class 
 FindAndRemoveCriteriaFromSharedSet 
  
 { 
  
 private 
  
 static 
  
 class 
 FindAndRemoveCriteriaFromSharedSetParams 
  
 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 
  
 { 
  
 FindAndRemoveCriteriaFromSharedSetParams 
  
 params 
  
 = 
  
 new 
  
 FindAndRemoveCriteriaFromSharedSetParams 
 (); 
  
 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 
  
 FindAndRemoveCriteriaFromSharedSet 
 () 
  
 . 
 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 
 ) 
  
 { 
  
 List<Long> 
  
 sharedSetIds 
  
 = 
  
 new 
  
 ArrayList 
<> (); 
  
 List<String> 
  
 criterionResourceNames 
  
 = 
  
 new 
  
 ArrayList 
<> (); 
  
 // Retrieves all shared sets associated with the campaign. 
  
 try 
  
 ( 
 GoogleAdsServiceClient 
  
 googleAdsServiceClient 
  
 = 
  
 googleAdsClient 
 . 
 getLatestVersion 
 (). 
 createGoogleAdsServiceClient 
 ()) 
  
 { 
  
 String 
  
 searchQuery 
  
 = 
  
 String 
 . 
 format 
 ( 
  
 "SELECT shared_set.id, shared_set.name FROM campaign_shared_set WHERE " 
  
 + 
  
 "campaign.id = %d" 
 , 
  
 campaignId 
 ); 
  
 SearchGoogleAdsRequest 
  
 request 
  
 = 
  
 SearchGoogleAdsRequest 
 . 
 newBuilder 
 () 
  
 . 
 setCustomerId 
 ( 
 Long 
 . 
 toString 
 ( 
 customerId 
 )) 
  
 . 
 setQuery 
 ( 
 searchQuery 
 ) 
  
 . 
 build 
 (); 
  
 SearchPagedResponse 
  
 searchPagedResponse 
  
 = 
  
 googleAdsServiceClient 
 . 
 search 
 ( 
 request 
 ); 
  
 for 
  
 ( 
 GoogleAdsRow 
  
 googleAdsRow 
  
 : 
  
 searchPagedResponse 
 . 
 iterateAll 
 ()) 
  
 { 
  
 SharedSet 
  
 sharedSet 
  
 = 
  
 googleAdsRow 
 . 
 getSharedSet 
 (); 
  
 System 
 . 
 out 
 . 
 printf 
 ( 
  
 "Campaign shared set with ID %d and name '%s' was found.%n" 
 , 
  
 sharedSet 
 . 
 getId 
 (), 
  
 sharedSet 
 . 
 getName 
 ()); 
  
 sharedSetIds 
 . 
 add 
 ( 
 sharedSet 
 . 
 getId 
 ()); 
  
 } 
  
 } 
  
 // Retrieves shared criteria for all found shared sets. 
  
 try 
  
 ( 
 GoogleAdsServiceClient 
  
 googleAdsServiceClient 
  
 = 
  
 googleAdsClient 
 . 
 getLatestVersion 
 (). 
 createGoogleAdsServiceClient 
 ()) 
  
 { 
  
 String 
  
 searchQuery 
  
 = 
  
 String 
 . 
 format 
 ( 
  
 "SELECT shared_criterion.type, shared_criterion.keyword.text, " 
  
 + 
  
 "  shared_criterion.keyword.match_type, shared_set.id " 
  
 + 
  
 "  FROM shared_criterion " 
  
 + 
  
 "  WHERE shared_set.id IN (%s)" 
 , 
  
 Joiner 
 . 
 on 
 ( 
 "," 
 ). 
 join 
 ( 
 sharedSetIds 
 )); 
  
 SearchGoogleAdsRequest 
  
 request 
  
 = 
  
 SearchGoogleAdsRequest 
 . 
 newBuilder 
 () 
  
 . 
 setCustomerId 
 ( 
 Long 
 . 
 toString 
 ( 
 customerId 
 )) 
  
 . 
 setQuery 
 ( 
 searchQuery 
 ) 
  
 . 
 build 
 (); 
  
 SearchPagedResponse 
  
 searchPagedResponse 
  
 = 
  
 googleAdsServiceClient 
 . 
 search 
 ( 
 request 
 ); 
  
 for 
  
 ( 
 GoogleAdsRow 
  
 googleAdsRow 
  
 : 
  
 searchPagedResponse 
 . 
 iterateAll 
 ()) 
  
 { 
  
 SharedCriterion 
  
 sharedCriterion 
  
 = 
  
 googleAdsRow 
 . 
 getSharedCriterion 
 (); 
  
 if 
  
 ( 
 sharedCriterion 
 . 
 getType 
 () 
  
 == 
  
 CriterionType 
 . 
 KEYWORD 
 ) 
  
 { 
  
 System 
 . 
 out 
 . 
 printf 
 ( 
  
 "Shared criterion with resource name '%s' for negative keyword with text '%s' and " 
  
 + 
  
 "match type '%s' was found.%n" 
 , 
  
 sharedCriterion 
 . 
 getResourceName 
 (), 
  
 sharedCriterion 
 . 
 getKeyword 
 (). 
 getText 
 (), 
  
 sharedCriterion 
 . 
 getKeyword 
 (). 
 getMatchType 
 ()); 
  
 } 
  
 else 
  
 { 
  
 System 
 . 
 out 
 . 
 printf 
 ( 
  
 "Shared criterion with resource name '%s' was found." 
 , 
  
 sharedCriterion 
 . 
 getResourceName 
 ()); 
  
 } 
  
 criterionResourceNames 
 . 
 add 
 ( 
 sharedCriterion 
 . 
 getResourceName 
 ()); 
  
 } 
  
 } 
  
 // Removes the criteria. 
  
 try 
  
 ( 
 SharedCriterionServiceClient 
  
 sharedCriterionServiceClient 
  
 = 
  
 googleAdsClient 
 . 
 getLatestVersion 
 (). 
 createSharedCriterionServiceClient 
 ()) 
  
 { 
  
 List<SharedCriterionOperation> 
  
 operations 
  
 = 
  
 new 
  
 ArrayList 
<> (); 
  
 for 
  
 ( 
 String 
  
 criterionResourceName 
  
 : 
  
 criterionResourceNames 
 ) 
  
 { 
  
 SharedCriterionOperation 
  
 operation 
  
 = 
  
 SharedCriterionOperation 
 . 
 newBuilder 
 (). 
 setRemove 
 ( 
 criterionResourceName 
 ). 
 build 
 (); 
  
 operations 
 . 
 add 
 ( 
 operation 
 ); 
  
 } 
  
 // Sends the operation in a mutate request. 
  
 MutateSharedCriteriaResponse 
  
 response 
  
 = 
  
 sharedCriterionServiceClient 
 . 
 mutateSharedCriteria 
 ( 
 Long 
 . 
 toString 
 ( 
 customerId 
 ), 
  
 operations 
 ); 
  
 // Prints the resource name of each removed object. 
  
 for 
  
 ( 
 MutateSharedCriterionResult 
  
 mutateSharedCriterionResult 
  
 : 
  
 response 
 . 
 getResultsList 
 ()) 
  
 { 
  
 System 
 . 
 out 
 . 
 printf 
 ( 
  
 "Removed shared criterion with resource name: '%s'.%n" 
 , 
  
 mutateSharedCriterionResult 
 . 
 getResourceName 
 ()); 
  
 } 
  
 } 
  
 } 
 } 
  
  

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.V21.Errors 
 ; 
 using 
  
 Google.Ads.GoogleAds.V21.Resources 
 ; 
 using 
  
 Google.Ads.GoogleAds.V21.Services 
 ; 
 using 
  
 Google.Api.Gax 
 ; 
 using 
  
 System 
 ; 
 using 
  
 System.Collections.Generic 
 ; 
 using 
  
 static 
  
 Google 
 . 
 Ads 
 . 
 GoogleAds 
 . 
 V21 
 . 
 Enums 
 . 
 CriterionTypeEnum 
 . 
 Types 
 ; 
 namespace 
  
 Google.Ads.GoogleAds.Examples.V21 
 { 
  
 /// <summary> 
  
 /// This code example demonstrates how to find shared sets, shared set criteria, and 
  
 /// how to remove them. 
  
 /// </summary> 
  
 public 
  
 class 
  
 FindAndRemoveCriteriaFromSharedSet 
  
 : 
  
 ExampleBase 
  
 { 
  
 /// <summary> 
  
 /// Command line options for running the <see cref="FindAndRemoveCriteriaFromSharedSet"/> 
  
 /// 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 
 ); 
  
 FindAndRemoveCriteriaFromSharedSet 
  
 codeExample 
  
 = 
  
 new 
  
 FindAndRemoveCriteriaFromSharedSet 
 (); 
  
 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 demonstrates how to find shared sets, shared set criteria, and " 
  
 + 
  
 "how to remove them." 
 ; 
  
 /// <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 
 ) 
  
 { 
  
 try 
  
 { 
  
 SharedCriterionServiceClient 
  
 sharedCriterionService 
  
 = 
  
 client 
 . 
 GetService 
 ( 
  
 Services 
 . 
 V21 
 . 
 SharedCriterionService 
 ); 
  
 GoogleAdsServiceClient 
  
 googleAdsService 
  
 = 
  
 client 
 . 
 GetService 
 ( 
  
 Services 
 . 
 V21 
 . 
 GoogleAdsService 
 ); 
  
 List<long 
 ? 
>  
 sharedSetIds 
  
 = 
  
 new 
  
 List<long 
 ? 
> (); 
  
 List<string> 
  
 criterionResources 
  
 = 
  
 new 
  
 List<string> 
 (); 
  
 // First, retrieve all shared sets associated with the campaign. 
  
 string 
  
 sharedSetQuery 
  
 = 
  
 $"SELECT shared_set.id, shared_set.name FROM " 
  
 + 
  
 $"campaign_shared_set WHERE campaign.id = {campaignId}" 
 ; 
  
 PagedEnumerable<SearchGoogleAdsResponse 
 , 
  
 GoogleAdsRow 
>  
 sharedSetResponse 
  
 = 
  
 googleAdsService 
 . 
 Search 
 ( 
 customerId 
 . 
 ToString 
 (), 
  
 sharedSetQuery 
 ); 
  
 // Display the results. 
  
 foreach 
  
 ( 
 GoogleAdsRow 
  
 googleAdsRow 
  
 in 
  
 sharedSetResponse 
 ) 
  
 { 
  
 SharedSet 
  
 sharedSet 
  
 = 
  
 googleAdsRow 
 . 
 SharedSet 
 ; 
  
 Console 
 . 
 WriteLine 
 ( 
 "Campaign shared set ID {0} and name '{1}' was found." 
 , 
  
 sharedSet 
 . 
 Id 
 , 
  
 sharedSet 
 . 
 Name 
 ); 
  
 sharedSetIds 
 . 
 Add 
 ( 
 sharedSet 
 . 
 Id 
 ); 
  
 } 
  
 // Next, retrieve shared criteria for all found shared sets. 
  
 string 
  
 sharedCriterionQuery 
  
 = 
  
 "SELECT shared_criterion.type, shared_criterion.keyword.text, " 
  
 + 
  
 "shared_criterion.keyword.match_type, shared_set.id FROM shared_criterion " 
  
 + 
  
 $"WHERE shared_set.id IN(" 
  
 + 
  
 string 
 . 
 Join 
 ( 
 "," 
 , 
  
 sharedSetIds 
 . 
 ConvertAll 
 ( 
 x 
  
 = 
>  
 x 
 . 
 ToString 
 ())) 
  
 + 
  
 ")" 
 ; 
  
 PagedEnumerable<SearchGoogleAdsResponse 
 , 
  
 GoogleAdsRow 
>  
 sharedCriterionResponse 
  
 = 
  
 googleAdsService 
 . 
 Search 
 ( 
 customerId 
 . 
 ToString 
 (), 
  
 sharedCriterionQuery 
 ); 
  
 // Display the results. 
  
 foreach 
  
 ( 
 GoogleAdsRow 
  
 googleAdsRow 
  
 in 
  
 sharedCriterionResponse 
 ) 
  
 { 
  
 SharedCriterion 
  
 sharedCriterion 
  
 = 
  
 googleAdsRow 
 . 
 SharedCriterion 
 ; 
  
 if 
  
 ( 
 sharedCriterion 
 . 
 Type 
  
 == 
  
 CriterionType 
 . 
 Keyword 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "Shared criterion with resource name '{0}' for " 
  
 + 
  
 "negative keyword with text '{1}' and match type '{2}' was found." 
 , 
  
 sharedCriterion 
 . 
 ResourceName 
 , 
  
 sharedCriterion 
 . 
 Keyword 
 . 
 Text 
 , 
  
 sharedCriterion 
 . 
 Keyword 
 . 
 MatchType 
 ); 
  
 } 
  
 else 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 "Shared criterion with resource name '{0}' was found." 
 , 
  
 sharedCriterion 
 . 
 ResourceName 
 ); 
  
 } 
  
 criterionResources 
 . 
 Add 
 ( 
 sharedCriterion 
 . 
 ResourceName 
 ); 
  
 } 
  
 // Finally, remove the criteria. 
  
 List<SharedCriterionOperation> 
  
 operations 
  
 = 
  
 new 
  
 List<SharedCriterionOperation> 
 (); 
  
 foreach 
  
 ( 
 string 
  
 criterionResource 
  
 in 
  
 criterionResources 
 ) 
  
 { 
  
 SharedCriterionOperation 
  
 operation 
  
 = 
  
 new 
  
 SharedCriterionOperation 
 () 
  
 { 
  
 Remove 
  
 = 
  
 criterionResource 
  
 }; 
  
 operations 
 . 
 Add 
 ( 
 operation 
 ); 
  
 } 
  
 MutateSharedCriteriaResponse 
  
 response 
  
 = 
  
 sharedCriterionService 
 . 
 MutateSharedCriteria 
 ( 
  
 customerId 
 . 
 ToString 
 (), 
  
 operations 
 ); 
  
 foreach 
  
 ( 
 MutateSharedCriterionResult 
  
 result 
  
 in 
  
 response 
 . 
 Results 
 ) 
  
 { 
  
 Console 
 . 
 WriteLine 
 ( 
 $"Removed shared criterion {result.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\Lib\V21\GoogleAdsClient; 
 use Google\Ads\GoogleAds\Lib\V21\GoogleAdsClientBuilder; 
 use Google\Ads\GoogleAds\Lib\V21\GoogleAdsException; 
 use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder; 
 use Google\Ads\GoogleAds\V21\Enums\CriterionTypeEnum\CriterionType; 
 use Google\Ads\GoogleAds\V21\Enums\KeywordMatchTypeEnum\KeywordMatchType; 
 use Google\Ads\GoogleAds\V21\Errors\GoogleAdsError; 
 use Google\Ads\GoogleAds\V21\Resources\SharedCriterion; 
 use Google\Ads\GoogleAds\V21\Services\GoogleAdsRow; 
 use Google\Ads\GoogleAds\V21\Services\MutateSharedCriteriaRequest; 
 use Google\Ads\GoogleAds\V21\Services\SearchGoogleAdsRequest; 
 use Google\Ads\GoogleAds\V21\Services\SharedCriterionOperation; 
 use Google\ApiCore\ApiException; 
 /** 
 * This example demonstrates how to find shared sets, how to find shared set criteria, and how to 
 * remove shared set criteria. 
 */ 
 class FindAndRemoveCriteriaFromSharedSet 
 { 
 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 
 ) { 
 $sharedSetIds = []; 
 $criterionResourceNames = []; 
 // First, retrieves all shared sets associated with the campaign. 
 $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient(); 
 $query = "SELECT shared_set.id, shared_set.name FROM campaign_shared_set WHERE " 
 . "campaign.id = $campaignId"; 
 // Issues a search request. 
 $response = 
 $googleAdsServiceClient->search(SearchGoogleAdsRequest::build($customerId, $query)); 
 // Iterates over all rows in all pages and prints the requested field values for 
 // the shared set in each row. 
 foreach ($response->iterateAllElements() as $googleAdsRow) { 
 /** @var GoogleAdsRow $googleAdsRow */ 
 printf( 
 "Campaign shared set with ID %d and name '%s' was found.%s", 
 $googleAdsRow->getSharedSet()->getId(), 
 $googleAdsRow->getSharedSet()->getName(), 
 PHP_EOL 
 ); 
 $sharedSetIds[] = $googleAdsRow->getSharedSet()->getId(); 
 } 
 // Next, retrieves shared criteria for all found shared sets. 
 $query = sprintf("SELECT shared_criterion.type, shared_criterion.keyword.text, " 
 . "shared_criterion.keyword.match_type, shared_set.id " 
 . "FROM shared_criterion " 
 . "WHERE shared_set.id IN (%s)", implode(',', $sharedSetIds)); 
 // Issues a search request. 
 $response = 
 $googleAdsServiceClient->search(SearchGoogleAdsRequest::build($customerId, $query)); 
 // Iterates over all rows in all pages and prints the requested field values for 
 // the shared criterion in each row. 
 foreach ($response->iterateAllElements() as $googleAdsRow) { 
 /** @var GoogleAdsRow $googleAdsRow */ 
 $sharedCriterionResourceName = $googleAdsRow->getSharedCriterion()->getResourceName(); 
 if ($googleAdsRow->getSharedCriterion()->getType() === CriterionType::KEYWORD) { 
 printf( 
 "Shared criterion with resource name '%s' for negative keyword with text " 
 . "'%s' and match type '%s' was found.%s", 
 $sharedCriterionResourceName, 
 $googleAdsRow->getSharedCriterion()->getKeyword()->getText(), 
 KeywordMatchType::name( 
 $googleAdsRow->getSharedCriterion()->getKeyword()->getMatchType() 
 ), 
 PHP_EOL 
 ); 
 } else { 
 printf( 
 "Shared criterion with resource name '%s' was found.%s", 
 $sharedCriterionResourceName, 
 PHP_EOL 
 ); 
 } 
 $criterionResourceNames[] = $sharedCriterionResourceName; 
 } 
 // Finally, removes the criteria. 
 $sharedCriterionOperations = []; 
 foreach ($criterionResourceNames as $criterionResourceName) { 
 $sharedCriterionOperation = new SharedCriterionOperation(); 
 $sharedCriterionOperation->setRemove($criterionResourceName); 
 $sharedCriterionOperations[] = $sharedCriterionOperation; 
 } 
 // Sends the operation in a mutate request. 
 $sharedCriterionServiceClient = $googleAdsClient->getSharedCriterionServiceClient(); 
 $response = $sharedCriterionServiceClient->mutateSharedCriteria( 
 MutateSharedCriteriaRequest::build($customerId, $sharedCriterionOperations) 
 ); 
 // Prints the resource name of each removed shared criterion. 
 foreach ($response->getResults() as $removedSharedCriterion) { 
 /** @var SharedCriterion $removedSharedCriterion */ 
 printf( 
 "Removed shared criterion with resource name: '%s'.%s", 
 $removedSharedCriterion->getResourceName(), 
 PHP_EOL 
 ); 
 } 
 } 
 } 
 FindAndRemoveCriteriaFromSharedSet::main(); 
  
  

Python

 #!/usr/bin/env python 
 # Copyright 2020 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 find and remove shared sets, and shared set criteria.""" 
 import 
  
 argparse 
 import 
  
 sys 
 from 
  
 typing 
  
 import 
 List 
 from 
  
 google.ads.googleads.client 
  
 import 
 GoogleAdsClient 
 from 
  
 google.ads.googleads.errors 
  
 import 
 GoogleAdsException 
 from 
  
 google.ads.googleads.v21.common.types.criteria 
  
 import 
 KeywordInfo 
 from 
  
 google.ads.googleads.v21.enums.types.criterion_type 
  
 import 
 ( 
 CriterionTypeEnum 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.errors.types.errors 
  
 import 
 GoogleAdsError 
 from 
  
 google.ads.googleads.v21.resources.types.shared_criterion 
  
 import 
 ( 
 SharedCriterion 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.resources.types.shared_set 
  
 import 
 SharedSet 
 from 
  
 google.ads.googleads.v21.services.services.google_ads_service 
  
 import 
 ( 
 GoogleAdsServiceClient 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.services.services.shared_criterion_service 
  
 import 
 ( 
 SharedCriterionServiceClient 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.services.types.google_ads_service 
  
 import 
 ( 
 GoogleAdsRow 
 , 
 SearchGoogleAdsRequest 
 , 
 SearchGoogleAdsResponse 
 , 
 ) 
 from 
  
 google.ads.googleads.v21.services.types.shared_criterion_service 
  
 import 
 ( 
 MutateSharedCriteriaResponse 
 , 
 MutateSharedCriterionResult 
 , 
 SharedCriterionOperation 
 , 
 ) 
 def 
  
 main 
 ( 
 client 
 : 
 GoogleAdsClient 
 , 
 customer_id 
 : 
 str 
 , 
 campaign_id 
 : 
 str 
 ) 
 - 
> None 
 : 
 ga_service 
 : 
 GoogleAdsServiceClient 
 = 
 client 
 . 
 get_service 
 ( 
 "GoogleAdsService" 
 ) 
 shared_criterion_service 
 : 
 SharedCriterionServiceClient 
 = 
 client 
 . 
 get_service 
 ( 
 "SharedCriterionService" 
 ) 
 # First, retrieve all shared sets associated with the campaign. 
 shared_sets_query 
 : 
 str 
 = 
 f 
 """ 
 SELECT 
 shared_set.id, 
 shared_set.name 
 FROM campaign_shared_set 
 WHERE campaign.id = 
 { 
 campaign_id 
 } 
 """ 
 try 
 : 
 shared_set_search_request 
 : 
 SearchGoogleAdsRequest 
 = 
 client 
 . 
 get_type 
 ( 
 "SearchGoogleAdsRequest" 
 ) 
 shared_set_search_request 
 . 
 customer_id 
 = 
 customer_id 
 shared_set_search_request 
 . 
 query 
 = 
 shared_sets_query 
 shared_set_response 
 : 
 SearchGoogleAdsResponse 
 = 
 ga_service 
 . 
 search 
 ( 
 request 
 = 
 shared_set_search_request 
 ) 
 shared_set_ids 
 : 
 List 
 [ 
 str 
 ] 
 = 
 [] 
 row 
 : 
 GoogleAdsRow 
 for 
 row 
 in 
 shared_set_response 
 : 
 shared_set 
 : 
 SharedSet 
 = 
 row 
 . 
 shared_set 
 shared_set_ids 
 . 
 append 
 ( 
 str 
 ( 
 shared_set 
 . 
 id 
 )) 
 print 
 ( 
 f 
 'Campaign shared set ID " 
 { 
 shared_set 
 . 
 id 
 } 
 " and name ' 
 f 
 '" 
 { 
 shared_set 
 . 
 name 
 } 
 " was found.' 
 ) 
 except 
 GoogleAdsException 
 as 
 ex 
 : 
 handle_googleads_exception 
 ( 
 ex 
 ) 
 # Next, retrieve shared criteria for all found shared sets. 
 ids 
 : 
 str 
 = 
 ", " 
 . 
 join 
 ( 
 shared_set_ids 
 ) 
 shared_criteria_query 
 : 
 str 
 = 
 f 
 """ 
 SELECT 
 shared_criterion.type, 
 shared_criterion.keyword.text, 
 shared_criterion.keyword.match_type, 
 shared_set.id 
 FROM shared_criterion 
 WHERE shared_set.id IN ( 
 { 
 ids 
 } 
 )""" 
 try 
 : 
 shared_criteria_search_request 
 : 
 SearchGoogleAdsRequest 
 = 
 ( 
 client 
 . 
 get_type 
 ( 
 "SearchGoogleAdsRequest" 
 ) 
 ) 
 shared_criteria_search_request 
 . 
 customer_id 
 = 
 customer_id 
 shared_criteria_search_request 
 . 
 query 
 = 
 shared_criteria_query 
 shared_criteria_response 
 : 
 SearchGoogleAdsResponse 
 = 
 ga_service 
 . 
 search 
 ( 
 request 
 = 
 shared_criteria_search_request 
 ) 
 except 
 GoogleAdsException 
 as 
 ex 
 : 
 handle_googleads_exception 
 ( 
 ex 
 ) 
 criterion_type_enum 
 : 
 CriterionTypeEnum 
 = 
 client 
 . 
 enums 
 . 
 CriterionTypeEnum 
 criterion_ids 
 : 
 List 
 [ 
 str 
 ] 
 = 
 [] 
 row 
 : 
 GoogleAdsRow 
 for 
 row 
 in 
 shared_criteria_response 
 : 
 shared_criterion 
 : 
 SharedCriterion 
 = 
 row 
 . 
 shared_criterion 
 shared_criterion_resource_name 
 : 
 str 
 = 
 shared_criterion 
 . 
 resource_name 
 if 
 shared_criterion 
 . 
 type_ 
 == 
 criterion_type_enum 
 . 
 KEYWORD 
 : 
 keyword 
 : 
 KeywordInfo 
 = 
 shared_criterion 
 . 
 keyword 
 print 
 ( 
 "Shared criterion with resource name " 
 f 
 '" 
 { 
 shared_criterion_resource_name 
 } 
 " for negative keyword ' 
 f 
 'with text " 
 { 
 keyword 
 . 
 text 
 } 
 " and match type ' 
 f 
 '" 
 { 
 keyword 
 . 
 match_type 
 . 
 name 
 } 
 " was found.' 
 ) 
 criterion_ids 
 . 
 append 
 ( 
 shared_criterion_resource_name 
 ) 
 operations 
 : 
 List 
 [ 
 SharedCriterionOperation 
 ] 
 = 
 [] 
 # Finally, remove the criteria. 
 criteria_id 
 : 
 str 
 for 
 criteria_id 
 in 
 criterion_ids 
 : 
 shared_criterion_operation 
 : 
 SharedCriterionOperation 
 = 
 client 
 . 
 get_type 
 ( 
 "SharedCriterionOperation" 
 ) 
 shared_criterion_operation 
 . 
 remove 
 = 
 criteria_id 
 operations 
 . 
 append 
 ( 
 shared_criterion_operation 
 ) 
 try 
 : 
 response 
 : 
 MutateSharedCriteriaResponse 
 = 
 ( 
 shared_criterion_service 
 . 
 mutate_shared_criteria 
 ( 
 customer_id 
 = 
 customer_id 
 , 
 operations 
 = 
 operations 
 ) 
 ) 
 result 
 : 
 MutateSharedCriterionResult 
 for 
 result 
 in 
 response 
 . 
 results 
 : 
 print 
 ( 
 f 
 'Removed shared criterion " 
 { 
 result 
 . 
 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 
 ' 
 \t 
 Error with message " 
 { 
 error 
 . 
 message 
 } 
 ".' 
 ) 
 if 
 error 
 . 
 location 
 : 
 for 
 field_path_element 
 in 
 error 
 . 
 location 
 . 
 field_path_elements 
 : 
 print 
 ( 
 f 
 " 
 \t\t 
 On field: 
 { 
 field_path_element 
 . 
 field_name 
 } 
 " 
 ) 
 sys 
 . 
 exit 
 ( 
 1 
 ) 
 if 
 __name__ 
 == 
 "__main__" 
 : 
 parser 
 : 
 argparse 
 . 
 ArgumentParser 
 = 
 argparse 
 . 
 ArgumentParser 
 ( 
 description 
 = 
 ( 
 "Finds shared sets, then finds and removes shared set " 
 "criteria under them." 
 ) 
 ) 
 # 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 
 : 
 argparse 
 . 
 Namespace 
 = 
 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 
 = 
 "v21" 
 ) 
 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 demonstrates how to find shared sets, shared set criteria, and 
 # how to remove them. 
 require 
  
 'optparse' 
 require 
  
 'google/ads/google_ads' 
 def 
  
 find_and_remove_criteria_from_shared_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 
  
 ga_service 
  
 = 
  
 client 
 . 
 service 
 . 
 google_ads 
  
 shared_set_ids 
  
 = 
  
 [] 
  
 criterion_ids 
  
 = 
  
 [] 
  
 # First, retrieve all shared sets associated with the campaign. 
  
 query 
  
 = 
  
<< ~ 
 QUERY 
  
 SELECT 
  
 shared_set 
 . 
 id 
 , 
  
 shared_set 
 . 
 name 
  
 FROM 
  
 campaign_shared_set 
  
 WHERE 
  
 campaign 
 . 
 id 
  
 = 
  
 #{campaign_id} 
  
 QUERY 
  
 response 
  
 = 
  
 ga_service 
 . 
 search 
 ( 
  
 customer_id 
 : 
  
 customer_id 
 , 
  
 query 
 : 
  
 query 
 , 
  
 ) 
  
 response 
 . 
 each 
  
 do 
  
 | 
 row 
 | 
  
 shared_set 
  
 = 
  
 row 
 . 
 shared_set 
  
 puts 
  
 "Campaign shared set ID 
 #{ 
 shared_set 
 . 
 id 
 } 
 and name ' 
 #{ 
 shared_set 
 . 
 name 
 } 
 ' was found." 
  
 shared_set_ids 
 << 
 shared_set 
 . 
 id 
  
 end 
  
 # Next, retrieve shared criteria for all found shared sets. 
  
 query 
  
 = 
  
<< ~ 
 QUERY 
  
 SELECT 
  
 shared_criterion 
 . 
 type 
 , 
  
 shared_criterion 
 . 
 keyword 
 . 
 text 
 , 
  
 shared_criterion 
 . 
 keyword 
 . 
 match_type 
 , 
  
 shared_set 
 . 
 id 
  
 FROM 
  
 shared_criterion 
  
 WHERE 
  
 shared_set 
 . 
 id 
  
 IN 
  
 ( 
 #{shared_set_ids.join(',')}) 
  
 QUERY 
  
 response 
  
 = 
  
 ga_service 
 . 
 search 
 ( 
  
 customer_id 
 : 
  
 customer_id 
 , 
  
 query 
 : 
  
 query 
 , 
  
 ) 
  
 response 
 . 
 each 
  
 do 
  
 | 
 row 
 | 
  
 sc 
  
 = 
  
 row 
 . 
 shared_criterion 
  
 if 
  
 sc 
 . 
 type 
  
 == 
  
 :KEYWORD 
  
 puts 
  
 "Shared criterion with resource name ' 
 #{ 
 sc 
 . 
 resource_name 
 } 
 ' for negative keyword " 
  
 + 
  
 "with text ' 
 #{ 
 sc 
 . 
 keyword 
 . 
 text 
 } 
 ' and match type ' 
 #{ 
 sc 
 . 
 keyword 
 . 
 match_type 
 } 
 ' was found." 
  
 else 
  
 puts 
  
 "Shared criterion with resource name ' 
 #{ 
 sc 
 . 
 resource_name 
 } 
 ' was found." 
  
 end 
  
 criterion_ids 
 << 
 sc 
 . 
 resource_name 
  
 end 
  
 # Finally, remove the criteria. 
  
 operations 
  
 = 
  
 criterion_ids 
 . 
 map 
  
 do 
  
 | 
 criterion 
 | 
  
 client 
 . 
 operation 
 . 
 remove_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 
  
 "Removed shared criterion 
 #{ 
 result 
 . 
 resource_name 
 } 
 " 
  
 end 
 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 
  
 find_and_remove_criteria_from_shared_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 
 ( 
 " 
 \t 
 On 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 
 ( 
 " 
 \t 
 Type: %s 
 \n\t 
 Code: %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 demonstrates how to find shared sets, how to find shared set 
 # criteria, and how to remove shared set criteria. 
 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::Utils::SearchGoogleAdsIterator 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Enums::CriterionTypeEnum 
  
 qw(KEYWORD) 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Services::GoogleAdsService::SearchGoogleAdsRequest 
 ; 
 use 
  
 Google::Ads::GoogleAds::V21::Services::SharedCriterionService::SharedCriterionOperation 
 ; 
 use 
  
 Getopt::Long 
  
 qw(:config auto_help) 
 ; 
 use 
  
 Pod::Usage 
 ; 
 use 
  
 Cwd 
  
 qw(abs_path) 
 ; 
 # 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 
  
 find_and_remove_criteria_from_shared_set 
  
 { 
  
 my 
  
 ( 
 $api_client 
 , 
  
 $customer_id 
 , 
  
 $campaign_id 
 ) 
  
 = 
  
 @_ 
 ; 
  
 my 
  
 $shared_set_ids 
  
 = 
  
 [] 
 ; 
  
 my 
  
 $criterion_resource_names 
  
 = 
  
 [] 
 ; 
  
 # First, retrieve all shared sets associated with the campaign. 
  
 my 
  
 $search_query 
  
 = 
  
 "SELECT shared_set.id, shared_set.name FROM campaign_shared_set " 
  
 . 
  
 "WHERE campaign.id = $campaign_id" 
 ; 
  
 my 
  
 $search_request 
  
 = 
  
 Google::Ads::GoogleAds::V21::Services::GoogleAdsService:: 
 SearchGoogleAdsRequest 
  
 - 
> new 
 ({ 
  
 customerId 
  
 = 
>  
 $customer_id 
 , 
  
 query 
  
 = 
>  
 $search_query 
  
 }); 
  
 my 
  
 $google_ads_service 
  
 = 
  
 $api_client 
 - 
> GoogleAdsService 
 (); 
  
 my 
  
 $iterator 
  
 = 
  
 Google::Ads::GoogleAds::Utils:: 
 SearchGoogleAdsIterator 
 - 
> new 
 ({ 
  
 service 
  
 = 
>  
 $google_ads_service 
 , 
  
 request 
  
 = 
>  
 $search_request 
  
 }); 
  
 # Iterate over all rows in all pages and print the requested field values for 
  
 # the shared set in each row. 
  
 while 
  
 ( 
 $iterator 
 - 
> has_next 
 ) 
  
 { 
  
 my 
  
 $google_ads_row 
  
 = 
  
 $iterator 
 - 
> next 
 ; 
  
 printf 
  
 "Campaign shared set with ID %d and name '%s' was found.\n" 
 , 
  
 $google_ads_row 
 - 
> { 
 sharedSet 
 }{ 
 id 
 }, 
  
 $google_ads_row 
 - 
> { 
 sharedSet 
 }{ 
 name 
 }; 
  
 push 
  
 @$shared_set_ids 
 , 
  
 $google_ads_row 
 - 
> { 
 sharedSet 
 }{ 
 id 
 }; 
  
 } 
  
 # Return 0 when no shared set was found for this campaign. 
  
 if 
  
 ( 
 scalar 
  
 @$shared_set_ids 
  
 == 
  
 0 
 ) 
  
 { 
  
 warn 
  
 "Campaign shared set was not found for campaign $campaign_id.\n" 
 ; 
  
 return 
  
 0 
 ; 
  
 } 
  
 # Next, retrieve shared criteria for all found shared sets. 
  
 $search_query 
  
 = 
  
 sprintf 
  
 "SELECT shared_criterion.type, shared_criterion.keyword.text, " 
  
 . 
  
 "shared_criterion.keyword.match_type, shared_set.id " 
  
 . 
  
 "FROM shared_criterion WHERE shared_set.id IN (%s)" 
 , 
  
 join 
 ( 
 ',' 
 , 
  
 @$shared_set_ids 
 ); 
  
 $search_request 
  
 = 
  
 Google::Ads::GoogleAds::V21::Services::GoogleAdsService:: 
 SearchGoogleAdsRequest 
  
 - 
> new 
 ({ 
  
 customerId 
  
 = 
>  
 $customer_id 
 , 
  
 query 
  
 = 
>  
 $search_query 
  
 }); 
  
 $iterator 
  
 = 
  
 Google::Ads::GoogleAds::Utils:: 
 SearchGoogleAdsIterator 
 - 
> new 
 ({ 
  
 service 
  
 = 
>  
 $google_ads_service 
 , 
  
 request 
  
 = 
>  
 $search_request 
  
 }); 
  
 # Iterate over all rows in all pages and print the requested field values for 
  
 # the shared criterion in each row. 
  
 while 
  
 ( 
 $iterator 
 - 
> has_next 
 ) 
  
 { 
  
 my 
  
 $google_ads_row 
  
 = 
  
 $iterator 
 - 
> next 
 ; 
  
 my 
  
 $shared_criterion_resource_name 
  
 = 
  
 $google_ads_row 
 - 
> { 
 sharedCriterion 
 }{ 
 resourceName 
 }; 
  
 if 
  
 ( 
 $google_ads_row 
 - 
> { 
 sharedCriterion 
 }{ 
 type 
 } 
  
 eq 
  
 KEYWORD 
 ) 
  
 { 
  
 printf 
  
 "Shared criterion with resource name '%s' for negative keyword " 
  
 . 
  
 "with text '%s' and match type '%s' was found.\n" 
 , 
  
 $shared_criterion_resource_name 
 , 
  
 $google_ads_row 
 - 
> { 
 sharedCriterion 
 }{ 
 keyword 
 }{ 
 text 
 }, 
  
 $google_ads_row 
 - 
> { 
 sharedCriterion 
 }{ 
 keyword 
 }{ 
 matchType 
 }; 
  
 } 
  
 else 
  
 { 
  
 printf 
  
 "Shared criterion with resource name '%s' was found.\n" 
 , 
  
 $shared_criterion_resource_name 
 ; 
  
 } 
  
 push 
  
 @$criterion_resource_names 
 , 
  
 $shared_criterion_resource_name 
 ; 
  
 } 
  
 # Finally, remove the criteria. 
  
 my 
  
 $shared_criterion_operations 
  
 = 
  
 [] 
 ; 
  
 foreach 
  
 my 
  
 $criterion_resource_name 
  
 ( 
 @$criterion_resource_names 
 ) 
  
 { 
  
 push 
  
 @$shared_criterion_operations 
 , 
  
 Google::Ads::GoogleAds::V21::Services::SharedCriterionService:: 
 SharedCriterionOperation 
  
 - 
> new 
 ({ 
  
 remove 
  
 = 
>  
 $criterion_resource_name 
  
 }); 
  
 } 
  
 # Send the operations in mutate request. 
  
 my 
  
 $shared_criteria_response 
  
 = 
  
 $api_client 
 - 
> SharedCriterionService 
 () 
 - 
> mutate 
 ({ 
  
 customerId 
  
 = 
>  
 $customer_id 
 , 
  
 operations 
  
 = 
>  
 $shared_criterion_operations 
  
 }); 
  
 foreach 
  
 my 
  
 $result 
  
 ( 
 @ 
 { 
 $shared_criteria_response 
 - 
> { 
 results 
 }}) 
  
 { 
  
 printf 
  
 "Removed shared criterion with resource name: '%s'.\n" 
 , 
  
 $result 
 - 
> { 
 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. 
 find_and_remove_criteria_from_shared_set 
 ( 
 $api_client 
 , 
  
 $customer_id 
  
 =~ 
  
 s/-//g 
 r 
 , 
  
 $campaign_id 
 ); 
 =pod 
 =head1 NAME 
 find_and_remove_criteria_from_shared_set 
 =head1 DESCRIPTION 
 This example demonstrates how to find shared sets, how to find shared set criteria, 
 and how to remove shared set criteria. 
 =head1 SYNOPSIS 
 find_and_remove_criteria_from_shared_set.pl [options] 
 -help                       Show the help message. 
 -customer_id                The Google Ads customer ID. 
 -campaign_id                The campaign ID. 
 =cut 
  
  
Design a Mobile Site
View Site in Mobile | Classic
Share by: