#!/usr/bin/env python
# Copyright 2018 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""This example adds an expanded text ad.
To get expanded text ads, run get_expanded_text_ads.py.
"""
from __future__ import absolute_import
import argparse
import six
import sys
import uuid
import datetime
import google.ads.google_ads.client
from google.ads.google_ads.v2.proto.common.ad_asset_pb2 import AdTextAsset
def main(client, customer_id, ad_group_id, number_of_ads):
ad_group_ad_service = client.get_service('AdGroupAdService', version='v2')
ad_group_service = client.get_service('AdGroupService', version='v2')
ad_group_ad_operations = []
for i in range(number_of_ads):
# Create ad group ad.
ad_group_ad_operation = client.get_type('AdGroupAdOperation', version='v2')
ad_group_ad = ad_group_ad_operation.create
ad_group_ad.ad_group.value = ad_group_service.ad_group_path(customer_id, ad_group_id)
ad_group_ad.status = client.get_type('AdGroupAdStatusEnum', version='v2').PAUSED
ad_group_ad.ad.type = client.get_type('AdTypeEnum', version='v2').AdType.APP_AD
now = datetime.datetime.utcnow()
timestr = datetime.datetime.strftime(now, "%Y-%m-%d %H:%M:%S.%f")
print("timestr=", timestr)
ad_group_ad.ad.name.value = "ApolloTest-%s" % timestr
asset = AdTextAsset()
asset.text.value="abcdefg"
# ad_group_ad.ad.app_ad.mandatory_ad_text = asset
# ========== STUCK HERE ==========
ad_group_ad.ad.app_ad.headlines = [asset]
ad_group_ad.ad.app_ad.descriptions = [asset]
# ad_group_ad.app_ad.headlines = [
#
# ]
ad_group_ad_operations.append(ad_group_ad_operation)
try:
ad_group_ad_response = ad_group_ad_service.mutate_ad_group_ads(
customer_id, ad_group_ad_operations)
except google.ads.google_ads.errors.GoogleAdsException as ex:
print('Request with ID "{}" failed with status "{}" and includes the '
'following errors:'.format(ex.request_id, ex.error.code().name))
for error in ex.failure.errors:
print('\tError with message "{}".'.format(error.message))
if error.location:
for field_path_element in error.location.field_path_elements:
print('\t\tOn field: {}'.format(field_path_element.field_name))
sys.exit(1)
for result in ad_group_ad_response.results:
print('Created ad group ad {}.'.format(result.resource_name))
if __name__ == '__main__':
# GoogleAdsClient will read the google-ads.yaml configuration file in the
# home directory if none is specified.
google_ads_client = (google.ads.google_ads.client.GoogleAdsClient
.load_from_storage("/opt/webeye/bazaar/mkt-service/app/files/google-ads.yaml"))
parser = argparse.ArgumentParser(
description=('Adds an expanded text ad to the specified ad group ID, '
'for the given customer ID.'))
# The following argument(s) should be provided to run the example.
parser.add_argument('-c', '--customer_id', type=six.text_type,
required=True, help='The Google Ads customer ID.')
parser.add_argument('-a', '--ad_group_id', type=six.text_type,
required=True, help='The ad group ID.')
parser.add_argument('-n', '--number_of_ads', type=int,
required=False, default=1, help='The number of ads.')
args = parser.parse_args()
main(google_ads_client, args.customer_id, args.ad_group_id, args.number_of_ads)
Hello Yang,
Thank you for reaching out. You need to populate the list of ad_group_ad.ad.app_ad.headlines and ad_group_ad.ad.app_ad.descriptions with the list of strings to add values to this headlines. You could refer to this code sample for adding the parameters to your ad_group_ad and creating AppAdInfo object. Below is the sample code snippet for reference in PHP. You could implement the similar logic in python client libraries on your end. Please give this a try and let us know if you are still having trouble creating this object for Ad Group Ad.
$appAd = new AppAdInfo();
$textAsset1 = new AdTextAsset();
$textAsset1->setText(new StringValue( ['value' =>'D1']));
$textAsset2 = new AdTextAsset();
$textAsset2->setText(new StringValue( ['value' =>'D2']));
$appAd->setDescriptions([$textAsset1, $textAsset2]);
Regards,
Nikisha Patel, Google Ads API Team