google-adwords-api 0.9.2 → 0.9.3

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.
Files changed (211) hide show
  1. data/ChangeLog +5 -0
  2. data/README +3 -3
  3. data/examples/v201302/account_management/create_account.rb +8 -0
  4. data/examples/v201302/account_management/get_account_alerts.rb +8 -0
  5. data/examples/v201302/account_management/get_account_changes.rb +8 -0
  6. data/examples/v201302/account_management/get_account_hierarchy.rb +8 -0
  7. data/examples/v201302/advanced_operations/add_ad_group_bid_modifier.rb +8 -0
  8. data/examples/v201302/advanced_operations/add_click_to_download_ad.rb +8 -0
  9. data/examples/v201302/advanced_operations/add_site_links.rb +8 -0
  10. data/examples/v201302/advanced_operations/create_and_attach_shared_keyword_set.rb +8 -0
  11. data/examples/v201302/advanced_operations/find_and_remove_criteria_from_shared_set.rb +8 -0
  12. data/examples/v201302/advanced_operations/get_ad_group_bid_modifiers.rb +8 -0
  13. data/examples/v201302/basic_operations/add_ad_groups.rb +8 -0
  14. data/examples/v201302/basic_operations/add_campaigns.rb +8 -0
  15. data/examples/v201302/basic_operations/add_keywords.rb +8 -0
  16. data/examples/v201302/basic_operations/add_text_ads.rb +8 -0
  17. data/examples/v201302/basic_operations/delete_ad.rb +8 -0
  18. data/examples/v201302/basic_operations/delete_ad_group.rb +8 -0
  19. data/examples/v201302/basic_operations/delete_campaign.rb +8 -0
  20. data/examples/v201302/basic_operations/delete_keyword.rb +8 -0
  21. data/examples/v201302/basic_operations/get_ad_groups.rb +8 -0
  22. data/examples/v201302/basic_operations/get_campaigns.rb +8 -0
  23. data/examples/v201302/basic_operations/get_campaigns_with_awql.rb +8 -0
  24. data/examples/v201302/basic_operations/get_keywords.rb +8 -0
  25. data/examples/v201302/basic_operations/get_text_ads.rb +8 -0
  26. data/examples/v201302/basic_operations/pause_ad.rb +8 -0
  27. data/examples/v201302/basic_operations/update_ad_group.rb +8 -0
  28. data/examples/v201302/basic_operations/update_campaign.rb +8 -0
  29. data/examples/v201302/basic_operations/update_keyword.rb +8 -0
  30. data/examples/v201302/campaign_management/add_experiment.rb +8 -0
  31. data/examples/v201302/campaign_management/add_keywords_in_bulk.rb +8 -0
  32. data/examples/v201302/campaign_management/add_location_extension.rb +8 -0
  33. data/examples/v201302/campaign_management/add_location_extension_override.rb +8 -0
  34. data/examples/v201302/campaign_management/get_all_disapproved_ads.rb +8 -0
  35. data/examples/v201302/campaign_management/get_all_disapproved_ads_with_awql.rb +8 -0
  36. data/examples/v201302/campaign_management/promote_experiment.rb +8 -0
  37. data/examples/v201302/campaign_management/set_ad_parameters.rb +8 -0
  38. data/examples/v201302/campaign_management/set_criterion_bid_modifier.rb +8 -0
  39. data/examples/v201302/campaign_management/validate_text_ad.rb +8 -0
  40. data/examples/v201302/error_handling/handle_partial_failures.rb +8 -0
  41. data/examples/v201302/error_handling/handle_policy_violation_error.rb +8 -0
  42. data/examples/v201302/migration/set_campaign_enhanced.rb +8 -0
  43. data/examples/v201302/migration/upgrade_legacy_sitelinks.rb +8 -0
  44. data/examples/v201302/misc/get_all_images_and_videos.rb +8 -0
  45. data/examples/v201302/misc/{use_oauth2.rb → setup_oauth2.rb} +16 -25
  46. data/examples/v201302/misc/upload_image.rb +8 -0
  47. data/examples/v201302/optimization/estimate_keyword_traffic.rb +8 -0
  48. data/examples/v201302/optimization/get_keyword_bid_simulations.rb +8 -0
  49. data/examples/v201302/optimization/get_keyword_ideas.rb +8 -0
  50. data/examples/v201302/optimization/get_placement_ideas.rb +8 -0
  51. data/examples/v201302/remarketing/add_audience.rb +8 -0
  52. data/examples/v201302/remarketing/add_conversion_tracker.rb +8 -0
  53. data/examples/v201302/reporting/download_criteria_report.rb +8 -0
  54. data/examples/v201302/reporting/download_criteria_report_with_awql.rb +8 -0
  55. data/examples/v201302/reporting/get_campaign_stats.rb +8 -0
  56. data/examples/v201302/reporting/get_report_fields.rb +8 -0
  57. data/examples/v201302/reporting/parallel_report_download.rb +8 -0
  58. data/examples/v201302/targeting/add_campaign_targeting_criteria.rb +8 -0
  59. data/examples/v201302/targeting/add_demographic_targeting_criteria.rb +8 -0
  60. data/examples/v201302/targeting/get_campaign_targeting_criteria.rb +8 -0
  61. data/examples/v201302/targeting/get_targetable_languages_and_carriers.rb +8 -0
  62. data/examples/v201302/targeting/lookup_location.rb +8 -0
  63. data/examples/v201306/account_management/create_account.rb +95 -0
  64. data/examples/v201306/account_management/get_account_alerts.rb +122 -0
  65. data/examples/v201306/account_management/get_account_changes.rb +145 -0
  66. data/examples/v201306/account_management/get_account_hierarchy.rb +103 -0
  67. data/examples/v201306/advanced_operations/add_ad_group_bid_modifier.rb +105 -0
  68. data/examples/v201306/advanced_operations/add_click_to_download_ad.rb +137 -0
  69. data/examples/v201306/advanced_operations/add_site_links.rb +244 -0
  70. data/examples/v201306/advanced_operations/create_and_attach_shared_keyword_set.rb +147 -0
  71. data/examples/v201306/advanced_operations/find_and_remove_criteria_from_shared_set.rb +181 -0
  72. data/examples/v201306/advanced_operations/get_ad_group_bid_modifiers.rb +106 -0
  73. data/examples/v201306/basic_operations/add_ad_groups.rb +143 -0
  74. data/examples/v201306/basic_operations/add_campaigns.rb +162 -0
  75. data/examples/v201306/basic_operations/add_keywords.rb +116 -0
  76. data/examples/v201306/basic_operations/add_text_ads.rb +113 -0
  77. data/examples/v201306/basic_operations/delete_ad.rb +93 -0
  78. data/examples/v201306/basic_operations/delete_ad_group.rb +110 -0
  79. data/examples/v201306/basic_operations/delete_campaign.rb +111 -0
  80. data/examples/v201306/basic_operations/delete_keyword.rb +98 -0
  81. data/examples/v201306/basic_operations/get_ad_groups.rb +106 -0
  82. data/examples/v201306/basic_operations/get_campaigns.rb +101 -0
  83. data/examples/v201306/basic_operations/get_campaigns_with_awql.rb +93 -0
  84. data/examples/v201306/basic_operations/get_keywords.rb +112 -0
  85. data/examples/v201306/basic_operations/get_text_ads.rb +114 -0
  86. data/examples/v201306/basic_operations/pause_ad.rb +92 -0
  87. data/examples/v201306/basic_operations/update_ad_group.rb +89 -0
  88. data/examples/v201306/basic_operations/update_campaign.rb +90 -0
  89. data/examples/v201306/basic_operations/update_keyword.rb +110 -0
  90. data/examples/v201306/campaign_management/add_experiment.rb +166 -0
  91. data/examples/v201306/campaign_management/add_keywords_in_bulk.rb +158 -0
  92. data/examples/v201306/campaign_management/add_location_extension.rb +125 -0
  93. data/examples/v201306/campaign_management/add_location_extension_override.rb +91 -0
  94. data/examples/v201306/campaign_management/get_all_disapproved_ads.rb +101 -0
  95. data/examples/v201306/campaign_management/get_all_disapproved_ads_with_awql.rb +92 -0
  96. data/examples/v201306/campaign_management/promote_experiment.rb +85 -0
  97. data/examples/v201306/campaign_management/set_ad_parameters.rb +122 -0
  98. data/examples/v201306/campaign_management/set_criterion_bid_modifier.rb +110 -0
  99. data/examples/v201306/campaign_management/validate_text_ad.rb +114 -0
  100. data/examples/v201306/error_handling/handle_captcha_challenge.rb +93 -0
  101. data/examples/v201306/error_handling/handle_partial_failures.rb +134 -0
  102. data/examples/v201306/error_handling/handle_policy_violation_error.rb +145 -0
  103. data/examples/v201306/error_handling/handle_two_factor_authorization_error.rb +88 -0
  104. data/examples/v201306/migration/upgrade_legacy_sitelinks.rb +313 -0
  105. data/examples/v201306/misc/get_all_images_and_videos.rb +108 -0
  106. data/examples/v201306/misc/setup_oauth2.rb +88 -0
  107. data/examples/v201306/misc/upload_image.rb +97 -0
  108. data/examples/v201306/misc/use_oauth2_jwt.rb +93 -0
  109. data/examples/v201306/optimization/estimate_keyword_traffic.rb +137 -0
  110. data/examples/v201306/optimization/get_keyword_bid_simulations.rb +100 -0
  111. data/examples/v201306/optimization/get_keyword_ideas.rb +130 -0
  112. data/examples/v201306/optimization/get_placement_ideas.rb +112 -0
  113. data/examples/v201306/remarketing/add_audience.rb +123 -0
  114. data/examples/v201306/remarketing/add_conversion_tracker.rb +104 -0
  115. data/examples/v201306/reporting/download_criteria_report.rb +87 -0
  116. data/examples/v201306/reporting/download_criteria_report_with_awql.rb +86 -0
  117. data/examples/v201306/reporting/get_campaign_stats.rb +113 -0
  118. data/examples/v201306/reporting/get_report_fields.rb +79 -0
  119. data/examples/v201306/reporting/parallel_report_download.rb +171 -0
  120. data/examples/v201306/targeting/add_campaign_targeting_criteria.rb +123 -0
  121. data/examples/v201306/targeting/add_demographic_targeting_criteria.rb +116 -0
  122. data/examples/v201306/targeting/get_campaign_targeting_criteria.rb +110 -0
  123. data/examples/v201306/targeting/get_targetable_languages_and_carriers.rb +94 -0
  124. data/examples/v201306/targeting/lookup_location.rb +112 -0
  125. data/lib/adwords_api/api_config.rb +80 -4
  126. data/lib/adwords_api/v201306/ad_extension_override_service.rb +38 -0
  127. data/lib/adwords_api/v201306/ad_extension_override_service_registry.rb +46 -0
  128. data/lib/adwords_api/v201306/ad_group_ad_service.rb +42 -0
  129. data/lib/adwords_api/v201306/ad_group_ad_service_registry.rb +46 -0
  130. data/lib/adwords_api/v201306/ad_group_bid_modifier_service.rb +38 -0
  131. data/lib/adwords_api/v201306/ad_group_bid_modifier_service_registry.rb +46 -0
  132. data/lib/adwords_api/v201306/ad_group_criterion_service.rb +42 -0
  133. data/lib/adwords_api/v201306/ad_group_criterion_service_registry.rb +46 -0
  134. data/lib/adwords_api/v201306/ad_group_feed_service.rb +38 -0
  135. data/lib/adwords_api/v201306/ad_group_feed_service_registry.rb +46 -0
  136. data/lib/adwords_api/v201306/ad_group_service.rb +42 -0
  137. data/lib/adwords_api/v201306/ad_group_service_registry.rb +46 -0
  138. data/lib/adwords_api/v201306/ad_param_service.rb +38 -0
  139. data/lib/adwords_api/v201306/ad_param_service_registry.rb +46 -0
  140. data/lib/adwords_api/v201306/adwords_user_list_service.rb +38 -0
  141. data/lib/adwords_api/v201306/adwords_user_list_service_registry.rb +46 -0
  142. data/lib/adwords_api/v201306/alert_service.rb +34 -0
  143. data/lib/adwords_api/v201306/alert_service_registry.rb +46 -0
  144. data/lib/adwords_api/v201306/bidding_strategy_service.rb +38 -0
  145. data/lib/adwords_api/v201306/bidding_strategy_service_registry.rb +46 -0
  146. data/lib/adwords_api/v201306/budget_order_service.rb +42 -0
  147. data/lib/adwords_api/v201306/budget_order_service_registry.rb +46 -0
  148. data/lib/adwords_api/v201306/budget_service.rb +38 -0
  149. data/lib/adwords_api/v201306/budget_service_registry.rb +46 -0
  150. data/lib/adwords_api/v201306/campaign_ad_extension_service.rb +38 -0
  151. data/lib/adwords_api/v201306/campaign_ad_extension_service_registry.rb +46 -0
  152. data/lib/adwords_api/v201306/campaign_criterion_service.rb +42 -0
  153. data/lib/adwords_api/v201306/campaign_criterion_service_registry.rb +46 -0
  154. data/lib/adwords_api/v201306/campaign_feed_service.rb +38 -0
  155. data/lib/adwords_api/v201306/campaign_feed_service_registry.rb +46 -0
  156. data/lib/adwords_api/v201306/campaign_service.rb +42 -0
  157. data/lib/adwords_api/v201306/campaign_service_registry.rb +46 -0
  158. data/lib/adwords_api/v201306/campaign_shared_set_service.rb +38 -0
  159. data/lib/adwords_api/v201306/campaign_shared_set_service_registry.rb +47 -0
  160. data/lib/adwords_api/v201306/constant_data_service.rb +62 -0
  161. data/lib/adwords_api/v201306/constant_data_service_registry.rb +46 -0
  162. data/lib/adwords_api/v201306/conversion_tracker_service.rb +38 -0
  163. data/lib/adwords_api/v201306/conversion_tracker_service_registry.rb +46 -0
  164. data/lib/adwords_api/v201306/customer_service.rb +34 -0
  165. data/lib/adwords_api/v201306/customer_service_registry.rb +46 -0
  166. data/lib/adwords_api/v201306/customer_sync_service.rb +34 -0
  167. data/lib/adwords_api/v201306/customer_sync_service_registry.rb +47 -0
  168. data/lib/adwords_api/v201306/data_service.rb +38 -0
  169. data/lib/adwords_api/v201306/data_service_registry.rb +46 -0
  170. data/lib/adwords_api/v201306/experiment_service.rb +38 -0
  171. data/lib/adwords_api/v201306/experiment_service_registry.rb +46 -0
  172. data/lib/adwords_api/v201306/feed_item_service.rb +38 -0
  173. data/lib/adwords_api/v201306/feed_item_service_registry.rb +46 -0
  174. data/lib/adwords_api/v201306/feed_mapping_service.rb +38 -0
  175. data/lib/adwords_api/v201306/feed_mapping_service_registry.rb +46 -0
  176. data/lib/adwords_api/v201306/feed_service.rb +38 -0
  177. data/lib/adwords_api/v201306/feed_service_registry.rb +46 -0
  178. data/lib/adwords_api/v201306/geo_location_service.rb +34 -0
  179. data/lib/adwords_api/v201306/geo_location_service_registry.rb +46 -0
  180. data/lib/adwords_api/v201306/location_criterion_service.rb +34 -0
  181. data/lib/adwords_api/v201306/location_criterion_service_registry.rb +46 -0
  182. data/lib/adwords_api/v201306/managed_customer_service.rb +50 -0
  183. data/lib/adwords_api/v201306/managed_customer_service_registry.rb +46 -0
  184. data/lib/adwords_api/v201306/media_service.rb +38 -0
  185. data/lib/adwords_api/v201306/media_service_registry.rb +46 -0
  186. data/lib/adwords_api/v201306/mutate_job_service.rb +42 -0
  187. data/lib/adwords_api/v201306/mutate_job_service_registry.rb +46 -0
  188. data/lib/adwords_api/v201306/report_definition_service.rb +34 -0
  189. data/lib/adwords_api/v201306/report_definition_service_registry.rb +46 -0
  190. data/lib/adwords_api/v201306/shared_criterion_service.rb +38 -0
  191. data/lib/adwords_api/v201306/shared_criterion_service_registry.rb +47 -0
  192. data/lib/adwords_api/v201306/shared_set_service.rb +38 -0
  193. data/lib/adwords_api/v201306/shared_set_service_registry.rb +47 -0
  194. data/lib/adwords_api/v201306/targeting_idea_service.rb +38 -0
  195. data/lib/adwords_api/v201306/targeting_idea_service_registry.rb +46 -0
  196. data/lib/adwords_api/v201306/traffic_estimator_service.rb +34 -0
  197. data/lib/adwords_api/v201306/traffic_estimator_service_registry.rb +46 -0
  198. data/lib/adwords_api/version.rb +1 -1
  199. data/test/adwords_api/test_adwords_api.rb +1 -1
  200. data/test/adwords_api/test_api_config.rb +8 -8
  201. data/test/adwords_api/test_report_utils.rb +1 -1
  202. data/test/bugs/test_issue_00000031.rb +2 -2
  203. data/test/bugs/test_issue_00000063.rb +6 -6
  204. data/test/suite_exampletests_v201302.rb +1 -1
  205. data/test/suite_exampletests_v201306.rb +37 -0
  206. data/test/templates/v201209/basic_operations_get_campaigns.def +1 -1
  207. data/test/templates/v201302/basic_operations_get_campaigns.def +1 -1
  208. data/test/templates/v201302/misc_use_oauth2_jwt.def +1 -1
  209. data/test/templates/v201306/basic_operations_get_campaigns.def +114 -0
  210. data/test/templates/v201306/misc_use_oauth2_jwt.def +131 -0
  211. metadata +142 -5
@@ -0,0 +1,90 @@
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 update a campaign, setting its status to
22
+ # 'PAUSED'. To create a campaign, run add_campaigns.rb.
23
+ #
24
+ # Tags: CampaignService.mutate
25
+
26
+ require 'adwords_api'
27
+
28
+ def update_campaign(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
+ campaign_srv = adwords.service(:CampaignService, API_VERSION)
38
+
39
+ # Prepare for updating campaign.
40
+ operation = {
41
+ :operator => 'SET',
42
+ :operand => {
43
+ :id => campaign_id,
44
+ :status => 'PAUSED'
45
+ }
46
+ }
47
+
48
+ # Update campaign.
49
+ response = campaign_srv.mutate([operation])
50
+ if response and response[:value]
51
+ campaign = response[:value].first
52
+ puts "Campaign ID %d was successfully updated, status was set to '%s'." %
53
+ [campaign[:id], campaign[:status]]
54
+ else
55
+ puts 'No campaigns were updated.'
56
+ end
57
+ end
58
+
59
+ if __FILE__ == $0
60
+ API_VERSION = :v201306
61
+
62
+ begin
63
+ # ID of a campaign to update.
64
+ campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
65
+ update_campaign(campaign_id)
66
+
67
+ # Authorization error.
68
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
69
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
70
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
71
+ "to retrieve and store OAuth2 tokens."
72
+ puts "See this wiki page for more details:\n\n " +
73
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
74
+
75
+ # HTTP errors.
76
+ rescue AdsCommon::Errors::HttpError => e
77
+ puts "HTTP Error: %s" % e
78
+
79
+ # API errors.
80
+ rescue AdwordsApi::Errors::ApiException => e
81
+ puts "Message: %s" % e.message
82
+ puts 'Errors:'
83
+ e.errors.each_with_index do |error, index|
84
+ puts "\tError [%d]:" % (index + 1)
85
+ error.each do |field, value|
86
+ puts "\t\t%s: %s" % [field, value]
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,110 @@
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 updates the bid of a keyword. To create a keyword, run
22
+ # add_keywords.rb.
23
+ #
24
+ # Tags: AdGroupCriterionService.mutate
25
+
26
+ require 'adwords_api'
27
+
28
+ def update_keyword(ad_group_id, criterion_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
+ ad_group_criterion_srv =
38
+ adwords.service(:AdGroupCriterionService, API_VERSION)
39
+
40
+ # Prepare for updating a keyword.
41
+ operation = {
42
+ :operator => 'SET',
43
+ :operand => {
44
+ # The 'xsi_type' field allows you to specify the xsi:type of the object
45
+ # being created. It's only necessary when you must provide an explicit
46
+ # type that the client library can't infer.
47
+ :xsi_type => 'BiddableAdGroupCriterion',
48
+ :ad_group_id => ad_group_id,
49
+ :criterion => {
50
+ :id => criterion_id
51
+ },
52
+ :bidding_strategy_configuration => {
53
+ :bids => [
54
+ {
55
+ :xsi_type => 'CpcBid',
56
+ :bid => {:micro_amount => 1000000}
57
+ }
58
+ ]
59
+ }
60
+ }
61
+ }
62
+
63
+ # Update criterion.
64
+ response = ad_group_criterion_srv.mutate([operation])
65
+ if response and response[:value]
66
+ ad_group_criterion = response[:value].first
67
+ puts "Keyword ID %d was successfully updated, current bids are:" %
68
+ ad_group_criterion[:criterion][:id]
69
+ ad_group_criterion[:bidding_strategy_configuration][:bids].each do |bid|
70
+ puts "\tType: '%s', value: %d" %
71
+ [bid[:bids_type], bid[:bid][:micro_amount]]
72
+ end
73
+ else
74
+ puts 'No keywords were updated.'
75
+ end
76
+ end
77
+
78
+ if __FILE__ == $0
79
+ API_VERSION = :v201306
80
+
81
+ begin
82
+ # IDs of a criterion to update and its ad group.
83
+ ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
84
+ criterion_id = 'INSERT_CRITERION_ID_HERE'.to_i
85
+ update_keyword(ad_group_id, criterion_id)
86
+
87
+ # Authorization error.
88
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
89
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
90
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
91
+ "to retrieve and store OAuth2 tokens."
92
+ puts "See this wiki page for more details:\n\n " +
93
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
94
+
95
+ # HTTP errors.
96
+ rescue AdsCommon::Errors::HttpError => e
97
+ puts "HTTP Error: %s" % e
98
+
99
+ # API errors.
100
+ rescue AdwordsApi::Errors::ApiException => e
101
+ puts "Message: %s" % e.message
102
+ puts 'Errors:'
103
+ e.errors.each_with_index do |error, index|
104
+ puts "\tError [%d]:" % (index + 1)
105
+ error.each do |field, value|
106
+ puts "\t\t%s: %s" % [field, value]
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,166 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.sgomes@gmail.com (Sérgio Gomes)
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 creates an experiment using a query percentage of 10, which
22
+ # defines what fraction of auctions should go to the control split (90%) vs.
23
+ # the experiment split (10%), then adds experimental bid changes for criteria
24
+ # and ad groups. To get campaigns, run get_campaigns.rb. To get ad groups,
25
+ # run get_ad_groups.rb. To get keywords, run get_keywords.rb.
26
+ #
27
+ # Tags: ExperimentService.mutate
28
+
29
+ require 'adwords_api'
30
+ require 'date'
31
+
32
+ def add_experiment(campaign_id, ad_group_id, criterion_id)
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
+ experiment_srv = adwords.service(:ExperimentService, API_VERSION)
42
+ ad_group_srv = adwords.service(:AdGroupService, API_VERSION)
43
+ ad_group_criterion_srv =
44
+ adwords.service(:AdGroupCriterionService, API_VERSION)
45
+
46
+ # Prepare for adding experiment.
47
+ operation = {
48
+ :operator => 'ADD',
49
+ :operand => {
50
+ :campaign_id => campaign_id,
51
+ :name => "Interplanetary Experiment #%d" % (Time.new.to_f * 1000).to_i,
52
+ :query_percentage => 10,
53
+ :start_date_time => Time.now.strftime('%Y%m%d %H%M%S'),
54
+ # Optional fields:
55
+ :status => 'ACTIVE',
56
+ :end_date_time =>
57
+ DateTime.parse((Date.today + 30).to_s).strftime('%Y%m%d %H%M%S')
58
+ }
59
+ }
60
+
61
+ # Add experiment.
62
+ response = experiment_srv.mutate([operation])
63
+ experiment = response[:value].first
64
+ puts "Experiment with name '%s' and ID %d was added." %
65
+ [experiment[:name], experiment[:id]]
66
+
67
+ experiment_id = experiment[:id]
68
+
69
+ # Setup ad group for the experiment.
70
+ ad_group = {
71
+ :id => ad_group_id,
72
+ # Set experiment data for the ad group.
73
+ :experiment_data => {
74
+ :experiment_id => experiment_id,
75
+ :experiment_delta_status => 'MODIFIED',
76
+ # Bid multiplier rule that will modify ad group bid for the experiment.
77
+ :experiment_bid_multipliers => {
78
+ :xsi_type => 'ManualCPCAdGroupExperimentBidMultipliers',
79
+ :max_cpc_multiplier => {
80
+ :multiplier => 1.5
81
+ }
82
+ }
83
+ }
84
+ }
85
+
86
+ # Prepare for updating ad group.
87
+ operation = {
88
+ :operator => 'SET',
89
+ :operand => ad_group
90
+ }
91
+
92
+ # Update ad group.
93
+ response = ad_group_srv.mutate([operation])
94
+ ad_group = response[:value].first
95
+ puts "Ad group ID %d was updated for the experiment." % ad_group[:id]
96
+
97
+ # Setup ad group criterion for the experiment.
98
+ ad_group_criterion = {
99
+ :xsi_type => 'BiddableAdGroupCriterion',
100
+ :ad_group_id => ad_group_id,
101
+ :criterion => {
102
+ :id => criterion_id
103
+ },
104
+ # Set experiment data for the criterion.
105
+ :experiment_data => {
106
+ :xsi_type => 'BiddableAdGroupCriterionExperimentData',
107
+ :experiment_id => experiment_id,
108
+ :experiment_delta_status => 'MODIFIED',
109
+ # Bid multiplier rule that will modify criterion bid for the experiment.
110
+ :experiment_bid_multiplier => {
111
+ :xsi_type => 'ManualCPCAdGroupCriterionExperimentBidMultiplier',
112
+ :max_cpc_multiplier => {
113
+ :multiplier => 1.5
114
+ }
115
+ }
116
+ }
117
+ }
118
+
119
+ # Prepare for updating ad group criterion.
120
+ operation = {
121
+ :operator => 'SET',
122
+ :operand => ad_group_criterion
123
+ }
124
+
125
+ # Update criterion.
126
+ response = ad_group_criterion_srv.mutate([operation])
127
+ criterion = response[:value].first
128
+ puts "Criterion ID %d was successfully updated for the experiment." %
129
+ [criterion[:criterion][:id]]
130
+
131
+ end
132
+
133
+ if __FILE__ == $0
134
+ API_VERSION = :v201306
135
+
136
+ begin
137
+ # IDs of the required objects.
138
+ campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
139
+ ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
140
+ criterion_id = 'INSERT_CRITERION_ID_HERE'.to_i
141
+ add_experiment(campaign_id, ad_group_id, criterion_id)
142
+
143
+ # Authorization error.
144
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
145
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
146
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
147
+ "to retrieve and store OAuth2 tokens."
148
+ puts "See this wiki page for more details:\n\n " +
149
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
150
+
151
+ # HTTP errors.
152
+ rescue AdsCommon::Errors::HttpError => e
153
+ puts "HTTP Error: %s" % e
154
+
155
+ # API errors.
156
+ rescue AdwordsApi::Errors::ApiException => e
157
+ puts "Message: %s" % e.message
158
+ puts 'Errors:'
159
+ e.errors.each_with_index do |error, index|
160
+ puts "\tError [%d]:" % (index + 1)
161
+ error.each do |field, value|
162
+ puts "\t\t%s: %s" % [field, value]
163
+ end
164
+ end
165
+ end
166
+ end
@@ -0,0 +1,158 @@
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 code sample illustrates how to add many keywords using asynchronous
22
+ # requests and MutateJobService.
23
+ #
24
+ # Tags: MutateJobService.mutate, MutateJobService.get
25
+ # Tags: MutateJobService.getResult
26
+
27
+ require 'adwords_api'
28
+
29
+ def add_keywords_in_bulk()
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
+ mutate_job_srv = adwords.service(:MutateJobService, API_VERSION)
39
+
40
+ ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
41
+
42
+ # Create AdGroupCriterionOperations to add keywords.
43
+ operations = (1..KEYWORD_NUMBER).map do |index|
44
+ {:xsi_type => 'AdGroupCriterionOperation',
45
+ :operator => 'ADD',
46
+ :operand => {
47
+ :xsi_type => 'BiddableAdGroupCriterion',
48
+ :ad_group_id => ad_group_id,
49
+ :criterion => {
50
+ :xsi_type => 'Keyword',
51
+ :match_type => 'BROAD',
52
+ :text => "mars%d" % index}}}
53
+ end
54
+
55
+ # You can specify up to 3 job IDs that must successfully complete before
56
+ # this job can be processed.
57
+ policy = {:prerequisite_job_ids => []}
58
+
59
+ # Call mutate to create a new job.
60
+ response = mutate_job_srv.mutate(operations, policy)
61
+
62
+ raise StandardError, 'Failed to submit a job; aborting.' unless response
63
+
64
+ job_id = response[:id]
65
+ puts "Job ID %d was successfully created." % job_id
66
+
67
+ # Creating selector to retrive hob status and wait for it to complete.
68
+ selector = {
69
+ :xsi_type => 'BulkMutateJobSelector',
70
+ :job_ids => [job_id]
71
+ }
72
+
73
+ status = nil
74
+
75
+ # Poll for job status until it's finished.
76
+ puts 'Retrieving job status...'
77
+ RETRIES_COUNT.times do |retry_attempt|
78
+ job_status_response = mutate_job_srv.get(selector)
79
+ if job_status_response
80
+ status = job_status_response.first[:status]
81
+ case status
82
+ when 'FAILED'
83
+ raise StandardError, "Job failed with reason: '%s'" %
84
+ job_status_response.first[:failure_reason]
85
+ when 'COMPLETED'
86
+ puts "[%d] Job finished with status '%s'" % [retry_attempt, status]
87
+ break
88
+ else
89
+ puts "[%d] Current status is '%s', waiting %d seconds to retry..." %
90
+ [retry_attempt, status, RETRY_INTERVAL]
91
+ sleep(RETRY_INTERVAL)
92
+ end
93
+ else
94
+ raise StandardError, 'Error retrieving job status; aborting.'
95
+ end
96
+ end
97
+
98
+ if status == 'COMPLETED'
99
+ # Get the job result. Here we re-use the same selector.
100
+ result_response = mutate_job_srv.get_result(selector)
101
+
102
+ if result_response and result_response[:simple_mutate_result]
103
+ results = result_response[:simple_mutate_result][:results]
104
+ if results
105
+ results.each_with_index do |result, index|
106
+ result_message = result.include?(:place_holder) ?
107
+ 'FAILED' : 'SUCCEEDED'
108
+ puts "Operation [%d] - %s" % [index, result_message]
109
+ end
110
+ end
111
+ errors = result_response[:simple_mutate_result][:errors]
112
+ if errors
113
+ errors.each do |error|
114
+ puts "Error, reason: '%s', trigger: '%s', field path: '%s'" %
115
+ [error[:reason], error[:trigger], error[:field_path]]
116
+ end
117
+ end
118
+ else
119
+ raise StandardError, 'Error retrieving job results; aborting.'
120
+ end
121
+ else
122
+ puts "Job failed to complete after %d retries." % RETRY_COUNT
123
+ end
124
+ end
125
+
126
+ if __FILE__ == $0
127
+ API_VERSION = :v201306
128
+ RETRY_INTERVAL = 30
129
+ RETRIES_COUNT = 30
130
+ KEYWORD_NUMBER = 100
131
+
132
+ begin
133
+ add_keywords_in_bulk()
134
+
135
+ # Authorization error.
136
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
137
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
138
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
139
+ "to retrieve and store OAuth2 tokens."
140
+ puts "See this wiki page for more details:\n\n " +
141
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
142
+
143
+ # HTTP errors.
144
+ rescue AdsCommon::Errors::HttpError => e
145
+ puts "HTTP Error: %s" % e
146
+
147
+ # API errors.
148
+ rescue AdwordsApi::Errors::ApiException => e
149
+ puts "Message: %s" % e.message
150
+ puts 'Errors:'
151
+ e.errors.each_with_index do |error, index|
152
+ puts "\tError [%d]:" % (index + 1)
153
+ error.each do |field, value|
154
+ puts "\t\t%s: %s" % [field, value]
155
+ end
156
+ end
157
+ end
158
+ end