جاوا
// 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.v17.enums.CriterionTypeEnum.CriterionType;
import com.google.ads.googleads.v17.errors.GoogleAdsError;
import com.google.ads.googleads.v17.errors.GoogleAdsException;
import com.google.ads.googleads.v17.resources.SharedCriterion;
import com.google.ads.googleads.v17.resources.SharedSet;
import com.google.ads.googleads.v17.services.GoogleAdsRow;
import com.google.ads.googleads.v17.services.GoogleAdsServiceClient;
import com.google.ads.googleads.v17.services.GoogleAdsServiceClient.SearchPagedResponse;
import com.google.ads.googleads.v17.services.MutateSharedCriteriaResponse;
import com.google.ads.googleads.v17.services.MutateSharedCriterionResult;
import com.google.ads.googleads.v17.services.SearchGoogleAdsRequest;
import com.google.ads.googleads.v17.services.SharedCriterionOperation;
import com.google.ads.googleads.v17.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());
}
}
}
}
سی شارپ
// 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.V17.Errors;
using Google.Ads.GoogleAds.V17.Resources;
using Google.Ads.GoogleAds.V17.Services;
using Google.Api.Gax;
using System;
using System.Collections.Generic;
using static Google.Ads.GoogleAds.V17.Enums.CriterionTypeEnum.Types;
namespace Google.Ads.GoogleAds.Examples.V17
{
/// <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.V17.SharedCriterionService);
GoogleAdsServiceClient googleAdsService = client.GetService(
Services.V17.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\V17\GoogleAdsClient;
use Google\Ads\GoogleAds\Lib\V17\GoogleAdsClientBuilder;
use Google\Ads\GoogleAds\Lib\V17\GoogleAdsException;
use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder;
use Google\Ads\GoogleAds\V17\Enums\CriterionTypeEnum\CriterionType;
use Google\Ads\GoogleAds\V17\Enums\KeywordMatchTypeEnum\KeywordMatchType;
use Google\Ads\GoogleAds\V17\Errors\GoogleAdsError;
use Google\Ads\GoogleAds\V17\Resources\SharedCriterion;
use Google\Ads\GoogleAds\V17\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V17\Services\MutateSharedCriteriaRequest;
use Google\Ads\GoogleAds\V17\Services\SearchGoogleAdsRequest;
use Google\Ads\GoogleAds\V17\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();
پایتون
#!/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 google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.errors import GoogleAdsException
def main(client, customer_id, campaign_id):
ga_service = client.get_service("GoogleAdsService")
shared_criterion_service = client.get_service("SharedCriterionService")
# First, retrieve all shared sets associated with the campaign.
shared_sets_query = f"""
SELECT
shared_set.id,
shared_set.name
FROM campaign_shared_set
WHERE campaign.id = {campaign_id}"""
try:
shared_set_search_request = client.get_type("SearchGoogleAdsRequest")
shared_set_search_request.customer_id = customer_id
shared_set_search_request.query = shared_sets_query
shared_set_response = ga_service.search(
request=shared_set_search_request
)
shared_set_ids = []
for row in shared_set_response:
shared_set = 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 = ", ".join(shared_set_ids)
shared_criteria_query = 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 = client.get_type(
"SearchGoogleAdsRequest"
)
shared_criteria_search_request.customer_id = customer_id
shared_criteria_search_request.query = shared_criteria_query
shared_criteria_response = ga_service.search(
request=shared_criteria_search_request
)
except GoogleAdsException as ex:
handle_googleads_exception(ex)
criterion_type_enum = client.enums.CriterionTypeEnum
criterion_ids = []
for row in shared_criteria_response:
shared_criterion = row.shared_criterion
shared_criterion_resource_name = shared_criterion.resource_name
if shared_criterion.type_ == criterion_type_enum.KEYWORD:
keyword = 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 = []
# Finally, remove the criteria.
for criteria_id in criterion_ids:
shared_criterion_operation = client.get_type("SharedCriterionOperation")
shared_criterion_operation.remove = criteria_id
operations.append(shared_criterion_operation)
try:
response = shared_criterion_service.mutate_shared_criteria(
customer_id=customer_id, operations=operations
)
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):
print(
f'Request with ID "{exception.request_id}" failed with status '
f'"{exception.error.code().name}" and includes the following errors:'
)
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=(
"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 = parser.parse_args()
# GoogleAdsClient will read the google-ads.yaml configuration file in the
# home directory if none is specified.
googleads_client = GoogleAdsClient.load_from_storage(version="v17")
main(googleads_client, args.customer_id, args.campaign_id)
روبی
#!/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,
page_size: PAGE_SIZE,
)
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,
page_size: PAGE_SIZE,
)
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
PAGE_SIZE = 1000
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("\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
پرل
#!/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::V17::Enums::CriterionTypeEnum qw(KEYWORD);
use
Google::Ads::GoogleAds::V17::Services::GoogleAdsService::SearchGoogleAdsRequest;
use
Google::Ads::GoogleAds::V17::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::V17::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::V17::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::V17::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/-//gr,
$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