جاوا
// Copyright 2021 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.assets;
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.common.SitelinkAsset;
import com.google.ads.googleads.v17.enums.AssetFieldTypeEnum.AssetFieldType;
import com.google.ads.googleads.v17.errors.GoogleAdsError;
import com.google.ads.googleads.v17.errors.GoogleAdsException;
import com.google.ads.googleads.v17.resources.Asset;
import com.google.ads.googleads.v17.resources.CampaignAsset;
import com.google.ads.googleads.v17.services.AssetOperation;
import com.google.ads.googleads.v17.services.AssetServiceClient;
import com.google.ads.googleads.v17.services.CampaignAssetOperation;
import com.google.ads.googleads.v17.services.CampaignAssetServiceClient;
import com.google.ads.googleads.v17.services.MutateAssetResult;
import com.google.ads.googleads.v17.services.MutateAssetsResponse;
import com.google.ads.googleads.v17.services.MutateCampaignAssetResult;
import com.google.ads.googleads.v17.services.MutateCampaignAssetsResponse;
import com.google.ads.googleads.v17.utils.ResourceNames;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/** Adds sitelinks to a campaign using Assets. To create a campaign, run AddCampaigns.java. */
public class AddSitelinks {
private static class AddSitelinksParams 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) {
AddSitelinksParams params = new AddSitelinksParams();
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 AddSitelinks().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 on which to add the sitelinks.
* @throws GoogleAdsException if an API request failed with one or more service errors.
*/
private void runExample(GoogleAdsClient googleAdsClient, long customerId, long campaignId) {
// Creates a sitelink asset.
List<String> resourceNames = createSitelinkAssets(googleAdsClient, customerId);
// Associates the sitelinks at the campaign level.
linkSitelinksToCampaign(googleAdsClient, resourceNames, customerId, campaignId);
}
/** Creates a {@link SitelinkAsset} which can then be added to campaigns. */
private List<String> createSitelinkAssets(GoogleAdsClient googleAdsClient, long customerId) {
// Creates some sitelink assets.
SitelinkAsset storeLocatorSitelinkAsset =
SitelinkAsset.newBuilder()
.setDescription1("Get in touch")
.setDescription2("Find your local store")
.setLinkText("Store locator")
.build();
SitelinkAsset storeSitelinkAsset =
SitelinkAsset.newBuilder()
.setDescription1("Buy some stuff")
.setDescription2("It's really good")
.setLinkText("Store")
.build();
SitelinkAsset storeAdditionalSitelinkAsset =
SitelinkAsset.newBuilder()
.setDescription1("Even more stuff")
.setDescription2("There's never enough")
.setLinkText("Store for more")
.build();
// Wraps the sitelinks in an Asset and sets the URLs.
List<Asset> assets = new ArrayList();
assets.add(
Asset.newBuilder()
.setSitelinkAsset(storeLocatorSitelinkAsset)
.addFinalUrls("http://example.com/contact/store-finder")
// Optionally sets a different URL for mobile.
.addFinalMobileUrls("http://example.com/mobile/contact/store-finder")
.build());
assets.add(
Asset.newBuilder()
.setSitelinkAsset(storeSitelinkAsset)
.addFinalUrls("http://example.com/store")
// Optionally sets a different URL for mobile.
.addFinalMobileUrls("http://example.com/mobile/store")
.build());
assets.add(
Asset.newBuilder()
.setSitelinkAsset(storeAdditionalSitelinkAsset)
.addFinalUrls("http://example.com/store/more")
// Optionally sets a different URL for mobile.
.addFinalMobileUrls("http://example.com/mobile/store/more")
.build());
// Creates an operation to add each asset.
List<AssetOperation> operations =
assets.stream()
.map(a -> AssetOperation.newBuilder().setCreate(a).build())
.collect(Collectors.toList());
// Creates the service client.
try (AssetServiceClient client =
googleAdsClient.getLatestVersion().createAssetServiceClient()) {
// Sends the mutate request.
MutateAssetsResponse response = client.mutateAssets(String.valueOf(customerId), operations);
// Prints some information about the result.
List<String> resourceNames =
response.getResultsList().stream()
.map(MutateAssetResult::getResourceName)
.collect(Collectors.toList());
for (String resName : resourceNames) {
System.out.printf("Created sitelink asset with resource name '%s'.%n", resName);
}
return resourceNames;
}
}
/** Links the assets to a campaign. */
private void linkSitelinksToCampaign(
GoogleAdsClient googleAdsClient,
List<String> sitelinkAssetResourceName,
long customerId,
long campaignId) {
// Creates CampaignAssets representing the association between sitelinks and campaign.
List<CampaignAssetOperation> campaignAssetOperations =
sitelinkAssetResourceName.stream()
// Creates the CampaignAsset link.
.map(
resName ->
CampaignAsset.newBuilder()
.setAsset(resName)
.setCampaign(ResourceNames.campaign(customerId, campaignId))
.setFieldType(AssetFieldType.SITELINK)
.build())
// Creates a CampaignAssetOperation to create the CampaignAsset.
.map(a -> CampaignAssetOperation.newBuilder().setCreate(a).build())
.collect(Collectors.toList());
// Creates the service client.
try (CampaignAssetServiceClient client =
googleAdsClient.getLatestVersion().createCampaignAssetServiceClient()) {
// Sends the mutate request.
MutateCampaignAssetsResponse response =
client.mutateCampaignAssets(String.valueOf(customerId), campaignAssetOperations);
// Prints some information about the result.
for (MutateCampaignAssetResult result : response.getResultsList()) {
System.out.printf(
"Linked sitelink to campaign with resource name '%s'.%n", result.getResourceName());
}
}
}
}
سی شارپ
// Copyright 2021 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.Common;
using Google.Ads.GoogleAds.V17.Errors;
using Google.Ads.GoogleAds.V17.Resources;
using Google.Ads.GoogleAds.V17.Services;
using System;
using System.Collections.Generic;
using System.Linq;
using static Google.Ads.GoogleAds.V17.Enums.AssetFieldTypeEnum.Types;
namespace Google.Ads.GoogleAds.Examples.V17
{
/// <summary>
/// This code example adds sitelinks to a campaign using assets. Run AddCampaigns.cs to
/// create a campaign.
/// </summary>
public class AddSitelinks : ExampleBase
{
/// <summary>
/// Command line options for running the <see cref="AddSitelinks"/> example.
/// </summary>
public class Options : OptionsBase
{
/// <summary>
/// The customer ID for which the call is made.
/// </summary>
[Option("customerId", Required = true, HelpText =
"The customer ID for which the call is made.")]
public long CustomerId { get; set; }
/// <summary>
/// ID of the campaign to which sitelinks are added.
/// </summary>
[Option("campaignId", Required = true, HelpText =
"ID of the campaign to which sitelinks are added.")]
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);
AddSitelinks codeExample = new AddSitelinks();
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 adds sitelinks to a campaign using assets. Run AddCampaigns.cs " +
"to create a campaign.";
/// <summary>
/// Runs the code example.
/// </summary>
/// <param name="client">The Google Ads client.</param>
/// <param name="customerId">The customer ID for which the call is made.</param>
/// <param name="campaignId">ID of the campaign to which sitelinks are added.</param>
public void Run(GoogleAdsClient client, long customerId, long campaignId)
{
try
{
// Creates a sitelink asset.
List<string> siteLinkResourceNames = CreateSitelinkAssets(client, customerId);
// Associates the sitelinks at the campaign level.
LinkSitelinksToCampaign(client, customerId, campaignId, siteLinkResourceNames);
}
catch (GoogleAdsException e)
{
Console.WriteLine("Failure:");
Console.WriteLine($"Message: {e.Message}");
Console.WriteLine($"Failure: {e.Failure}");
Console.WriteLine($"Request ID: {e.RequestId}");
throw;
}
}
/// <summary>
/// Creates a list of <see cref="SitelinkAsset"/> objects which can then be added
/// to campaigns.
/// </summary>
/// <param name="client">The Google Ads client.</param>
/// <param name="customerId">The customer ID for which the call is made.</param>
/// <returns>The list of sitelink resource names.</returns>
private List<string> CreateSitelinkAssets(GoogleAdsClient client, long customerId)
{
AssetServiceClient assetService = client.GetService(Services.V17.AssetService);
// Creates some sitelink assets.
SitelinkAsset storeLocatorAsset = new SitelinkAsset()
{
Description1 = "Get in touch",
Description2 = "Find your local store",
LinkText = "Store locator"
};
SitelinkAsset storeAsset = new SitelinkAsset()
{
Description1 = "Buy some stuff",
Description2 = "It's really good",
LinkText = "Store"
};
SitelinkAsset storeAdditionalAsset = new SitelinkAsset()
{
Description1 = "Even more stuff",
Description2 = "There's never enough",
LinkText = "Store for more"
};
// Wraps the sitelinks in an Asset and sets the URLs.
List<Asset> assets = new List<Asset>()
{
new Asset()
{
SitelinkAsset = storeLocatorAsset,
FinalUrls = { "http://example.com/contact/store-finder" },
// Optionally sets a different URL for mobile.
FinalMobileUrls = { "http://example.com/mobile/contact/store-finder" }
},
new Asset()
{
SitelinkAsset = storeAsset,
FinalUrls = { "http://example.com/store" },
// Optionally sets a different URL for mobile.
FinalMobileUrls = {"http://example.com/mobile/store" }
},
new Asset()
{
SitelinkAsset = storeAdditionalAsset,
FinalUrls = { "http://example.com/store/more" },
// Optionally sets a different URL for mobile.
FinalMobileUrls = { "http://example.com/mobile/store/more" }
}
};
// Creates an operation to add each asset.
List<AssetOperation> operations = assets.Select(
asset => new AssetOperation()
{
Create = asset,
}).ToList();
// Sends the mutate request.
MutateAssetsResponse response = assetService.MutateAssets(
customerId.ToString(), operations);
// Prints some information about the result.
List<string> resourceNames = response.Results.Select(
result => result.ResourceName).ToList();
foreach (string resourceName in resourceNames)
{
Console.WriteLine($"Created sitelink asset with resource name '{resourceNames}'.");
}
return resourceNames;
}
/** Links the assets to a campaign. */
/// <summary>
/// Links the sitelinks to campaign.
/// </summary>
/// <param name="client">The Google Ads client.</param>
/// <param name="customerId">The customer ID for which the call is made.</param>
/// <param name="campaignId">ID of the campaign to which sitelinks are added.
/// </param>
/// <param name="sitelinkAssetResourceNames">The sitelink asset resource names.</param>
private void LinkSitelinksToCampaign(GoogleAdsClient client, long customerId,
long campaignId, List<string> sitelinkAssetResourceNames)
{
CampaignAssetServiceClient campaignAssetService = client.GetService(
Services.V17.CampaignAssetService);
string campaignResourceName = ResourceNames.Campaign(customerId, campaignId);
// Creates operations.
List<CampaignAssetOperation> campaignAssetOperations =
sitelinkAssetResourceNames.Select(resourceName =>
new CampaignAssetOperation()
{
// Creates CampaignAsset representing the association between sitelinks
// and campaign.
Create = new CampaignAsset()
{
Asset = resourceName,
Campaign = campaignResourceName,
FieldType = AssetFieldType.Sitelink
}
}).ToList();
// Sends the mutate request.
MutateCampaignAssetsResponse response = campaignAssetService.MutateCampaignAssets(
customerId.ToString(), campaignAssetOperations);
// Prints some information about the result.
foreach (MutateCampaignAssetResult result in response.Results)
{
Console.WriteLine($"Linked sitelink to campaign with resource " +
$"name '{result.ResourceName}'.");
}
}
}
}
PHP
This example is not yet available in PHP; you can take a look at the other languages.
پایتون
#!/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.
"""Adds sitelinks to a campaign using Assets.
Run basic_operations/add_campaigns.py to create a campaign.
"""
import argparse
import sys
import uuid
from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.errors import GoogleAdsException
def main(client, customer_id, campaign_id):
"""Adds sitelinks to a campaign using assets.
Args:
client: The Google Ads client.
customer_id: The customer ID for which to add the keyword.
campaign_id: The campaign to which sitelinks will be added.
"""
# Creates sitelink assets.
resource_names = create_sitelink_assets(client, customer_id, campaign_id)
# Associates the sitelinks at the campaign level.
link_sitelinks_to_campaign(client, customer_id, campaign_id, resource_names)
def create_sitelink_assets(client, customer_id):
"""Creates sitelink assets, which can be added to campaigns.
Args:
client: The Google Ads client.
customer_id: The customer ID for which to add the keyword.
Returns:
a list of sitelink asset resource names.
"""
store_locator_operation = client.get_type("AssetOperation")
store_locator_asset = store_locator_operation.create
store_locator_asset.final_urls.append(
"http://example.com/contact/store-finder"
)
store_locator_asset.final_mobile_urls.append(
"http://example.com/mobile/contact/store-finder"
)
store_locator_asset.sitelink_asset.description1 = "Get in touch"
store_locator_asset.sitelink_asset.description2 = "Find your local store"
store_locator_asset.sitelink_asset.link_text = "Store locator"
store_asset_operation = client.get_type("AssetOperation")
store_asset = store_asset_operation.create
store_asset.final_urls.append("http://example.com/store")
store_asset.final_mobile_urls.append("http://example.com/mobile/store")
store_asset.sitelink_asset.description1 = "Buy some stuff"
store_asset.sitelink_asset.description2 = "It's really good"
store_asset.sitelink_asset.link_text = "Store"
store_addnl_asset_operation = client.get_type("AssetOperation")
store_addnl_asset = store_addnl_asset_operation.create
store_addnl_asset.final_urls.append("http://example.com/store/more")
store_addnl_asset.final_mobile_urls.append(
"http://example.com/mobile/store/more"
)
store_addnl_asset.sitelink_asset.description1 = "Buy some stuff"
store_addnl_asset.sitelink_asset.description2 = "It's really good"
store_addnl_asset.sitelink_asset.link_text = "Store"
asset_service = client.get_service("AssetService")
response = asset_service.mutate_assets(
customer_id=customer_id,
operations=[
store_locator_operation,
store_asset_operation,
store_addnl_asset_operation,
],
)
resource_names = [result.resource_name for result in response.results]
for resource_name in resource_names:
print(f"Created sitelink asset with resource name '{resource_name}'.")
return resource_names
def link_sitelinks_to_campaign(
client, customer_id, campaign_id, resource_names
):
"""Creates sitelink assets, which can be added to campaigns.
Args:
client: The Google Ads client.
customer_id: The customer ID for which to add the keyword.
campaign_id: The campaign to which sitelinks will be added.
resource_names: a list of sitelink asset resource names.
"""
campaign_service = client.get_service("CampaignService")
operations = []
for resource_name in resource_names:
operation = client.get_type("CampaignAssetOperation")
campaign_asset = operation.create
campaign_asset.asset = resource_name
campaign_asset.campaign = campaign_service.campaign_path(
customer_id, campaign_id
)
campaign_asset.field_type = client.enums.AssetFieldTypeEnum.SITELINK
operations.append(operation)
campaign_asset_service = client.get_service("CampaignAssetService")
response = campaign_asset_service.mutate_campaign_assets(
customer_id=customer_id, operations=operations
)
for result in response.results:
print(
"Linked sitelink to campaign with resource name '{result.resource_name}'."
)
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Adds sitelinks to a campaign using feed services."
)
# 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,
default=None,
help="ID of the campaign to which sitelinks will be added.",
)
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")
try:
main(googleads_client, args.customer_id, args.campaign_id)
except GoogleAdsException as ex:
print(
f"Request with ID '{ex.request_id}' failed with status "
f"'{ex.error.code().name}' and includes the following errors:"
)
for error in ex.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)
روبی
#!/usr/bin/env ruby
# Encoding: utf-8
#
# 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.
#
# Adds sitelinks to a campaign. To create a campaign, run add_campaigns.rb.
require 'optparse'
require 'google/ads/google_ads'
require 'date'
def add_sitelinks(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
resource_names = create_sitelink_assets(client, customer_id)
link_sitelinks_to_campaign(client, resource_names, customer_id, campaign_id)
end
def create_sitelink_assets(client, customer_id)
assets = [
client.resource.asset do |asset|
asset.sitelink_asset = client.resource.sitelink_asset do |sitelink|
sitelink.description1 = "Get in touch"
sitelink.description2 = "Find your local store"
sitelink.link_text = "Store locator"
end
asset.final_urls << "http://example.com/contact/store-finder"
asset.final_mobile_urls << "http://example.com/mobile/contact/store-finder"
end,
client.resource.asset do |asset|
asset.sitelink_asset = client.resource.sitelink_asset do |sitelink|
sitelink.description1 = "But some stuff"
sitelink.description2 = "It's really good"
sitelink.link_text = "Store"
end
asset.final_urls << "http://example.com/store"
asset.final_mobile_urls << "http://example.com/mobile/store"
end,
client.resource.asset do |asset|
asset.sitelink_asset = client.resource.sitelink_asset do |sitelink|
sitelink.description1 = "Even more stuff"
sitelink.description2 = "There's never enough"
sitelink.link_text = "Store for more"
end
asset.final_urls << "http://example.com/store/more"
asset.final_mobile_urls << "http://example.com/mobile/store/more"
end,
]
operations = assets.map do |asset|
client.operation.create_resource.asset(asset)
end
response = client.service.asset.mutate_assets(
customer_id: customer_id,
operations: operations,
)
response.results.map do |result|
puts "Created sitelink asset with resource name #{result.resource_name}"
result.resource_name
end
end
def link_sitelinks_to_campaign(client, resource_names, customer_id, campaign_id)
operations = resource_names.map do |resource_name|
client.operation.create_resource.campaign_asset do |ca|
ca.asset = resource_name
ca.campaign = client.path.campaign(customer_id, campaign_id)
ca.field_type = :SITELINK
end
end
response = client.service.campaign_asset.mutate_campaign_assets(
customer_id: customer_id,
operations: operations,
)
response.results.each do |result|
puts "Created campaign asset with resource name #{result.resource_name}."
end
end
if __FILE__ == $0
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: %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
add_sitelinks(options.fetch(:customer_id).tr("-", ""), options.fetch(: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 2021, 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.
#
# Adds sitelinks to a campaign using Assets. To create a campaign, run add_campaigns.pl.
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::V17::Resources::Asset;
use Google::Ads::GoogleAds::V17::Resources::CampaignAsset;
use Google::Ads::GoogleAds::V17::Common::SitelinkAsset;
use Google::Ads::GoogleAds::V17::Enums::AssetFieldTypeEnum qw(SITELINK);
use Google::Ads::GoogleAds::V17::Services::AssetService::AssetOperation;
use
Google::Ads::GoogleAds::V17::Services::CampaignAssetService::CampaignAssetOperation;
use Google::Ads::GoogleAds::V17::Utils::ResourceNames;
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 add_sitelinks_using_assets {
my ($api_client, $customer_id, $campaign_id) = @_;
# Create sitelink assets.
my $sitelink_asset_resource_names =
create_sitelink_assets($api_client, $customer_id);
# Associate the sitelinks at the campaign level.
link_sitelinks_to_campaign($api_client, $sitelink_asset_resource_names,
$customer_id, $campaign_id);
return 1;
}
# Creates sitelink assets which can then be added to campaigns.
sub create_sitelink_assets {
my ($api_client, $customer_id) = @_;
# Create some sitelink assets.
my $store_locator_asset =
Google::Ads::GoogleAds::V17::Common::SitelinkAsset->new({
description1 => "Get in touch",
description2 => "Find your local store",
linkText => "Store locator"
});
my $store_asset = Google::Ads::GoogleAds::V17::Common::SitelinkAsset->new({
description1 => "Buy some stuff",
description2 => "It's really good",
linkText => "Store"
});
my $store_additional_asset =
Google::Ads::GoogleAds::V17::Common::SitelinkAsset->new({
description1 => "Even more stuff",
description2 => "There's never enough",
linkText => "Store for more"
});
# Wrap the sitelinks in an Asset and set the URLs.
my $assets = [];
push @$assets, Google::Ads::GoogleAds::V17::Resources::Asset->new({
sitelinkAsset => $store_locator_asset,
finalUrls => ["http://example.com/contact/store-finder"],
# Optionally set a different URL for mobile.
finalMobileUrls => ["http://example.com/mobile/contact/store-finder"]});
push @$assets, Google::Ads::GoogleAds::V17::Resources::Asset->new({
sitelinkAsset => $store_asset,
finalUrls => ["http://example.com/store"],
# Optionally set a different URL for mobile.
finalMobileUrls => ["http://example.com/mobile/store"]});
push @$assets, Google::Ads::GoogleAds::V17::Resources::Asset->new({
sitelinkAsset => $store_additional_asset,
finalUrls => ["http://example.com/store/more"],
# Optionally set a different URL for mobile.
finalMobileUrls => ["http://example.com/mobile/store/more"]});
# Create the operations to add each asset.
my $operations = [];
foreach my $asset (@$assets) {
push @$operations,
Google::Ads::GoogleAds::V17::Services::AssetService::AssetOperation->new((
{
create => $asset
}));
}
# Send the mutate request.
my $response = $api_client->AssetService()->mutate({
customerId => $customer_id,
operations => $operations
});
# Print some information about the result.
my $resource_names = [];
foreach my $result (@{$response->{results}}) {
push @$resource_names, $result->{resourceName};
printf "Created sitelink asset with resource name '%s'.\n",
$result->{resourceName};
}
return $resource_names;
}
# Links the assets to a campaign.
sub link_sitelinks_to_campaign {
my ($api_client, $sitelink_asset_resource_names, $customer_id, $campaign_id)
= @_;
# Create CampaignAssets representing the association between sitelinks and campaign.
my $operations = [];
foreach my $sitelink_asset_resource_name (@$sitelink_asset_resource_names) {
push @$operations,
# Create a CampaignAssetOperation to create the CampaignAsset.
Google::Ads::GoogleAds::V17::Services::CampaignAssetService::CampaignAssetOperation
->new({
# Create the CampaignAsset link.
create => Google::Ads::GoogleAds::V17::Resources::CampaignAsset->new({
asset => $sitelink_asset_resource_name,
campaign =>
Google::Ads::GoogleAds::V17::Utils::ResourceNames::campaign(
$customer_id, $campaign_id
),
fieldType => SITELINK
})});
}
# Send the mutate request.
my $response = $api_client->CampaignAssetService()->mutate({
customerId => $customer_id,
operations => $operations
});
# Print some information about the result.
foreach my $result (@{$response->{results}}) {
printf "Linked sitelink to campaign with resource name '%s'.\n",
$result->{resourceName};
}
}
# 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.
add_sitelinks_using_assets($api_client, $customer_id =~ s/-//gr, $campaign_id);
=pod
=head1 NAME
add_sitelinks_using_assets.pl
=head1 DESCRIPTION
Adds sitelinks to a campaign using Assets. To create a campaign, run add_campaigns.pl.
=head1 SYNOPSIS
add_sitelinks.pl [options]
-help Show the help message.
-customer_id The Google Ads customer ID.
-campaign_id The campaign ID.
=cut