반응형 검색 광고 사용하기
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
자바
// 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.
package com.google.ads.googleads.examples.basicoperations ;
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.v23.common.AdTextAsset ;
import com.google.ads.googleads.v23.common.ResponsiveSearchAdInfo ;
import com.google.ads.googleads.v23.errors.GoogleAdsError ;
import com.google.ads.googleads.v23.errors.GoogleAdsException ;
import com.google.ads.googleads.v23.resources.Ad ;
import com.google.ads.googleads.v23.resources.AdGroupAd ;
import com.google.ads.googleads.v23.services.GoogleAdsRow ;
import com.google.ads.googleads.v23.services.GoogleAdsServiceClient ;
import com.google.ads.googleads.v23.services.GoogleAdsServiceClient.SearchPagedResponse ;
import com.google.ads.googleads.v23.services.SearchGoogleAdsRequest ;
import java.io.FileNotFoundException ;
import java.io.IOException ;
import java.util.List ;
import java.util.stream.Collectors ;
import javax.annotation.Nullable ;
/**
* This example gets non-removed responsive search ads in a specified ad group. To add responsive
* search ads, run AddResponsiveSearchAd.java. To get ad groups, run GetAdGroups.java.
*/
public class GetResponsiveSearchAds {
private static class GetResponsiveSearchAdsParams extends CodeSampleParams {
@Parameter ( names = ArgumentNames . CUSTOMER_ID , required = true )
private Long customerId ;
@Parameter ( names = ArgumentNames . AD_GROUP_ID )
private Long adGroupId ;
}
public static void main ( String [] args ) {
GetResponsiveSearchAdsParams params = new GetResponsiveSearchAdsParams ();
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" );
// Optional: Specify an ad group ID to restrict search to only a given ad group.
params . adGroupId = null ;
}
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 GetResponsiveSearchAds (). runExample ( googleAdsClient , params . customerId , params . adGroupId );
} 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 adGroupId the ad group ID.
* @throws GoogleAdsException if an API request failed with one or more service errors.
*/
private void runExample (
GoogleAdsClient googleAdsClient , long customerId , @Nullable Long adGroupId ) {
try ( GoogleAdsServiceClient googleAdsServiceClient =
googleAdsClient . getLatestVersion (). createGoogleAdsServiceClient ()) {
// Constructs the search query.
String searchQuery =
"SELECT ad_group.id, ad_group_ad.ad.id, "
+ "ad_group_ad.ad.responsive_search_ad.headlines, "
+ "ad_group_ad.ad.responsive_search_ad.descriptions, "
+ "ad_group_ad.status "
+ "FROM ad_group_ad "
+ "WHERE ad_group_ad.ad.type = RESPONSIVE_SEARCH_AD "
+ "AND ad_group_ad.status != 'REMOVED'" ;
if ( adGroupId != null ) {
searchQuery += String . format ( " AND ad_group.id = %d" , adGroupId );
}
// Creates a request that will retrieve all ad group ads.
SearchGoogleAdsRequest request =
SearchGoogleAdsRequest . newBuilder ()
. setCustomerId ( Long . toString ( customerId ))
. setQuery ( searchQuery )
. build ();
// Issues the search request.
SearchPagedResponse searchPagedResponse = googleAdsServiceClient . search ( request );
// Checks if the response contains any results and returns if the results set is empty.
if ( searchPagedResponse . getPage (). getResponse (). getResultsCount () == 0 ) {
System . out . println ( "No responsive search ads were found." );
return ;
}
// Iterates over all rows in all pages and prints the requested field values for the ad
// group ads in each row.
for ( GoogleAdsRow googleAdsRow : searchPagedResponse . iterateAll ()) {
AdGroupAd adGroupAd = googleAdsRow . getAdGroupAd ();
Ad ad = adGroupAd . getAd ();
System . out . printf (
"Responsive search ad with resource name '%s', status '%s' was found.%n" ,
ad . getResourceName (), adGroupAd . getStatus (). getDescriptorForType (). getName ());
// Prints the ad text asset detail.
ResponsiveSearchAdInfo responsiveSearchAdInfo = ad . getResponsiveSearchAd ();
System . out . printf (
"Headlines:%n'%s'%nDescriptions:%n'%s'%n" ,
adTextAssetsToStrings ( responsiveSearchAdInfo . getHeadlinesList ()),
adTextAssetsToStrings ( responsiveSearchAdInfo . getDescriptionsList ()));
}
}
}
/**
* Converts a list of AdTextAssets to a user-friendly string.
*
* @param adTextAssets the list of AdTextAsset objects.
* @return the string representation of the provided list of AdTextAsset objects.
*/
private String adTextAssetsToStrings ( List<AdTextAsset> adTextAssets ) {
return adTextAssets . stream ()
. map (
adTextAsset - >
adTextAsset . getText ()
+ " pinned to "
+ adTextAsset . getPinnedField (). getValueDescriptor (). getName ())
. collect ( Collectors . joining ( ", " ));
}
}
C#
// 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
//
// 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.V23.Common ;
using Google.Ads.GoogleAds.V23.Errors ;
using Google.Ads.GoogleAds.V23.Resources ;
using Google.Ads.GoogleAds.V23.Services ;
using Google.Api.Gax ;
using Google.Protobuf.Collections ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
namespace Google.Ads.GoogleAds.Examples.V23
{
/// <summary>
/// This code example gets non-removed responsive search ads in a specified ad group.
/// To add responsive search ads, run AddResponsiveSearchAd.cs. To get ad groups, run
/// GetAdGroups.cs.
/// </summary>
public class GetResponsiveSearchAds : ExampleBase
{
/// <summary>
/// Command line options for running the <see cref="GetResponsiveSearchAds"/> 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>
/// Optional: ID of the ad group to restrict search to.
/// </summary>
[Option("adGroupId", Required = false, HelpText =
"Optional: ID of the ad group to restrict search to.")]
public long? AdGroupId { 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 );
GetResponsiveSearchAds codeExample = new GetResponsiveSearchAds ();
Console . WriteLine ( codeExample . Description );
codeExample . Run ( new GoogleAdsClient (),
options . CustomerId ,
options . AdGroupId );
}
/// <summary>
/// Returns a description about the code example.
/// </summary>
public override string Description = >
"This code example gets non-removed responsive search ads in a specified ad group. " +
"To add responsive search ads, run AddResponsiveSearchAd.cs. To get ad groups, run " +
"GetAdGroups.cs." ;
/// <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="adGroupId">Optional: ID of the ad group to restrict search to.</param>
public void Run ( GoogleAdsClient client , long customerId , long? adGroupId )
{
// Get the GoogleAdsService.
GoogleAdsServiceClient googleAdsService = client . GetService (
Services . V23 . GoogleAdsService );
string searchQuery =
$ @"SELECT
ad_group.id,
ad_group_ad.ad.id,
ad_group_ad.ad.responsive_search_ad.headlines,
ad_group_ad.ad.responsive_search_ad.descriptions,
ad_group_ad.status
FROM ad_group_ad
WHERE
ad_group_ad.ad.type = RESPONSIVE_SEARCH_AD
AND ad_group_ad.status != 'REMOVED'" ;
if ( adGroupId != null )
{
searchQuery += $" AND ad_group.id = {adGroupId}" ;
}
// Create a request that will retrieve all ads.
SearchGoogleAdsRequest request = new SearchGoogleAdsRequest ()
{
CustomerId = customerId . ToString (),
Query = searchQuery
};
try
{
// Issue the search request.
PagedEnumerable<SearchGoogleAdsResponse , GoogleAdsRow > searchPagedResponse =
googleAdsService . Search ( request );
// Iterates over all rows in all pages and prints the requested field values for
// the ad in each row.
foreach ( GoogleAdsRow googleAdsRow in searchPagedResponse )
{
Ad ad = googleAdsRow . AdGroupAd . Ad ;
Console . WriteLine ( $"Responsive search ad with resource name '{ad.ResourceName}'," +
$"status '{googleAdsRow.AdGroupAd.Status}' was found." );
// Prints the ad text asset detail.
ResponsiveSearchAdInfo responsiveSearchAdInfo = ad . ResponsiveSearchAd ;
Console . WriteLine ( "Headlines:{0},\nDescriptions:{1}" ,
FormatAdTextAssetsAsString ( responsiveSearchAdInfo . Headlines ),
FormatAdTextAssetsAsString ( responsiveSearchAdInfo . Descriptions ));
}
}
catch ( GoogleAdsException e )
{
Console . WriteLine ( "Failure:" );
Console . WriteLine ( $"Message: {e.Message}" );
Console . WriteLine ( $"Failure: {e.Failure}" );
Console . WriteLine ( $"Request ID: {e.RequestId}" );
throw ;
}
}
/// <summary>Formats the text assets to a string format for display.</summary>
/// <param name="adTextAssets">The ad text assets.</param>
/// <returns>The string representation of the provided list of AdTextAsset
/// objects.</returns>
private static string FormatAdTextAssetsAsString ( RepeatedField<AdTextAsset> adTextAssets )
{
return string . Join ( "," , adTextAssets . Select ( delegate ( AdTextAsset asset )
{
return asset . Text + " pinned to " + asset . PinnedField ;
}). ToArray ());
}
}
}
PHP
<?php
/**
* 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.
*/
namespace Google\Ads\GoogleAds\Examples\BasicOperations;
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\V23\GoogleAdsClient;
use Google\Ads\GoogleAds\Lib\V23\GoogleAdsClientBuilder;
use Google\Ads\GoogleAds\Lib\V23\GoogleAdsException;
use Google\Ads\GoogleAds\Lib\OAuth2TokenBuilder;
use Google\Ads\GoogleAds\V23\Common\AdTextAsset;
use Google\Ads\GoogleAds\V23\Enums\AdGroupAdStatusEnum\AdGroupAdStatus;
use Google\Ads\GoogleAds\V23\Enums\ServedAssetFieldTypeEnum\ServedAssetFieldType;
use Google\Ads\GoogleAds\V23\Errors\GoogleAdsError;
use Google\Ads\GoogleAds\V23\Services\GoogleAdsRow;
use Google\Ads\GoogleAds\V23\Services\SearchGoogleAdsRequest;
use Google\ApiCore\ApiException;
use Google\Protobuf\Internal\RepeatedField;
/**
* This example gets non-removed responsive search ads in a specified ad group.
* To add responsive search ads, run BasicOperations/AddResponsiveSearchAd.php.
* To get ad groups, run BasicOperations/GetAdGroups.php.
*/
class GetResponsiveSearchAds
{
private const CUSTOMER_ID = 'INSERT_CUSTOMER_ID_HERE';
// Optional: Specify an ad group ID below to restrict search to only a given ad group.
private const AD_GROUP_ID = null;
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::AD_GROUP_ID => GetOpt::OPTIONAL_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::AD_GROUP_ID] ?: self::AD_GROUP_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|null $adGroupId the ad group ID for which responsive search ads will be retrieved.
* If `null`, returns from all ad groups
*/
public static function runExample(
GoogleAdsClient $googleAdsClient,
int $customerId,
?int $adGroupId
) {
$googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();
// Creates a query that retrieves responsive search ads.
$query =
'SELECT ad_group.id, '
. 'ad_group_ad.ad.id, '
. 'ad_group_ad.ad.responsive_search_ad.headlines, '
. 'ad_group_ad.ad.responsive_search_ad.descriptions, '
. 'ad_group_ad.status '
. 'FROM ad_group_ad '
. 'WHERE ad_group_ad.ad.type = RESPONSIVE_SEARCH_AD '
. 'AND ad_group_ad.status != "REMOVED"';
if (!is_null($adGroupId)) {
$query .= " AND ad_group.id = $adGroupId";
}
// 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 responsive search ad in each row.
$isEmptyResult = true;
foreach ($response->iterateAllElements() as $googleAdsRow) {
/** @var GoogleAdsRow $googleAdsRow */
$isEmptyResult = false;
$ad = $googleAdsRow->getAdGroupAd()->getAd();
printf(
"Responsive search ad with resource name '%s' and status '%s' was found.%s",
$ad->getResourceName(),
AdGroupAdStatus::name($googleAdsRow->getAdGroupAd()->getStatus()),
PHP_EOL
);
$responsiveSearchAdInfo = $ad->getResponsiveSearchAd();
printf(
'Headlines:%1$s%2$sDescriptions:%1$s%3$s%1$s',
PHP_EOL,
self::convertAdTextAssetsToString($responsiveSearchAdInfo->getHeadlines()),
self::convertAdTextAssetsToString($responsiveSearchAdInfo->getDescriptions())
);
}
if ($isEmptyResult) {
print 'No responsive search ads were found.' . PHP_EOL;
}
}
/**
* Converts the list of AdTextAsset objects into a string representation.
*
* @param RepeatedField $assets the list of AdTextAsset objects
* @return string the string representation of the provided list of AdTextAsset objects
*/
private static function convertAdTextAssetsToString(RepeatedField $assets): string
{
$result = '';
foreach ($assets as $asset) {
/** @var AdTextAsset $asset */
$result .= sprintf(
"\t%s pinned to %s.%s",
$asset->getText(),
ServedAssetFieldType::name($asset->getPinnedField()),
PHP_EOL
);
}
return $result;
}
}
GetResponsiveSearchAds::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.
"""This example gets non-removed responsive search ads in a specified ad group.
To add responsive search ads, run basic_operations/add_responsive_search_ad.py.
To get ad groups, run basic_operations/get_ad_groups.py.
"""
import argparse
import sys
from typing import List , Optional , Sequence
from google.ads.googleads.client import GoogleAdsClient
from google.ads.googleads.errors import GoogleAdsException
from google.ads.googleads.v23.common.types.ad_asset import AdTextAsset
from google.ads.googleads.v23.resources.types.ad import Ad
from google.ads.googleads.v23.services.services.google_ads_service import (
GoogleAdsServiceClient ,
)
from google.ads.googleads.v23.services.types.google_ads_service import (
SearchGoogleAdsRequest ,
SearchGoogleAdsResponse ,
)
def main (
client : GoogleAdsClient ,
customer_id : str ,
ad_group_id : Optional [ str ] = None ,
) - > None :
ga_service : GoogleAdsServiceClient = client . get_service ( "GoogleAdsService" )
query : str = """
SELECT
ad_group.id,
ad_group_ad.ad.id,
ad_group_ad.ad.responsive_search_ad.headlines,
ad_group_ad.ad.responsive_search_ad.descriptions,
ad_group_ad.status
FROM ad_group_ad
WHERE ad_group_ad.ad.type = RESPONSIVE_SEARCH_AD
AND ad_group_ad.status != REMOVED"""
# Optional: Specify an ad group ID to restrict search to only a given
# ad group.
if ad_group_id :
query += f " AND ad_group.id = { ad_group_id } "
ga_search_request : SearchGoogleAdsRequest = client . get_type (
"SearchGoogleAdsRequest"
)
ga_search_request . customer_id = customer_id
ga_search_request . query = query
results : SearchGoogleAdsResponse = ga_service . search (
request = ga_search_request
)
one_found : bool = False
for row in results :
one_found = True
ad : Ad = row . ad_group_ad . ad
print (
"Responsive search ad with resource name "
f '" { ad . resource_name } ", status { row . ad_group_ad . status . name } '
"was found."
)
headlines : str = " \n " . join (
ad_text_assets_to_strs ( ad . responsive_search_ad . headlines )
)
descriptions : str = " \n " . join (
ad_text_assets_to_strs ( ad . responsive_search_ad . descriptions )
)
print ( f "Headlines: \n { headlines } \n Descriptions: \n { descriptions } \n " )
if not one_found :
print ( "No responsive search ads were found." )
def ad_text_assets_to_strs ( assets : Sequence [ AdTextAsset ]) - > List [ str ]:
"""Converts a list of AdTextAssets to a list of user-friendly strings."""
s : List [ str ] = []
asset : AdTextAsset
for asset in assets :
s . append ( f " \t { asset . text } pinned to { asset . pinned_field . name } " )
return s
if __name__ == "__main__" :
parser = argparse . ArgumentParser (
description = "List responsive display ads for specified customer. "
"An ad_group is optional."
)
# 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 (
"-a" ,
"--ad_group_id" ,
type = str ,
required = False ,
help = "The ad group 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 = "v23"
)
try :
main (
googleads_client ,
args . customer_id ,
ad_group_id = args . ad_group_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 ' \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 )
Ruby
#!/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.
#
#
# This code example gets non-removed responsive search ads in
# a specified ad group.
# To add responsive search ads, run add_responsive_search_ad.rb.
# To get ad groups, run get_ad_groups.rb.
require 'optparse'
require 'google/ads/google_ads'
def get_responsive_search_ads ( customer_id , ad_group_id = nil )
# GoogleAdsClient will read a config file from
# ENV['HOME']/google_ads_config.rb when called without parameters
client = Google :: Ads :: GoogleAds :: GoogleAdsClient . new
search_query = <<~ QUERY
SELECT ad_group . id ,
ad_group_ad . ad . id ,
ad_group_ad . ad . responsive_search_ad . headlines ,
ad_group_ad . ad . responsive_search_ad . descriptions ,
ad_group_ad . status
FROM ad_group_ad
WHERE ad_group_ad . ad . type = RESPONSIVE_SEARCH_AD
AND ad_group_ad . status != 'REMOVED'
QUERY
if ad_group_id
search_query << " AND ad_group.id = #{ ad_group_id } "
end
responses = client . service . google_ads . search_stream (
customer_id : customer_id ,
query : search_query
)
responses . each do | response |
response . results . each do | row |
ad = row . ad_group_ad . ad
if ad . responsive_search_ad
rsa = ad . responsive_search_ad
headlines = ''
rsa . headlines . each { | h | headlines << h . text << ', ' }
descriptions = ''
rsa . descriptions . each { | d | descriptions << d . text << ', ' }
puts "Responsive search ad with ID #{ ad . id } , status #{ row . ad_group_ad . status } , " \
"headlines ' #{ headlines } ', and descriptions ' #{ descriptions } ' was found in ad group " \
"with ID #{ row . ad_group . id } ."
end
end
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 [ :ad_group_id ] = nil
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 ( '-A' , '--ad-group-id AD-GROUP-ID' , String ,
'(Optional) Ad Group ID' ) do | v |
options [ :ad_group_id ] = v
end
opts . separator ''
opts . separator 'Help:'
opts . on_tail ( '-h' , '--help' , 'Show this message' ) do
puts opts
exit
end
end . parse!
begin
get_responsive_search_ads ( options . fetch ( :customer_id ) . tr ( "-" , "" ), options [ :ad_group_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 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
#
# 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 gets non-removed responsive search ads in a specified ad group.
# To add responsive search ads, run add_responsive_search_ad.pl.
# To get ad groups, run get_ad_groups.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::Utils::SearchGoogleAdsIterator ;
use Google::Ads::GoogleAds::V23::Enums::ServedAssetFieldTypeEnum
qw(UNSPECIFIED) ;
use
Google::Ads::GoogleAds::V23::Services::GoogleAdsService::SearchGoogleAdsRequest ;
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 $ad_group_id = undef ;
sub get_responsive_search_ads {
my ( $api_client , $customer_id , $ad_group_id ) = @_ ;
# Create the search query.
my $search_query =
"SELECT ad_group.id, ad_group_ad.ad.id, " .
"ad_group_ad.ad.responsive_search_ad.headlines, " .
"ad_group_ad.ad.responsive_search_ad.descriptions, " .
"ad_group_ad.status FROM ad_group_ad " .
"WHERE ad_group_ad.ad.type = RESPONSIVE_SEARCH_AD " .
"AND ad_group_ad.status != 'REMOVED'" ;
if ( $ad_group_id ) {
$search_query .= " AND ad_group.id = $ad_group_id" ;
}
# Create a search Google Ads request that will retrieve all responsive search
# ads using pages of the specified page size.
my $search_request =
Google::Ads::GoogleAds::V23::Services::GoogleAdsService:: SearchGoogleAdsRequest
- >new ({
customerId = > $customer_id ,
query = > $search_query
});
# Get the GoogleAdsService.
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 responsive search ad in each row.
my $one_found = 0 ;
while ( $iterator - >has_next ) {
$one_found = 1 ;
my $google_ads_row = $iterator - >next ;
my $ad_group_ad = $google_ads_row - >{ adGroupAd };
my $ad = $ad_group_ad - >{ ad };
printf
"Responsive search ad with resource name '%s', status '%s' was found.\n" ,
$ad - >{ resourceName }, $ad_group_ad - >{ status };
if ( $ad - >{ responsiveSearchAd }) {
my $responsive_search_ad_info = $ad - >{ responsiveSearchAd };
printf "Headlines:\n%s\n" . "Descriptions:\n%s\n" ,
join ( "\n" ,
ad_text_assets_to_strs ( $responsive_search_ad_info - >{ headlines })),
join ( "\n" ,
ad_text_assets_to_strs ( $responsive_search_ad_info - >{ descriptions }));
} else {
print "\tResponsive search ad info was not found.\n" ;
}
}
print "No responsive search ads were found.\n" if not $one_found ;
return 1 ;
}
# Converts a list of AdTextAssets to a list of user-friendly strings.
sub ad_text_assets_to_strs {
my ( $assets ) = @_ ;
my @strs = ();
foreach my $asset ( @$assets ) {
push @strs ,
sprintf ( "\t'%s' pinned to %s" ,
$asset - >{ text },
$asset - >{ pinnedField } ? $asset - >{ pinnedField } : UNSPECIFIED );
}
return @strs ;
}
# 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 ,
"ad_group_id=i" = > \ $ad_group_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 );
# Call the example.
get_responsive_search_ads ( $api_client , $customer_id =~ s/-//g r , $ad_group_id );
=pod
=head1 NAME
get_responsive_search_ads
=head1 DESCRIPTION
This example gets non-removed responsive search ads in a specified ad group.
To add responsive search ads, run add_responsive_search_ad.pl.
To get ad groups, run get_ad_groups.pl.
=head1 SYNOPSIS
get_responsive_search_ads.pl [options]
-help Show the help message.
-customer_id The Google Ads customer ID.
-ad_group_id [optional] The ad group ID.
=cut
curl
참고: 이 단계의 직접 REST 코드 샘플은 여기에 제공되지 않지만 수동 REST 요청을 사용하여 이를 달성할 수 있습니다.
Google Ads API REST 인터페이스 문서와 메서드별 참조 페이지를 참고하세요. 프로토 정의에 따라 JSON 페이로드를 구성해야 합니다.
주요 리소스:
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스 에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스 에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책 을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2026-03-03(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2026-03-03(UTC)"],[],[]]