google-adwords-api 0.11.1 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. data/ChangeLog +3 -0
  2. data/{README → README.md} +0 -0
  3. data/lib/adwords_api/api_config.rb +0 -76
  4. data/lib/adwords_api/version.rb +1 -1
  5. data/test/templates/v201309/basic_operations_get_campaigns.def +1 -1
  6. data/test/templates/v201309/misc_use_oauth2_jwt.def +1 -1
  7. metadata +3 -148
  8. data/examples/v201306/account_management/create_account.rb +0 -95
  9. data/examples/v201306/account_management/get_account_alerts.rb +0 -122
  10. data/examples/v201306/account_management/get_account_changes.rb +0 -145
  11. data/examples/v201306/account_management/get_account_hierarchy.rb +0 -103
  12. data/examples/v201306/advanced_operations/add_ad_group_bid_modifier.rb +0 -105
  13. data/examples/v201306/advanced_operations/add_click_to_download_ad.rb +0 -137
  14. data/examples/v201306/advanced_operations/add_site_links.rb +0 -244
  15. data/examples/v201306/advanced_operations/create_and_attach_shared_keyword_set.rb +0 -147
  16. data/examples/v201306/advanced_operations/find_and_remove_criteria_from_shared_set.rb +0 -181
  17. data/examples/v201306/advanced_operations/get_ad_group_bid_modifiers.rb +0 -106
  18. data/examples/v201306/basic_operations/add_ad_groups.rb +0 -143
  19. data/examples/v201306/basic_operations/add_campaigns.rb +0 -162
  20. data/examples/v201306/basic_operations/add_keywords.rb +0 -116
  21. data/examples/v201306/basic_operations/add_text_ads.rb +0 -113
  22. data/examples/v201306/basic_operations/delete_ad.rb +0 -93
  23. data/examples/v201306/basic_operations/delete_ad_group.rb +0 -110
  24. data/examples/v201306/basic_operations/delete_campaign.rb +0 -111
  25. data/examples/v201306/basic_operations/delete_keyword.rb +0 -98
  26. data/examples/v201306/basic_operations/get_ad_groups.rb +0 -106
  27. data/examples/v201306/basic_operations/get_campaigns.rb +0 -101
  28. data/examples/v201306/basic_operations/get_campaigns_with_awql.rb +0 -93
  29. data/examples/v201306/basic_operations/get_keywords.rb +0 -112
  30. data/examples/v201306/basic_operations/get_text_ads.rb +0 -114
  31. data/examples/v201306/basic_operations/pause_ad.rb +0 -92
  32. data/examples/v201306/basic_operations/update_ad_group.rb +0 -89
  33. data/examples/v201306/basic_operations/update_campaign.rb +0 -90
  34. data/examples/v201306/basic_operations/update_keyword.rb +0 -110
  35. data/examples/v201306/campaign_management/add_experiment.rb +0 -166
  36. data/examples/v201306/campaign_management/add_keywords_in_bulk.rb +0 -158
  37. data/examples/v201306/campaign_management/add_location_extension.rb +0 -125
  38. data/examples/v201306/campaign_management/add_location_extension_override.rb +0 -91
  39. data/examples/v201306/campaign_management/get_all_disapproved_ads.rb +0 -101
  40. data/examples/v201306/campaign_management/get_all_disapproved_ads_with_awql.rb +0 -92
  41. data/examples/v201306/campaign_management/promote_experiment.rb +0 -85
  42. data/examples/v201306/campaign_management/set_ad_parameters.rb +0 -122
  43. data/examples/v201306/campaign_management/set_criterion_bid_modifier.rb +0 -110
  44. data/examples/v201306/campaign_management/validate_text_ad.rb +0 -114
  45. data/examples/v201306/error_handling/handle_captcha_challenge.rb +0 -93
  46. data/examples/v201306/error_handling/handle_partial_failures.rb +0 -134
  47. data/examples/v201306/error_handling/handle_policy_violation_error.rb +0 -145
  48. data/examples/v201306/error_handling/handle_two_factor_authorization_error.rb +0 -88
  49. data/examples/v201306/migration/upgrade_legacy_sitelinks.rb +0 -313
  50. data/examples/v201306/misc/get_all_images_and_videos.rb +0 -108
  51. data/examples/v201306/misc/setup_oauth2.rb +0 -88
  52. data/examples/v201306/misc/upload_image.rb +0 -97
  53. data/examples/v201306/misc/use_oauth2_jwt.rb +0 -97
  54. data/examples/v201306/optimization/estimate_keyword_traffic.rb +0 -137
  55. data/examples/v201306/optimization/get_keyword_bid_simulations.rb +0 -100
  56. data/examples/v201306/optimization/get_keyword_ideas.rb +0 -130
  57. data/examples/v201306/optimization/get_placement_ideas.rb +0 -112
  58. data/examples/v201306/remarketing/add_audience.rb +0 -123
  59. data/examples/v201306/remarketing/add_conversion_tracker.rb +0 -104
  60. data/examples/v201306/reporting/download_criteria_report.rb +0 -87
  61. data/examples/v201306/reporting/download_criteria_report_with_awql.rb +0 -86
  62. data/examples/v201306/reporting/get_campaign_stats.rb +0 -113
  63. data/examples/v201306/reporting/get_report_fields.rb +0 -79
  64. data/examples/v201306/reporting/parallel_report_download.rb +0 -171
  65. data/examples/v201306/targeting/add_campaign_targeting_criteria.rb +0 -123
  66. data/examples/v201306/targeting/add_demographic_targeting_criteria.rb +0 -116
  67. data/examples/v201306/targeting/get_campaign_targeting_criteria.rb +0 -110
  68. data/examples/v201306/targeting/get_targetable_languages_and_carriers.rb +0 -94
  69. data/examples/v201306/targeting/lookup_location.rb +0 -112
  70. data/examples/v201402/advanced_operations/add_places_location_extensions.rb~ +0 -159
  71. data/examples/v201402/basic_operations/add_ad_groups.rb~ +0 -147
  72. data/examples/v201402/misc/create_ad_words_session_without_properties_file.rb~ +0 -94
  73. data/examples/v201402/remarketing/add_conversion_tracker.rb~ +0 -109
  74. data/examples/v201402/shopping_campaigns/add_product_partition_tree.rb~ +0 -269
  75. data/examples/v201402/shopping_campaigns/add_shopping_campaign.rb~ +0 -136
  76. data/examples/v201402/shopping_campaigns/get_product_category_taxonomy.rb~ +0 -128
  77. data/examples/v201402/shopping_campaigns/set_product_sales_channel.rb~ +0 -98
  78. data/lib/adwords_api/v201306/ad_extension_override_service.rb +0 -38
  79. data/lib/adwords_api/v201306/ad_extension_override_service_registry.rb +0 -46
  80. data/lib/adwords_api/v201306/ad_group_ad_service.rb +0 -42
  81. data/lib/adwords_api/v201306/ad_group_ad_service_registry.rb +0 -46
  82. data/lib/adwords_api/v201306/ad_group_bid_modifier_service.rb +0 -38
  83. data/lib/adwords_api/v201306/ad_group_bid_modifier_service_registry.rb +0 -46
  84. data/lib/adwords_api/v201306/ad_group_criterion_service.rb +0 -42
  85. data/lib/adwords_api/v201306/ad_group_criterion_service_registry.rb +0 -46
  86. data/lib/adwords_api/v201306/ad_group_feed_service.rb +0 -38
  87. data/lib/adwords_api/v201306/ad_group_feed_service_registry.rb +0 -46
  88. data/lib/adwords_api/v201306/ad_group_service.rb +0 -42
  89. data/lib/adwords_api/v201306/ad_group_service_registry.rb +0 -46
  90. data/lib/adwords_api/v201306/ad_param_service.rb +0 -38
  91. data/lib/adwords_api/v201306/ad_param_service_registry.rb +0 -46
  92. data/lib/adwords_api/v201306/adwords_user_list_service.rb +0 -38
  93. data/lib/adwords_api/v201306/adwords_user_list_service_registry.rb +0 -46
  94. data/lib/adwords_api/v201306/alert_service.rb +0 -34
  95. data/lib/adwords_api/v201306/alert_service_registry.rb +0 -46
  96. data/lib/adwords_api/v201306/bidding_strategy_service.rb +0 -38
  97. data/lib/adwords_api/v201306/bidding_strategy_service_registry.rb +0 -46
  98. data/lib/adwords_api/v201306/budget_order_service.rb +0 -42
  99. data/lib/adwords_api/v201306/budget_order_service_registry.rb +0 -46
  100. data/lib/adwords_api/v201306/budget_service.rb +0 -38
  101. data/lib/adwords_api/v201306/budget_service_registry.rb +0 -46
  102. data/lib/adwords_api/v201306/campaign_ad_extension_service.rb +0 -38
  103. data/lib/adwords_api/v201306/campaign_ad_extension_service_registry.rb +0 -46
  104. data/lib/adwords_api/v201306/campaign_criterion_service.rb +0 -42
  105. data/lib/adwords_api/v201306/campaign_criterion_service_registry.rb +0 -46
  106. data/lib/adwords_api/v201306/campaign_feed_service.rb +0 -38
  107. data/lib/adwords_api/v201306/campaign_feed_service_registry.rb +0 -46
  108. data/lib/adwords_api/v201306/campaign_service.rb +0 -42
  109. data/lib/adwords_api/v201306/campaign_service_registry.rb +0 -46
  110. data/lib/adwords_api/v201306/campaign_shared_set_service.rb +0 -38
  111. data/lib/adwords_api/v201306/campaign_shared_set_service_registry.rb +0 -47
  112. data/lib/adwords_api/v201306/constant_data_service.rb +0 -62
  113. data/lib/adwords_api/v201306/constant_data_service_registry.rb +0 -46
  114. data/lib/adwords_api/v201306/conversion_tracker_service.rb +0 -38
  115. data/lib/adwords_api/v201306/conversion_tracker_service_registry.rb +0 -46
  116. data/lib/adwords_api/v201306/customer_service.rb +0 -34
  117. data/lib/adwords_api/v201306/customer_service_registry.rb +0 -46
  118. data/lib/adwords_api/v201306/customer_sync_service.rb +0 -34
  119. data/lib/adwords_api/v201306/customer_sync_service_registry.rb +0 -47
  120. data/lib/adwords_api/v201306/data_service.rb +0 -38
  121. data/lib/adwords_api/v201306/data_service_registry.rb +0 -46
  122. data/lib/adwords_api/v201306/experiment_service.rb +0 -38
  123. data/lib/adwords_api/v201306/experiment_service_registry.rb +0 -46
  124. data/lib/adwords_api/v201306/feed_item_service.rb +0 -38
  125. data/lib/adwords_api/v201306/feed_item_service_registry.rb +0 -46
  126. data/lib/adwords_api/v201306/feed_mapping_service.rb +0 -38
  127. data/lib/adwords_api/v201306/feed_mapping_service_registry.rb +0 -46
  128. data/lib/adwords_api/v201306/feed_service.rb +0 -38
  129. data/lib/adwords_api/v201306/feed_service_registry.rb +0 -46
  130. data/lib/adwords_api/v201306/geo_location_service.rb +0 -34
  131. data/lib/adwords_api/v201306/geo_location_service_registry.rb +0 -46
  132. data/lib/adwords_api/v201306/location_criterion_service.rb +0 -34
  133. data/lib/adwords_api/v201306/location_criterion_service_registry.rb +0 -46
  134. data/lib/adwords_api/v201306/managed_customer_service.rb +0 -50
  135. data/lib/adwords_api/v201306/managed_customer_service_registry.rb +0 -46
  136. data/lib/adwords_api/v201306/media_service.rb +0 -38
  137. data/lib/adwords_api/v201306/media_service_registry.rb +0 -46
  138. data/lib/adwords_api/v201306/mutate_job_service.rb +0 -42
  139. data/lib/adwords_api/v201306/mutate_job_service_registry.rb +0 -46
  140. data/lib/adwords_api/v201306/report_definition_service.rb +0 -34
  141. data/lib/adwords_api/v201306/report_definition_service_registry.rb +0 -46
  142. data/lib/adwords_api/v201306/shared_criterion_service.rb +0 -38
  143. data/lib/adwords_api/v201306/shared_criterion_service_registry.rb +0 -47
  144. data/lib/adwords_api/v201306/shared_set_service.rb +0 -38
  145. data/lib/adwords_api/v201306/shared_set_service_registry.rb +0 -47
  146. data/lib/adwords_api/v201306/targeting_idea_service.rb +0 -38
  147. data/lib/adwords_api/v201306/targeting_idea_service_registry.rb +0 -46
  148. data/lib/adwords_api/v201306/traffic_estimator_service.rb +0 -34
  149. data/lib/adwords_api/v201306/traffic_estimator_service_registry.rb +0 -46
  150. data/test/adwords_api/test_adwords_api.rb~ +0 -127
  151. data/test/templates/v201306/basic_operations_get_campaigns.def +0 -114
  152. data/test/templates/v201306/misc_use_oauth2_jwt.def +0 -131
@@ -1,244 +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 adds a sitelinks feed and associates it with a campaign.
22
- #
23
- # Tags: CampaignFeedService.mutate, FeedItemService.mutate
24
- # Tags: FeedMappingService.mutate, FeedService.mutate
25
-
26
- require 'adwords_api'
27
-
28
- def add_site_links(campaign_id)
29
- # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
30
- # when called without parameters.
31
- adwords = AdwordsApi::Api.new
32
-
33
- # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
34
- # the configuration file or provide your own logger:
35
- # adwords.logger = Logger.new('adwords_xml.log')
36
-
37
- feed_srv = adwords.service(:FeedService, API_VERSION)
38
- feed_item_srv = adwords.service(:FeedItemService, API_VERSION)
39
- feed_mapping_srv = adwords.service(:FeedMappingService, API_VERSION)
40
- campaign_feed_srv = adwords.service(:CampaignFeedService, API_VERSION)
41
-
42
- sitelinks_data = {}
43
-
44
- # Create site links feed first.
45
- site_links_feed = {
46
- :name => 'Feed For Site Links',
47
- :attributes => [
48
- {:type => 'STRING', :name => 'Link Text'},
49
- {:type => 'URL', :name => 'Link URL'}
50
- ]
51
- }
52
-
53
- response = feed_srv.mutate([
54
- {:operator => 'ADD', :operand => site_links_feed}
55
- ])
56
- if response and response[:value]
57
- feed = response[:value].first
58
- # Attribute of type STRING.
59
- link_text_feed_attribute_id = feed[:attributes][0][:id]
60
- # Attribute of type URL.
61
- link_url_feed_attribute_id = feed[:attributes][1][:id]
62
- puts "Feed with name '%s' and ID %d was added with" %
63
- [feed[:name], feed[:id]]
64
- puts "\tText attribute ID %d and URL attribute ID %d." %
65
- [link_text_feed_attribute_id, link_url_feed_attribute_id]
66
- sitelinks_data[:feed_id] = feed[:id]
67
- sitelinks_data[:link_text_feed_id] = link_text_feed_attribute_id
68
- sitelinks_data[:link_url_feed_id] = link_url_feed_attribute_id
69
- else
70
- raise new StandardError, 'No feeds were added.'
71
- end
72
-
73
- # Create site links feed items.
74
- items_data = [
75
- {:text => 'Home', :url => 'http://www.example.com'},
76
- {:text => 'Stores', :url => 'http://www.example.com/stores'},
77
- {:text => 'On Sale', :url => 'http://www.example.com/sale'},
78
- {:text => 'Support', :url => 'http://www.example.com/support'},
79
- {:text => 'Products', :url => 'http://www.example.com/products'},
80
- {:text => 'About', :url => 'http://www.example.com/about'}
81
- ]
82
-
83
- feed_items = items_data.map do |item|
84
- {
85
- :feed_id => sitelinks_data[:feed_id],
86
- :attribute_values => [
87
- {
88
- :feed_attribute_id => sitelinks_data[:link_text_feed_id],
89
- :string_value => item[:text]
90
- },
91
- {
92
- :feed_attribute_id => sitelinks_data[:link_url_feed_id],
93
- :string_value => item[:url]
94
- }
95
- ]
96
- }
97
- end
98
-
99
- feed_items_operations = feed_items.map do |item|
100
- {:operator => 'ADD', :operand => item}
101
- end
102
-
103
- response = feed_item_srv.mutate(feed_items_operations)
104
- if response and response[:value]
105
- sitelinks_data[:feed_item_ids] = []
106
- response[:value].each do |feed_item|
107
- puts 'Feed item with ID %d was added.' % feed_item[:feed_item_id]
108
- sitelinks_data[:feed_item_ids] << feed_item[:feed_item_id]
109
- end
110
- else
111
- raise new StandardError, 'No feed items were added.'
112
- end
113
-
114
- # Create site links feed mapping.
115
- feed_mapping = {
116
- :placeholder_type => PLACEHOLDER_SITELINKS,
117
- :feed_id => sitelinks_data[:feed_id],
118
- :attribute_field_mappings => [
119
- {
120
- :feed_attribute_id => sitelinks_data[:link_text_feed_id],
121
- :field_id => PLACEHOLDER_FIELD_SITELINK_LINK_TEXT
122
- },
123
- {
124
- :feed_attribute_id => sitelinks_data[:link_url_feed_id],
125
- :field_id => PLACEHOLDER_FIELD_SITELINK_LINK_URL
126
- }
127
- ]
128
- }
129
-
130
- response = feed_mapping_srv.mutate([
131
- {:operator => 'ADD', :operand => feed_mapping}
132
- ])
133
- if response and response[:value]
134
- feed_mapping = response[:value].first
135
- puts ('Feed mapping with ID %d and placeholder type %d was saved for feed' +
136
- ' with ID %d.') % [
137
- feed_mapping[:feed_mapping_id],
138
- feed_mapping[:placeholder_type],
139
- feed_mapping[:feed_id]
140
- ]
141
- else
142
- raise new StandardError, 'No feed mappings were added.'
143
- end
144
-
145
- # Create site links campaign feed.
146
- operands = sitelinks_data[:feed_item_ids].map do |feed_item_id|
147
- {
148
- :xsi_type => 'ConstantOperand',
149
- :type => 'LONG',
150
- :long_value => feed_item_id
151
- }
152
- end
153
-
154
- feed_item_function = {
155
- :operator => 'IN',
156
- :lhs_operand => [
157
- {:xsi_type => 'RequestContextOperand', :context_type => 'FEED_ITEM_ID'}
158
- ],
159
- :rhs_operand => operands
160
- }
161
-
162
- # Optional: to target to a platform, define a function and 'AND' it with the
163
- # feed item ID link:
164
- platform_function = {
165
- :operator => 'EQUALS',
166
- :lhs_operand => [
167
- {:xsi_type => 'RequestContextOperand', :context_type => 'DEVICE_PLATFORM'}
168
- ],
169
- :rhs_operand => [
170
- {
171
- :xsi_type => 'ConstantOperand',
172
- :type => 'STRING',
173
- :string_value => 'Mobile'
174
- }
175
- ]
176
- }
177
- combined_function = {
178
- :operator => 'AND',
179
- :lhs_operand => [
180
- {:xsi_type => 'FunctionOperand', :value => feed_item_function},
181
- {:xsi_type => 'FunctionOperand', :value => platform_function}
182
- ]
183
- }
184
-
185
- campaign_feed = {
186
- :feed_id => sitelinks_data[:feed_id],
187
- :campaign_id => campaign_id,
188
- :matching_function => combined_function,
189
- # Specifying placeholder types on the CampaignFeed allows the same feed
190
- # to be used for different placeholders in different Campaigns.
191
- :placeholder_types => [PLACEHOLDER_SITELINKS]
192
- }
193
-
194
- response = campaign_feed_srv.mutate([
195
- {:operator => 'ADD', :operand => campaign_feed}
196
- ])
197
- if response and response[:value]
198
- campaign_feed = response[:value].first
199
- puts 'Campaign with ID %d was associated with feed with ID %d.' %
200
- [campaign_feed[:campaign_id], campaign_feed[:feed_id]]
201
- else
202
- raise new StandardError, 'No campaign feeds were added.'
203
- end
204
- end
205
-
206
- if __FILE__ == $0
207
- API_VERSION = :v201306
208
-
209
- # See the Placeholder reference page for a list of all the placeholder types
210
- # and fields, see:
211
- # https://developers.google.com/adwords/api/docs/appendix/placeholders
212
- PLACEHOLDER_SITELINKS = 1
213
- PLACEHOLDER_FIELD_SITELINK_LINK_TEXT = 1
214
- PLACEHOLDER_FIELD_SITELINK_LINK_URL = 2
215
-
216
- begin
217
- # Campaign ID to add site link to. Campaign must be enhanced.
218
- campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
219
- add_site_links(campaign_id)
220
-
221
- # Authorization error.
222
- rescue AdsCommon::Errors::OAuth2VerificationRequired => e
223
- puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
224
- "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
225
- "to retrieve and store OAuth2 tokens."
226
- puts "See this wiki page for more details:\n\n " +
227
- 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
228
-
229
- # HTTP errors.
230
- rescue AdsCommon::Errors::HttpError => e
231
- puts "HTTP Error: %s" % e
232
-
233
- # API errors.
234
- rescue AdwordsApi::Errors::ApiException => e
235
- puts "Message: %s" % e.message
236
- puts 'Errors:'
237
- e.errors.each_with_index do |error, index|
238
- puts "\tError [%d]:" % (index + 1)
239
- error.each do |field, value|
240
- puts "\t\t%s: %s" % [field, value]
241
- end
242
- end
243
- end
244
- end
@@ -1,147 +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 creates a shared list of negative broad match keywords, it then
22
- # attaches them to a campaign.
23
- #
24
- # Note: Shared sets is a Beta feature.
25
- #
26
- # Tags: SharedSetService.mutate, CampaignSharedSetService.mutate
27
-
28
- require 'adwords_api'
29
- require 'date'
30
-
31
- def create_and_attach_shared_keyword_set(campaign_id)
32
- # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
33
- # when called without parameters.
34
- adwords = AdwordsApi::Api.new
35
-
36
- # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
37
- # the configuration file or provide your own logger:
38
- # adwords.logger = Logger.new('adwords_xml.log')
39
-
40
- shared_set_srv = adwords.service(:SharedSetService, API_VERSION)
41
- shared_criterion_srv = adwords.service(:SharedCriterionService, API_VERSION)
42
- campaign_shared_set_srv =
43
- adwords.service(:CampaignSharedSetService, API_VERSION)
44
-
45
- # Keywords to create a shared set of.
46
- keywords = ['mars cruise', 'mars hotels']
47
-
48
- # Create shared negative keyword set.
49
- shared_set = {
50
- :name => 'API Negative keyword list - %d' % (Time.new.to_f * 1000).to_i,
51
- :type => 'NEGATIVE_KEYWORDS'
52
- }
53
-
54
- # Add shared set.
55
- response = shared_set_srv.mutate([
56
- {:operator => 'ADD', :operand => shared_set}
57
- ])
58
-
59
- if response and response[:value]
60
- shared_set = response[:value].first
61
- shared_set_id = shared_set[:shared_set_id]
62
- puts "Shared set with ID %d and name '%s' was successfully added." %
63
- [shared_set_id, shared_set[:name]]
64
- else
65
- raise StandardError, 'No shared set was added'
66
- end
67
-
68
- # Add negative keywords to shared set.
69
- shared_criteria = keywords.map do |keyword|
70
- {
71
- :criterion => {
72
- :xsi_type => 'Keyword',
73
- :text => keyword,
74
- :match_type => 'BROAD'
75
- },
76
- :negative => true,
77
- :shared_set_id => shared_set_id
78
- }
79
- end
80
-
81
- operations = shared_criteria.map do |criterion|
82
- {:operator => 'ADD', :operand => criterion}
83
- end
84
-
85
- response = shared_criterion_srv.mutate(operations)
86
- if response and response[:value]
87
- response[:value].each do |shared_criterion|
88
- puts "Added shared criterion ID %d '%s' to shared set with ID %d." %
89
- [shared_criterion[:criterion][:id],
90
- shared_criterion[:criterion][:text],
91
- shared_criterion[:shared_set_id]]
92
- end
93
- else
94
- raise StandardError, 'No shared keyword was added'
95
- end
96
-
97
- # Attach the articles to the campaign.
98
- campaign_set = {
99
- :campaign_id => campaign_id,
100
- :shared_set_id => shared_set_id
101
- }
102
-
103
- response = campaign_shared_set_srv.mutate([
104
- {:operator => 'ADD', :operand => campaign_set}
105
- ])
106
- if response and response[:value]
107
- campaign_shared_set = response[:value].first
108
- puts 'Shared set ID %d was attached to campaign ID %d' %
109
- [campaign_shared_set[:shared_set_id], campaign_shared_set[:campaign_id]]
110
- else
111
- raise StandardError, 'No campaign shared set was added'
112
- end
113
- end
114
-
115
- if __FILE__ == $0
116
- API_VERSION = :v201306
117
-
118
- begin
119
- # Campaign ID to attach shared keyword set to.
120
- campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
121
-
122
- create_and_attach_shared_keyword_set(campaign_id)
123
-
124
- # Authorization error.
125
- rescue AdsCommon::Errors::OAuth2VerificationRequired => e
126
- puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
127
- "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
128
- "to retrieve and store OAuth2 tokens."
129
- puts "See this wiki page for more details:\n\n " +
130
- 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
131
-
132
- # HTTP errors.
133
- rescue AdsCommon::Errors::HttpError => e
134
- puts "HTTP Error: %s" % e
135
-
136
- # API errors.
137
- rescue AdwordsApi::Errors::ApiException => e
138
- puts "Message: %s" % e.message
139
- puts 'Errors:'
140
- e.errors.each_with_index do |error, index|
141
- puts "\tError [%d]:" % (index + 1)
142
- error.each do |field, value|
143
- puts "\t\t%s: %s" % [field, value]
144
- end
145
- end
146
- end
147
- end
@@ -1,181 +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 demonstrates how to find shared sets, shared set criterions and
22
- # how to remove them.
23
- #
24
- # Note: Shared sets is a Beta feature.
25
- #
26
- # Tags: CampaignSharedSetService.get
27
- # Tags: SharedCriterionService.get, SharedCriterionService.mutate
28
-
29
- require 'adwords_api'
30
-
31
- def find_and_remove_criteria_from_shared_set(campaign_id)
32
- # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
33
- # when called without parameters.
34
- adwords = AdwordsApi::Api.new
35
-
36
- # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
37
- # the configuration file or provide your own logger:
38
- # adwords.logger = Logger.new('adwords_xml.log')
39
-
40
- campaign_shared_set_srv =
41
- adwords.service(:CampaignSharedSetService, API_VERSION)
42
- shared_criterion_srv = adwords.service(:SharedCriterionService, API_VERSION)
43
-
44
- shared_set_ids = []
45
- criterion_ids = []
46
-
47
- # First, retrieve all shared sets associated with the campaign.
48
-
49
- # Create selector for shared sets to:
50
- # - filter by campaign ID,
51
- # - filter by shared set type.
52
- selector = {
53
- :fields => ['SharedSetId', 'CampaignId', 'SharedSetName', 'SharedSetType',
54
- 'Status'],
55
- :predicates => [
56
- {:field => 'CampaignId', :operator => 'EQUALS', :values => [campaign_id]},
57
- {:field => 'SharedSetType', :operator => 'IN', :values =>
58
- ['NEGATIVE_KEYWORDS', 'NEGATIVE_PLACEMENTS']}
59
- ],
60
- :paging => {
61
- :start_index => 0,
62
- :number_results => PAGE_SIZE
63
- }
64
- }
65
-
66
- # Set initial values.
67
- offset, page = 0, {}
68
-
69
- begin
70
- page = campaign_shared_set_srv.get(selector)
71
- if page[:entries]
72
- page[:entries].each do |shared_set|
73
- puts "Campaign shared set ID %d and name '%s'" %
74
- [shared_set[:shared_set_id], shared_set[:shared_set_name]]
75
- shared_set_ids << shared_set[:shared_set_id]
76
- end
77
- # Increment values to request the next page.
78
- offset += PAGE_SIZE
79
- selector[:paging][:start_index] = offset
80
- end
81
- end while page[:total_num_entries] > offset
82
-
83
- # Next, Retrieve criterion IDs for all found shared sets.
84
- selector = {
85
- :fields => ['SharedSetId', 'Id', 'KeywordText', 'KeywordMatchType',
86
- 'PlacementUrl'],
87
- :predicates => [
88
- {:field => 'SharedSetId', :operator => 'IN', :values => shared_set_ids}
89
- ],
90
- :paging => {
91
- :start_index => 0,
92
- :number_results => PAGE_SIZE
93
- }
94
- }
95
-
96
- # Set initial values.
97
- offset, page = 0, {}
98
-
99
- begin
100
- page = shared_criterion_srv.get(selector)
101
- if page[:entries]
102
- page[:entries].each do |shared_criterion|
103
- if shared_criterion[:criterion][:type] == 'KEYWORD'
104
- puts "Shared negative keyword with ID %d and text '%s' was found." %
105
- [shared_criterion[:criterion][:id],
106
- shared_criterion[:criterion][:text]]
107
- elsif shared_criterion[:criterion][:type] == 'PLACEMENT'
108
- puts "Shared negative placement with ID %d and url '%s' was found." %
109
- [shared_criterion[:criterion][:id],
110
- shared_criterion[:criterion][:url]]
111
- else
112
- puts 'Shared criterion with ID %d was found.' %
113
- [shared_criterion[:criterion][:id]]
114
- end
115
- criterion_ids << {
116
- :shared_set_id => shared_criterion[:shared_set_id],
117
- :criterion_id => shared_criterion[:criterion][:id]
118
- }
119
- end
120
- # Increment values to request the next page.
121
- offset += PAGE_SIZE
122
- selector[:paging][:start_index] = offset
123
- end
124
- end while page[:total_num_entries] > offset
125
-
126
- # Finally, remove the criteria.
127
- operations = criterion_ids.map do |criterion|
128
- {
129
- :operator => 'REMOVE',
130
- :operand => {
131
- :criterion => {:id => criterion[:criterion_id]},
132
- :shared_set_id => criterion[:shared_set_id]
133
- }
134
- }
135
- end
136
-
137
- response = shared_criterion_srv.mutate(operations)
138
- if response and response[:value]
139
- response[:value].each do |criterion|
140
- puts "Criterion ID %d was successfully removed from shared set ID %d." %
141
- [criterion[:criterion][:id], criterion[:shared_set_id]]
142
- end
143
- else
144
- puts 'No shared criteria were removed.'
145
- end
146
- end
147
-
148
- if __FILE__ == $0
149
- API_VERSION = :v201306
150
- PAGE_SIZE = 500
151
-
152
- begin
153
- # ID of a campaign to remove shared criteria from.
154
- campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
155
-
156
- find_and_remove_criteria_from_shared_set(campaign_id)
157
-
158
- # Authorization error.
159
- rescue AdsCommon::Errors::OAuth2VerificationRequired => e
160
- puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
161
- "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
162
- "to retrieve and store OAuth2 tokens."
163
- puts "See this wiki page for more details:\n\n " +
164
- 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
165
-
166
- # HTTP errors.
167
- rescue AdsCommon::Errors::HttpError => e
168
- puts "HTTP Error: %s" % e
169
-
170
- # API errors.
171
- rescue AdwordsApi::Errors::ApiException => e
172
- puts "Message: %s" % e.message
173
- puts 'Errors:'
174
- e.errors.each_with_index do |error, index|
175
- puts "\tError [%d]:" % (index + 1)
176
- error.each do |field, value|
177
- puts "\t\t%s: %s" % [field, value]
178
- end
179
- end
180
- end
181
- end