-
Notifications
You must be signed in to change notification settings - Fork 487
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add link_feed_item_set example (#352)
- Loading branch information
1 parent
fe995c2
commit ccf5016
Showing
1 changed file
with
134 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,134 @@ | ||
#!/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. | ||
"""Links the specified feed item set to the specified feed item. | ||
The specified feed item set must not be created as a dynamic set, i.e. both | ||
dynamic_location_set_filter and dynamic_affiliate_location_set_filter must not | ||
be set. Learn more here: | ||
https://developers.google.com/google-ads/api/docs/location-extensions/feed-item-set?hl=en#adding-feed-item | ||
""" | ||
|
||
import argparse | ||
import sys | ||
|
||
from google.ads.google_ads.client import GoogleAdsClient | ||
from google.ads.google_ads.errors import GoogleAdsException | ||
from google.ads.google_ads.util import ResourceName | ||
|
||
|
||
def main(client, customer_id, feed_id, feed_item_id, feed_item_set_id): | ||
"""The main method that creates all necessary entities for the example. | ||
Args: | ||
client: an initialized GoogleAdsClient instance. | ||
customer_id: a client customer ID. | ||
feed_id: the ID of the feed associated with the specified feed item set. | ||
feed_item_id: the ID of the specified feed item. | ||
feed_item_set_id: the ID of the feed item set to link to the feed item. | ||
""" | ||
feed_item_set_link_service = client.get_service( | ||
"FeedItemSetLinkService", version="v6" | ||
) | ||
feed_item_set_link_operation = client.get_type( | ||
"FeedItemSetLinkOperation", version="v6" | ||
) | ||
|
||
# Construct an operation that will link the feed item to the feed item set. | ||
feed_item_set_link = feed_item_set_link_operation.create | ||
|
||
# Construct a resource name for a feed item, which is in the format: | ||
# customers/{customer_id}/feedItems/{feed_id}~{feed_item_id} | ||
feed_item_set_link.feed_item = client.get_service( | ||
"FeedItemService", version="v6" | ||
).feed_item_path( | ||
customer_id, ResourceName.format_composite(feed_id, feed_item_id), | ||
) | ||
# Construct a resource name for a feed item set, which is in the | ||
# format: customers/{customer_id}/feedItemSets/{feed_id}~{feed_item_set_id} | ||
feed_item_set_link.feed_item_set = client.get_service( | ||
"FeedItemSetService", version="v6" | ||
).feed_item_set_path( | ||
customer_id, ResourceName.format_composite(feed_id, feed_item_set_id), | ||
) | ||
|
||
# Issue a mutate request to add the feed item set link on the server. | ||
try: | ||
response = feed_item_set_link_service.mutate_feed_item_set_links( | ||
customer_id, [feed_item_set_link_operation] | ||
) | ||
print( | ||
"Created a feed item set link with resource name: " | ||
f"'{response.results[0].resource_name}'" | ||
) | ||
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) | ||
|
||
|
||
if __name__ == "__main__": | ||
# GoogleAdsClient will read the google-ads.yaml configuration file in the | ||
# home directory if none is specified. | ||
google_ads_client = GoogleAdsClient.load_from_storage() | ||
|
||
parser = argparse.ArgumentParser( | ||
description= | ||
"Links the specified feed item set to the specified feed item." | ||
) | ||
# 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( | ||
"-f", | ||
"--feed_id", | ||
type=str, | ||
required=True, | ||
help="The feed ID.", | ||
) | ||
parser.add_argument( | ||
"-i", | ||
"--feed_item_id", | ||
type=str, | ||
required=True, | ||
help="The feed item ID.", | ||
) | ||
parser.add_argument( | ||
"-s", | ||
"--feed_item_set_id", | ||
type=str, | ||
required=True, | ||
help="The feed item set ID.", | ||
) | ||
args = parser.parse_args() | ||
|
||
main( | ||
google_ads_client, | ||
args.customer_id, | ||
args.feed_id, | ||
args.feed_item_id, | ||
args.feed_item_set_id, | ||
) |