google-adwords-api 0.11.1 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/ChangeLog +3 -0
- data/{README → README.md} +0 -0
- data/lib/adwords_api/api_config.rb +0 -76
- data/lib/adwords_api/version.rb +1 -1
- data/test/templates/v201309/basic_operations_get_campaigns.def +1 -1
- data/test/templates/v201309/misc_use_oauth2_jwt.def +1 -1
- metadata +3 -148
- data/examples/v201306/account_management/create_account.rb +0 -95
- data/examples/v201306/account_management/get_account_alerts.rb +0 -122
- data/examples/v201306/account_management/get_account_changes.rb +0 -145
- data/examples/v201306/account_management/get_account_hierarchy.rb +0 -103
- data/examples/v201306/advanced_operations/add_ad_group_bid_modifier.rb +0 -105
- data/examples/v201306/advanced_operations/add_click_to_download_ad.rb +0 -137
- data/examples/v201306/advanced_operations/add_site_links.rb +0 -244
- data/examples/v201306/advanced_operations/create_and_attach_shared_keyword_set.rb +0 -147
- data/examples/v201306/advanced_operations/find_and_remove_criteria_from_shared_set.rb +0 -181
- data/examples/v201306/advanced_operations/get_ad_group_bid_modifiers.rb +0 -106
- data/examples/v201306/basic_operations/add_ad_groups.rb +0 -143
- data/examples/v201306/basic_operations/add_campaigns.rb +0 -162
- data/examples/v201306/basic_operations/add_keywords.rb +0 -116
- data/examples/v201306/basic_operations/add_text_ads.rb +0 -113
- data/examples/v201306/basic_operations/delete_ad.rb +0 -93
- data/examples/v201306/basic_operations/delete_ad_group.rb +0 -110
- data/examples/v201306/basic_operations/delete_campaign.rb +0 -111
- data/examples/v201306/basic_operations/delete_keyword.rb +0 -98
- data/examples/v201306/basic_operations/get_ad_groups.rb +0 -106
- data/examples/v201306/basic_operations/get_campaigns.rb +0 -101
- data/examples/v201306/basic_operations/get_campaigns_with_awql.rb +0 -93
- data/examples/v201306/basic_operations/get_keywords.rb +0 -112
- data/examples/v201306/basic_operations/get_text_ads.rb +0 -114
- data/examples/v201306/basic_operations/pause_ad.rb +0 -92
- data/examples/v201306/basic_operations/update_ad_group.rb +0 -89
- data/examples/v201306/basic_operations/update_campaign.rb +0 -90
- data/examples/v201306/basic_operations/update_keyword.rb +0 -110
- data/examples/v201306/campaign_management/add_experiment.rb +0 -166
- data/examples/v201306/campaign_management/add_keywords_in_bulk.rb +0 -158
- data/examples/v201306/campaign_management/add_location_extension.rb +0 -125
- data/examples/v201306/campaign_management/add_location_extension_override.rb +0 -91
- data/examples/v201306/campaign_management/get_all_disapproved_ads.rb +0 -101
- data/examples/v201306/campaign_management/get_all_disapproved_ads_with_awql.rb +0 -92
- data/examples/v201306/campaign_management/promote_experiment.rb +0 -85
- data/examples/v201306/campaign_management/set_ad_parameters.rb +0 -122
- data/examples/v201306/campaign_management/set_criterion_bid_modifier.rb +0 -110
- data/examples/v201306/campaign_management/validate_text_ad.rb +0 -114
- data/examples/v201306/error_handling/handle_captcha_challenge.rb +0 -93
- data/examples/v201306/error_handling/handle_partial_failures.rb +0 -134
- data/examples/v201306/error_handling/handle_policy_violation_error.rb +0 -145
- data/examples/v201306/error_handling/handle_two_factor_authorization_error.rb +0 -88
- data/examples/v201306/migration/upgrade_legacy_sitelinks.rb +0 -313
- data/examples/v201306/misc/get_all_images_and_videos.rb +0 -108
- data/examples/v201306/misc/setup_oauth2.rb +0 -88
- data/examples/v201306/misc/upload_image.rb +0 -97
- data/examples/v201306/misc/use_oauth2_jwt.rb +0 -97
- data/examples/v201306/optimization/estimate_keyword_traffic.rb +0 -137
- data/examples/v201306/optimization/get_keyword_bid_simulations.rb +0 -100
- data/examples/v201306/optimization/get_keyword_ideas.rb +0 -130
- data/examples/v201306/optimization/get_placement_ideas.rb +0 -112
- data/examples/v201306/remarketing/add_audience.rb +0 -123
- data/examples/v201306/remarketing/add_conversion_tracker.rb +0 -104
- data/examples/v201306/reporting/download_criteria_report.rb +0 -87
- data/examples/v201306/reporting/download_criteria_report_with_awql.rb +0 -86
- data/examples/v201306/reporting/get_campaign_stats.rb +0 -113
- data/examples/v201306/reporting/get_report_fields.rb +0 -79
- data/examples/v201306/reporting/parallel_report_download.rb +0 -171
- data/examples/v201306/targeting/add_campaign_targeting_criteria.rb +0 -123
- data/examples/v201306/targeting/add_demographic_targeting_criteria.rb +0 -116
- data/examples/v201306/targeting/get_campaign_targeting_criteria.rb +0 -110
- data/examples/v201306/targeting/get_targetable_languages_and_carriers.rb +0 -94
- data/examples/v201306/targeting/lookup_location.rb +0 -112
- data/examples/v201402/advanced_operations/add_places_location_extensions.rb~ +0 -159
- data/examples/v201402/basic_operations/add_ad_groups.rb~ +0 -147
- data/examples/v201402/misc/create_ad_words_session_without_properties_file.rb~ +0 -94
- data/examples/v201402/remarketing/add_conversion_tracker.rb~ +0 -109
- data/examples/v201402/shopping_campaigns/add_product_partition_tree.rb~ +0 -269
- data/examples/v201402/shopping_campaigns/add_shopping_campaign.rb~ +0 -136
- data/examples/v201402/shopping_campaigns/get_product_category_taxonomy.rb~ +0 -128
- data/examples/v201402/shopping_campaigns/set_product_sales_channel.rb~ +0 -98
- data/lib/adwords_api/v201306/ad_extension_override_service.rb +0 -38
- data/lib/adwords_api/v201306/ad_extension_override_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/ad_group_ad_service.rb +0 -42
- data/lib/adwords_api/v201306/ad_group_ad_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/ad_group_bid_modifier_service.rb +0 -38
- data/lib/adwords_api/v201306/ad_group_bid_modifier_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/ad_group_criterion_service.rb +0 -42
- data/lib/adwords_api/v201306/ad_group_criterion_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/ad_group_feed_service.rb +0 -38
- data/lib/adwords_api/v201306/ad_group_feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/ad_group_service.rb +0 -42
- data/lib/adwords_api/v201306/ad_group_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/ad_param_service.rb +0 -38
- data/lib/adwords_api/v201306/ad_param_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/adwords_user_list_service.rb +0 -38
- data/lib/adwords_api/v201306/adwords_user_list_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/alert_service.rb +0 -34
- data/lib/adwords_api/v201306/alert_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/bidding_strategy_service.rb +0 -38
- data/lib/adwords_api/v201306/bidding_strategy_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/budget_order_service.rb +0 -42
- data/lib/adwords_api/v201306/budget_order_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/budget_service.rb +0 -38
- data/lib/adwords_api/v201306/budget_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/campaign_ad_extension_service.rb +0 -38
- data/lib/adwords_api/v201306/campaign_ad_extension_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/campaign_criterion_service.rb +0 -42
- data/lib/adwords_api/v201306/campaign_criterion_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/campaign_feed_service.rb +0 -38
- data/lib/adwords_api/v201306/campaign_feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/campaign_service.rb +0 -42
- data/lib/adwords_api/v201306/campaign_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/campaign_shared_set_service.rb +0 -38
- data/lib/adwords_api/v201306/campaign_shared_set_service_registry.rb +0 -47
- data/lib/adwords_api/v201306/constant_data_service.rb +0 -62
- data/lib/adwords_api/v201306/constant_data_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/conversion_tracker_service.rb +0 -38
- data/lib/adwords_api/v201306/conversion_tracker_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/customer_service.rb +0 -34
- data/lib/adwords_api/v201306/customer_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/customer_sync_service.rb +0 -34
- data/lib/adwords_api/v201306/customer_sync_service_registry.rb +0 -47
- data/lib/adwords_api/v201306/data_service.rb +0 -38
- data/lib/adwords_api/v201306/data_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/experiment_service.rb +0 -38
- data/lib/adwords_api/v201306/experiment_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/feed_item_service.rb +0 -38
- data/lib/adwords_api/v201306/feed_item_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/feed_mapping_service.rb +0 -38
- data/lib/adwords_api/v201306/feed_mapping_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/feed_service.rb +0 -38
- data/lib/adwords_api/v201306/feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/geo_location_service.rb +0 -34
- data/lib/adwords_api/v201306/geo_location_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/location_criterion_service.rb +0 -34
- data/lib/adwords_api/v201306/location_criterion_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/managed_customer_service.rb +0 -50
- data/lib/adwords_api/v201306/managed_customer_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/media_service.rb +0 -38
- data/lib/adwords_api/v201306/media_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/mutate_job_service.rb +0 -42
- data/lib/adwords_api/v201306/mutate_job_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/report_definition_service.rb +0 -34
- data/lib/adwords_api/v201306/report_definition_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/shared_criterion_service.rb +0 -38
- data/lib/adwords_api/v201306/shared_criterion_service_registry.rb +0 -47
- data/lib/adwords_api/v201306/shared_set_service.rb +0 -38
- data/lib/adwords_api/v201306/shared_set_service_registry.rb +0 -47
- data/lib/adwords_api/v201306/targeting_idea_service.rb +0 -38
- data/lib/adwords_api/v201306/targeting_idea_service_registry.rb +0 -46
- data/lib/adwords_api/v201306/traffic_estimator_service.rb +0 -34
- data/lib/adwords_api/v201306/traffic_estimator_service_registry.rb +0 -46
- data/test/adwords_api/test_adwords_api.rb~ +0 -127
- data/test/templates/v201306/basic_operations_get_campaigns.def +0 -114
- data/test/templates/v201306/misc_use_oauth2_jwt.def +0 -131
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
# Encoding: utf-8
|
|
3
|
-
#
|
|
4
|
-
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
|
5
|
-
#
|
|
6
|
-
# Copyright:: Copyright 2013, Google Inc. All Rights Reserved.
|
|
7
|
-
#
|
|
8
|
-
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
-
# you may not use this file except in compliance with the License.
|
|
10
|
-
# You may obtain a copy of the License at
|
|
11
|
-
#
|
|
12
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
-
#
|
|
14
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
17
|
-
# implied.
|
|
18
|
-
# See the License for the specific language governing permissions and
|
|
19
|
-
# limitations under the License.
|
|
20
|
-
#
|
|
21
|
-
# This example migrates legacy sitelinks to upgraded sitelinks for a given list
|
|
22
|
-
# of campaigns. The campaigns must be upgraded to enhanced campaigns before you
|
|
23
|
-
# can run this example. To upgrade a campaign to enhanced, run
|
|
24
|
-
# set_campaign_enhanced.rb. To get all campaigns, run get_campaigns.rb.
|
|
25
|
-
#
|
|
26
|
-
# Tags: CampaignAdExtensionService.get, CampaignAdExtensionService.mutate
|
|
27
|
-
# Tags: FeedService.mutate, FeedItemService.mutate, FeedMappingService.mutate
|
|
28
|
-
# Tags: CampaignFeedService.mutate
|
|
29
|
-
|
|
30
|
-
require 'adwords_api'
|
|
31
|
-
|
|
32
|
-
def upgrade_legacy_sitelinks(campaign_ids)
|
|
33
|
-
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
|
34
|
-
# when called without parameters.
|
|
35
|
-
adwords = AdwordsApi::Api.new
|
|
36
|
-
|
|
37
|
-
# To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
|
|
38
|
-
# the configuration file or provide your own logger:
|
|
39
|
-
# adwords.logger = Logger.new('adwords_xml.log')
|
|
40
|
-
|
|
41
|
-
# Obtain the required services.
|
|
42
|
-
campaign_ad_extension_srv =
|
|
43
|
-
adwords.service(:CampaignAdExtensionService, API_VERSION)
|
|
44
|
-
feed_mapping_srv = adwords.service(:FeedMappingService, API_VERSION)
|
|
45
|
-
feed_srv = adwords.service(:FeedService, API_VERSION)
|
|
46
|
-
feed_item_srv = adwords.service(:FeedItemService, API_VERSION)
|
|
47
|
-
campaign_feed_srv = adwords.service(:CampaignFeedService, API_VERSION)
|
|
48
|
-
|
|
49
|
-
# Try to retrieve an existing feed that has been mapped for use with
|
|
50
|
-
# sitelinks. If multiple such feeds exist, the first matching feed is
|
|
51
|
-
# retrieved. You could modify this code example to retrieve all the feeds
|
|
52
|
-
# and pick the appropriate feed based on user input.
|
|
53
|
-
site_links_feed = get_existing_feed(feed_mapping_srv)
|
|
54
|
-
if site_links_feed.nil?
|
|
55
|
-
# Create a feed for storing sitelinks.
|
|
56
|
-
site_links_feed = create_site_links_feed(feed_srv)
|
|
57
|
-
# Map the feed for using with sitelinks.
|
|
58
|
-
create_site_links_feed_mapping(feed_mapping_srv, site_links_feed)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
campaign_ids.each do |campaign_id|
|
|
62
|
-
# Get legacy extensions for the campaign.
|
|
63
|
-
legacy_extensions = get_legacy_extensions_for_campaign(
|
|
64
|
-
campaign_ad_extension_srv, campaign_id)
|
|
65
|
-
legacy_extensions.each do |extension|
|
|
66
|
-
# Get the sitelinks.
|
|
67
|
-
legacy_site_links = extension[:ad_extension][:sitelinks]
|
|
68
|
-
|
|
69
|
-
# Add the sitelinks to the feed.
|
|
70
|
-
site_link_feed_item_ids = create_site_link_feed_items(feed_item_srv,
|
|
71
|
-
site_links_feed,
|
|
72
|
-
legacy_site_links)
|
|
73
|
-
|
|
74
|
-
# Associate feeditems to the campaign.
|
|
75
|
-
associate_sitelink_feed_items_with_campaign(campaign_feed_srv,
|
|
76
|
-
site_links_feed,
|
|
77
|
-
site_link_feed_item_ids,
|
|
78
|
-
campaign_id)
|
|
79
|
-
|
|
80
|
-
# Once the upgraded sitelinks are added to a campaign, the legacy
|
|
81
|
-
# sitelinks will stop serving. You can delete the legacy sitelinks
|
|
82
|
-
# once you have verified that the migration went fine. In case the
|
|
83
|
-
# migration didn't succeed, you can roll back the migration by deleting
|
|
84
|
-
# the campaign feed you created in the previous step.
|
|
85
|
-
campaign_ad_extension_srv.mutate([
|
|
86
|
-
{:operator => 'REMOVE', :operand => extension}
|
|
87
|
-
])
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
# Create a feed for holding upgraded sitelinks.
|
|
93
|
-
def create_site_links_feed(feed_srv)
|
|
94
|
-
# Create the feed.
|
|
95
|
-
site_links_feed = {
|
|
96
|
-
:name => 'Feed For Sitelinks',
|
|
97
|
-
:attributes => [
|
|
98
|
-
{:type => 'STRING', :name => 'Link Text'},
|
|
99
|
-
{:type => 'URL', :name => 'Link URL'}
|
|
100
|
-
],
|
|
101
|
-
:origin => 'USER'
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
# Add the feed.
|
|
105
|
-
response = feed_srv.mutate([
|
|
106
|
-
{:operator => 'ADD', :operand => site_links_feed}
|
|
107
|
-
])
|
|
108
|
-
|
|
109
|
-
saved_feed = response[:value].first
|
|
110
|
-
return {
|
|
111
|
-
:site_links_feed_id => saved_feed[:id],
|
|
112
|
-
:saved_attributes => saved_feed[:attributes],
|
|
113
|
-
:link_text_feed_attribute_id => saved_feed[:attributes][0][:id],
|
|
114
|
-
:link_url_feed_attribute_id => saved_feed[:attributes][1][:id]
|
|
115
|
-
}
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
# Map the feed for use with Sitelinks.
|
|
119
|
-
def create_site_links_feed_mapping(feed_mapping_srv, site_links_feed)
|
|
120
|
-
# Map the feedAttributeIds to the fieldId constants.
|
|
121
|
-
link_text_field_mapping = {
|
|
122
|
-
:feed_attribute_id => site_links_feed[:link_text_feed_attribute_id],
|
|
123
|
-
:field_id => PLACEHOLDER_FIELD_SITELINK_TEXT
|
|
124
|
-
}
|
|
125
|
-
link_url_field_mapping = {
|
|
126
|
-
:feed_attribute_id => site_links_feed[:link_url_feed_attribute_id],
|
|
127
|
-
:field_id => PLACEHOLDER_FIELD_SITELINK_URL
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
# Create the field mapping.
|
|
131
|
-
feed_mapping = {
|
|
132
|
-
:placeholder_type => PLACEHOLDER_SITELINKS,
|
|
133
|
-
:feed_id => site_links_feed[:site_links_feed_id],
|
|
134
|
-
:attribute_field_mappings =>
|
|
135
|
-
[link_text_field_mapping, link_url_field_mapping]
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
# Save the field mapping.
|
|
139
|
-
feed_mapping_srv.mutate([{:operator => 'ADD', :operand => feed_mapping}])
|
|
140
|
-
end
|
|
141
|
-
|
|
142
|
-
# Retrieves an existing feed that is mapped to hold sitelinks. The first active
|
|
143
|
-
# sitelinks feed is retrieved by this method.
|
|
144
|
-
def get_existing_feed(feed_mapping_srv)
|
|
145
|
-
selector = {
|
|
146
|
-
:fields => ['FeedId', 'FeedMappingId', 'PlaceholderType', 'Status',
|
|
147
|
-
'AttributeFieldMappings'],
|
|
148
|
-
:predicates => [
|
|
149
|
-
{
|
|
150
|
-
:field => 'PlaceholderType',
|
|
151
|
-
:operator => 'EQUALS',
|
|
152
|
-
:values => [PLACEHOLDER_SITELINKS]
|
|
153
|
-
},
|
|
154
|
-
{:field => 'Status', :operator => 'EQUALS', :values => ['ACTIVE']}
|
|
155
|
-
]
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
response = feed_mapping_srv.get(selector)
|
|
159
|
-
if response and response[:entries]
|
|
160
|
-
response[:entries].each do |feed_mapping|
|
|
161
|
-
feed_id = feed_mapping[:feed_id]
|
|
162
|
-
text_attribute_id = nil
|
|
163
|
-
url_attribute_id = nil
|
|
164
|
-
feed_mapping[:attribute_field_mappings].each do |attribute_mapping|
|
|
165
|
-
case attribute_mapping[:field_id].to_i
|
|
166
|
-
when PLACEHOLDER_FIELD_SITELINK_TEXT
|
|
167
|
-
text_attribute_id = attribute_mapping[:feed_attribute_id]
|
|
168
|
-
when PLACEHOLDER_FIELD_SITELINK_URL
|
|
169
|
-
url_attribute_id = attribute_mapping[:feed_attribute_id]
|
|
170
|
-
end
|
|
171
|
-
end
|
|
172
|
-
unless feed_id.nil? or text_attribute_id.nil? or url_attribute_id.nil?
|
|
173
|
-
return {
|
|
174
|
-
:site_links_feed_id => feed_id,
|
|
175
|
-
:link_text_feed_attribute_id => text_attribute_id,
|
|
176
|
-
:link_url_feed_attribute_id => url_attribute_id
|
|
177
|
-
}
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
end
|
|
181
|
-
return nil
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
# Gets legacy sitelink extensions for a campaign.
|
|
185
|
-
def get_legacy_extensions_for_campaign(campaign_ad_extension_srv, campaign_id)
|
|
186
|
-
# Create the selector.
|
|
187
|
-
selector = {
|
|
188
|
-
:fields => ['CampaignId', 'AdExtensionId',
|
|
189
|
-
'Status', 'DisplayText', 'DestinationUrl'],
|
|
190
|
-
:predicates => [
|
|
191
|
-
# Filter the results for specified campaign id.
|
|
192
|
-
{:field => 'CampaignId', :operator => 'EQUALS', :values => [campaign_id]},
|
|
193
|
-
# Filter the results for active campaign ad extensions. You may add
|
|
194
|
-
# additional filtering conditions here as required.
|
|
195
|
-
{:field => 'Status', :operator => 'EQUALS', :values => ['ACTIVE']},
|
|
196
|
-
{
|
|
197
|
-
:field => 'AdExtensionType',
|
|
198
|
-
:operator => 'EQUALS',
|
|
199
|
-
:values => ['SITELINKS_EXTENSION']
|
|
200
|
-
}
|
|
201
|
-
]
|
|
202
|
-
}
|
|
203
|
-
response = campaign_ad_extension_srv.get(selector)
|
|
204
|
-
return (response and response[:entries]) ? response[:entries] : []
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
# Adds legacy sitelinks to the sitelinks feed.
|
|
208
|
-
def create_site_link_feed_items(feed_item_srv, site_links_feed, site_links)
|
|
209
|
-
# Create operation for adding each legacy sitelink to the sitelinks feed.
|
|
210
|
-
feed_item_operations = site_links.map do |site_link|
|
|
211
|
-
{
|
|
212
|
-
:operator => 'ADD',
|
|
213
|
-
:operand => {
|
|
214
|
-
:feed_id => site_links_feed[:site_links_feed_id],
|
|
215
|
-
:attribute_values => [
|
|
216
|
-
{
|
|
217
|
-
:feed_attribute_id => site_links_feed[:link_text_feed_attribute_id],
|
|
218
|
-
:string_value => site_link[:display_text]
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
:feed_attribute_id => site_links_feed[:link_url_feed_attribute_id],
|
|
222
|
-
:string_value => site_link[:destination_url]
|
|
223
|
-
}
|
|
224
|
-
]
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
end
|
|
228
|
-
|
|
229
|
-
response = feed_item_srv.mutate(feed_item_operations);
|
|
230
|
-
# Retrieve the feed item ids.
|
|
231
|
-
site_link_feed_item_ids = response[:value].map {|item| item[:feed_item_id]}
|
|
232
|
-
return site_link_feed_item_ids
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
# Associates sitelink feed items with a campaign.
|
|
236
|
-
def associate_sitelink_feed_items_with_campaign(campaign_feed_srv,
|
|
237
|
-
site_links_feed, site_link_feed_item_ids, campaign_id)
|
|
238
|
-
# Create a custom matching function that matches the given feed items to the
|
|
239
|
-
# campaign.
|
|
240
|
-
request_context_operand = {
|
|
241
|
-
:xsi_type => 'RequestContextOperand',
|
|
242
|
-
:context_type => 'FEED_ITEM_ID'
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
operands = site_link_feed_item_ids.map do |feed_item_id|
|
|
246
|
-
{
|
|
247
|
-
:xsi_type => 'ConstantOperand',
|
|
248
|
-
:long_value => feed_item_id,
|
|
249
|
-
:type => 'LONG'
|
|
250
|
-
}
|
|
251
|
-
end
|
|
252
|
-
|
|
253
|
-
function = {
|
|
254
|
-
:operator => 'IN',
|
|
255
|
-
:lhs_operand => [request_context_operand],
|
|
256
|
-
:rhs_operand => operands
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
# Create upgraded sitelinks for the campaign. Use the sitelinks feed we
|
|
260
|
-
# created, and restrict feed items by matching function.
|
|
261
|
-
campaign_feed = {
|
|
262
|
-
:feed_id => site_links_feed[:site_links_feed_id],
|
|
263
|
-
:campaign_id => campaign_id,
|
|
264
|
-
:matching_function => function,
|
|
265
|
-
:placeholder_types => [PLACEHOLDER_SITELINKS]
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
campaign_feed_srv.mutate([{:operator => 'ADD', :operand => campaign_feed}])
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
if __FILE__ == $0
|
|
272
|
-
API_VERSION = :v201306
|
|
273
|
-
|
|
274
|
-
# See the Placeholder reference page for a list of all the placeholder types
|
|
275
|
-
# and fields, see:
|
|
276
|
-
# https://developers.google.com/adwords/api/docs/appendix/placeholders
|
|
277
|
-
PLACEHOLDER_SITELINKS = 1
|
|
278
|
-
PLACEHOLDER_FIELD_SITELINK_TEXT = 1
|
|
279
|
-
PLACEHOLDER_FIELD_SITELINK_URL = 2
|
|
280
|
-
|
|
281
|
-
begin
|
|
282
|
-
# IDs of campaigns to add upgrade legacy sitelinks for.
|
|
283
|
-
campaign_ids = [
|
|
284
|
-
'INSERT_CAMPAIGN_ID_HERE'.to_i,
|
|
285
|
-
'INSERT_CAMPAIGN_ID_HERE'.to_i
|
|
286
|
-
]
|
|
287
|
-
|
|
288
|
-
upgrade_legacy_sitelinks(campaign_ids)
|
|
289
|
-
|
|
290
|
-
# Authorization error.
|
|
291
|
-
rescue AdsCommon::Errors::OAuth2VerificationRequired => e
|
|
292
|
-
puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
|
|
293
|
-
"OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
|
|
294
|
-
"to retrieve and store OAuth2 tokens."
|
|
295
|
-
puts "See this wiki page for more details:\n\n " +
|
|
296
|
-
'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
|
|
297
|
-
|
|
298
|
-
# HTTP errors.
|
|
299
|
-
rescue AdsCommon::Errors::HttpError => e
|
|
300
|
-
puts "HTTP Error: %s" % e
|
|
301
|
-
|
|
302
|
-
# API errors.
|
|
303
|
-
rescue AdwordsApi::Errors::ApiException => e
|
|
304
|
-
puts "Message: %s" % e.message
|
|
305
|
-
puts 'Errors:'
|
|
306
|
-
e.errors.each_with_index do |error, index|
|
|
307
|
-
puts "\tError [%d]:" % (index + 1)
|
|
308
|
-
error.each do |field, value|
|
|
309
|
-
puts "\t\t%s: %s" % [field, value]
|
|
310
|
-
end
|
|
311
|
-
end
|
|
312
|
-
end
|
|
313
|
-
end
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
# Encoding: utf-8
|
|
3
|
-
#
|
|
4
|
-
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
|
5
|
-
#
|
|
6
|
-
# Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
|
|
7
|
-
#
|
|
8
|
-
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
-
# you may not use this file except in compliance with the License.
|
|
10
|
-
# You may obtain a copy of the License at
|
|
11
|
-
#
|
|
12
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
-
#
|
|
14
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
17
|
-
# implied.
|
|
18
|
-
# See the License for the specific language governing permissions and
|
|
19
|
-
# limitations under the License.
|
|
20
|
-
#
|
|
21
|
-
# This example illustrates how to retrieve all images and videos. To upload an
|
|
22
|
-
# image, run upload_image.rb. To upload video, see:
|
|
23
|
-
# http://adwords.google.com/support/aw/bin/answer.py?hl=en&answer=39454.
|
|
24
|
-
#
|
|
25
|
-
# Tags: MediaService.get
|
|
26
|
-
|
|
27
|
-
require 'adwords_api'
|
|
28
|
-
|
|
29
|
-
def get_all_images_and_videos()
|
|
30
|
-
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
|
31
|
-
# when called without parameters.
|
|
32
|
-
adwords = AdwordsApi::Api.new
|
|
33
|
-
|
|
34
|
-
# To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
|
|
35
|
-
# the configuration file or provide your own logger:
|
|
36
|
-
# adwords.logger = Logger.new('adwords_xml.log')
|
|
37
|
-
|
|
38
|
-
media_srv = adwords.service(:MediaService, API_VERSION)
|
|
39
|
-
|
|
40
|
-
# Get all the images and videos.
|
|
41
|
-
selector = {
|
|
42
|
-
:fields => ['MediaId', 'Height', 'Width', 'MimeType', 'Urls'],
|
|
43
|
-
:ordering => [
|
|
44
|
-
{:field => 'MediaId', :sort_order => 'ASCENDING'}
|
|
45
|
-
],
|
|
46
|
-
:predicates => [
|
|
47
|
-
{:field => 'Type', :operator => 'IN', :values => ['IMAGE', 'VIDEO']}
|
|
48
|
-
],
|
|
49
|
-
:paging => {
|
|
50
|
-
:start_index => 0,
|
|
51
|
-
:number_results => PAGE_SIZE
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
# Set initial values.
|
|
56
|
-
offset, page = 0, {}
|
|
57
|
-
|
|
58
|
-
begin
|
|
59
|
-
page = media_srv.get(selector)
|
|
60
|
-
if page[:entries]
|
|
61
|
-
page[:entries].each do |entry|
|
|
62
|
-
full_dimensions = entry[:dimensions]['FULL']
|
|
63
|
-
puts "Entry ID %d with dimensions %dx%d and MIME type is '%s'" %
|
|
64
|
-
[entry[:media_id], full_dimensions[:height],
|
|
65
|
-
full_dimensions[:width], entry[:mime_type]]
|
|
66
|
-
end
|
|
67
|
-
# Increment values to request the next page.
|
|
68
|
-
offset += PAGE_SIZE
|
|
69
|
-
selector[:paging][:start_index] = offset
|
|
70
|
-
end
|
|
71
|
-
end while page[:total_num_entries] > offset
|
|
72
|
-
|
|
73
|
-
if page.include?(:total_num_entries)
|
|
74
|
-
puts "\tFound %d entries." % page[:total_num_entries]
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
if __FILE__ == $0
|
|
79
|
-
API_VERSION = :v201306
|
|
80
|
-
PAGE_SIZE = 500
|
|
81
|
-
|
|
82
|
-
begin
|
|
83
|
-
get_all_images_and_videos()
|
|
84
|
-
|
|
85
|
-
# Authorization error.
|
|
86
|
-
rescue AdsCommon::Errors::OAuth2VerificationRequired => e
|
|
87
|
-
puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
|
|
88
|
-
"OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
|
|
89
|
-
"to retrieve and store OAuth2 tokens."
|
|
90
|
-
puts "See this wiki page for more details:\n\n " +
|
|
91
|
-
'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
|
|
92
|
-
|
|
93
|
-
# HTTP errors.
|
|
94
|
-
rescue AdsCommon::Errors::HttpError => e
|
|
95
|
-
puts "HTTP Error: %s" % e
|
|
96
|
-
|
|
97
|
-
# API errors.
|
|
98
|
-
rescue AdwordsApi::Errors::ApiException => e
|
|
99
|
-
puts "Message: %s" % e.message
|
|
100
|
-
puts 'Errors:'
|
|
101
|
-
e.errors.each_with_index do |error, index|
|
|
102
|
-
puts "\tError [%d]:" % (index + 1)
|
|
103
|
-
error.each do |field, value|
|
|
104
|
-
puts "\t\t%s: %s" % [field, value]
|
|
105
|
-
end
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
# Encoding: utf-8
|
|
3
|
-
#
|
|
4
|
-
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
|
5
|
-
#
|
|
6
|
-
# Copyright:: Copyright 2013, Google Inc. All Rights Reserved.
|
|
7
|
-
#
|
|
8
|
-
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
-
# you may not use this file except in compliance with the License.
|
|
10
|
-
# You may obtain a copy of the License at
|
|
11
|
-
#
|
|
12
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
-
#
|
|
14
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
17
|
-
# implied.
|
|
18
|
-
# See the License for the specific language governing permissions and
|
|
19
|
-
# limitations under the License.
|
|
20
|
-
#
|
|
21
|
-
# This example illustrates how to set up OAuth2.0 authentication credentials.
|
|
22
|
-
#
|
|
23
|
-
# Tags: CampaignService.get
|
|
24
|
-
|
|
25
|
-
require 'adwords_api'
|
|
26
|
-
|
|
27
|
-
def setup_oauth2()
|
|
28
|
-
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
|
29
|
-
# when called without parameters.
|
|
30
|
-
adwords = AdwordsApi::Api.new
|
|
31
|
-
|
|
32
|
-
# To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
|
|
33
|
-
# the configuration file or provide your own logger:
|
|
34
|
-
# adwords.logger = Logger.new('adwords_xml.log')
|
|
35
|
-
|
|
36
|
-
# You can call authorize explicitly to obtain the access token. Otherwise, it
|
|
37
|
-
# will be invoked automatically on the first API call.
|
|
38
|
-
# There are two ways to provide verification code, first one is via the block:
|
|
39
|
-
token = adwords.authorize() do |auth_url|
|
|
40
|
-
puts "Hit Auth error, please navigate to URL:\n\t%s" % auth_url
|
|
41
|
-
print 'log in and type the verification code: '
|
|
42
|
-
verification_code = gets.chomp
|
|
43
|
-
verification_code
|
|
44
|
-
end
|
|
45
|
-
if token
|
|
46
|
-
print "\nWould you like to update your adwords_api.yml to save " +
|
|
47
|
-
"OAuth2 credentials? (y/N): "
|
|
48
|
-
response = gets.chomp
|
|
49
|
-
if ('y'.casecmp(response) == 0) or ('yes'.casecmp(response) == 0)
|
|
50
|
-
adwords.save_oauth2_token(token)
|
|
51
|
-
puts 'OAuth2 token is now saved to ~/adwords_api.yml and will be ' +
|
|
52
|
-
'automatically used by the library.'
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
# Alternatively, you can provide one within the parameters:
|
|
57
|
-
# token = adwords.authorize({:oauth2_verification_code => verification_code})
|
|
58
|
-
|
|
59
|
-
# Note, 'token' is a Hash. Its value is not used in this example. If you need
|
|
60
|
-
# to be able to access the API in offline mode, with no user present, you
|
|
61
|
-
# should persist it to be used in subsequent invocations like this:
|
|
62
|
-
# adwords.authorize({:oauth2_token => token})
|
|
63
|
-
|
|
64
|
-
# No exception thrown - we are good to make a request.
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
if __FILE__ == $0
|
|
68
|
-
API_VERSION = :v201306
|
|
69
|
-
|
|
70
|
-
begin
|
|
71
|
-
setup_oauth2()
|
|
72
|
-
|
|
73
|
-
# HTTP errors.
|
|
74
|
-
rescue AdsCommon::Errors::HttpError => e
|
|
75
|
-
puts "HTTP Error: %s" % e
|
|
76
|
-
|
|
77
|
-
# API errors.
|
|
78
|
-
rescue AdwordsApi::Errors::ApiException => e
|
|
79
|
-
puts "Message: %s" % e.message
|
|
80
|
-
puts 'Errors:'
|
|
81
|
-
e.errors.each_with_index do |error, index|
|
|
82
|
-
puts "\tError [%d]:" % (index + 1)
|
|
83
|
-
error.each do |field, value|
|
|
84
|
-
puts "\t\t%s: %s" % [field, value]
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
end
|