google-adwords-api 0.17.0 → 0.18.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.
Files changed (170) hide show
  1. checksums.yaml +5 -13
  2. data/ChangeLog +5 -0
  3. data/README.md +3 -3
  4. data/adwords_api.yml +3 -0
  5. data/examples/v201509/{campaign_management → advanced_operations}/add_complete_campaigns_using_batch_job.rb +10 -16
  6. data/examples/v201509/advanced_operations/add_keywords_using_incremental_batch_job.rb +179 -0
  7. data/examples/v201509/reporting/stream_criteria_report_results.rb +97 -0
  8. data/lib/adwords_api/api_config.rb +0 -86
  9. data/lib/adwords_api/batch_job_utils.rb +124 -51
  10. data/lib/adwords_api/incremental_upload_helper.rb +71 -0
  11. data/lib/adwords_api/report_header_handler.rb +1 -1
  12. data/lib/adwords_api/report_stream.rb +64 -0
  13. data/lib/adwords_api/report_utils.rb +88 -8
  14. data/lib/adwords_api/version.rb +1 -1
  15. data/test/adwords_api/test_batch_job_utils.rb +15 -0
  16. metadata +18 -168
  17. data/examples/v201502/account_management/create_account.rb +0 -88
  18. data/examples/v201502/account_management/get_account_changes.rb +0 -139
  19. data/examples/v201502/account_management/get_account_hierarchy.rb +0 -94
  20. data/examples/v201502/advanced_operations/add_ad_customizers.rb +0 -184
  21. data/examples/v201502/advanced_operations/add_ad_group_bid_modifier.rb +0 -101
  22. data/examples/v201502/advanced_operations/add_click_to_download_ad.rb +0 -133
  23. data/examples/v201502/advanced_operations/add_text_ad_with_upgraded_urls.rb +0 -134
  24. data/examples/v201502/advanced_operations/create_and_attach_shared_keyword_set.rb +0 -133
  25. data/examples/v201502/advanced_operations/find_and_remove_criteria_from_shared_set.rb +0 -166
  26. data/examples/v201502/advanced_operations/get_ad_group_bid_modifiers.rb +0 -102
  27. data/examples/v201502/advanced_operations/upload_offline_conversions.rb +0 -113
  28. data/examples/v201502/advanced_operations/use_shared_bidding_strategy.rb +0 -147
  29. data/examples/v201502/basic_operations/add_ad_groups.rb +0 -140
  30. data/examples/v201502/basic_operations/add_campaigns.rb +0 -139
  31. data/examples/v201502/basic_operations/add_keywords.rb +0 -114
  32. data/examples/v201502/basic_operations/add_text_ads.rb +0 -109
  33. data/examples/v201502/basic_operations/get_ad_groups.rb +0 -102
  34. data/examples/v201502/basic_operations/get_campaigns.rb +0 -97
  35. data/examples/v201502/basic_operations/get_campaigns_with_awql.rb +0 -89
  36. data/examples/v201502/basic_operations/get_keywords.rb +0 -108
  37. data/examples/v201502/basic_operations/get_text_ads.rb +0 -110
  38. data/examples/v201502/basic_operations/pause_ad.rb +0 -88
  39. data/examples/v201502/basic_operations/remove_ad.rb +0 -89
  40. data/examples/v201502/basic_operations/remove_ad_group.rb +0 -85
  41. data/examples/v201502/basic_operations/remove_campaign.rb +0 -87
  42. data/examples/v201502/basic_operations/remove_keyword.rb +0 -94
  43. data/examples/v201502/basic_operations/update_ad_group.rb +0 -85
  44. data/examples/v201502/basic_operations/update_campaign.rb +0 -86
  45. data/examples/v201502/basic_operations/update_keyword.rb +0 -106
  46. data/examples/v201502/campaign_management/add_campaign_labels.rb +0 -82
  47. data/examples/v201502/campaign_management/add_experiment.rb +0 -162
  48. data/examples/v201502/campaign_management/add_keywords_in_bulk.rb +0 -153
  49. data/examples/v201502/campaign_management/get_all_disapproved_ads.rb +0 -97
  50. data/examples/v201502/campaign_management/get_all_disapproved_ads_with_awql.rb +0 -89
  51. data/examples/v201502/campaign_management/get_campaigns_by_label.rb +0 -108
  52. data/examples/v201502/campaign_management/promote_experiment.rb +0 -81
  53. data/examples/v201502/campaign_management/set_ad_parameters.rb +0 -118
  54. data/examples/v201502/campaign_management/set_criterion_bid_modifier.rb +0 -104
  55. data/examples/v201502/campaign_management/validate_text_ad.rb +0 -110
  56. data/examples/v201502/error_handling/handle_partial_failures.rb +0 -130
  57. data/examples/v201502/error_handling/handle_policy_violation_error.rb +0 -141
  58. data/examples/v201502/extensions/add_google_my_business_location_extensions.rb +0 -179
  59. data/examples/v201502/extensions/add_site_links.rb +0 -164
  60. data/examples/v201502/extensions/add_site_links_using_feeds.rb +0 -271
  61. data/examples/v201502/migration/migrate_to_extension_settings.rb +0 -386
  62. data/examples/v201502/migration/upgrade_ad_url.rb +0 -93
  63. data/examples/v201502/misc/create_ad_words_session_without_properties_file.rb +0 -92
  64. data/examples/v201502/misc/get_all_images_and_videos.rb +0 -104
  65. data/examples/v201502/misc/setup_oauth2.rb +0 -84
  66. data/examples/v201502/misc/upload_image.rb +0 -93
  67. data/examples/v201502/misc/use_oauth2_jwt.rb +0 -93
  68. data/examples/v201502/optimization/estimate_keyword_traffic.rb +0 -146
  69. data/examples/v201502/optimization/get_keyword_bid_simulations.rb +0 -95
  70. data/examples/v201502/optimization/get_keyword_ideas.rb +0 -126
  71. data/examples/v201502/remarketing/add_audience.rb +0 -118
  72. data/examples/v201502/remarketing/add_conversion_tracker.rb +0 -100
  73. data/examples/v201502/remarketing/add_rule_based_user_lists.rb +0 -167
  74. data/examples/v201502/reporting/download_criteria_report.rb +0 -85
  75. data/examples/v201502/reporting/download_criteria_report_with_awql.rb +0 -84
  76. data/examples/v201502/reporting/get_report_fields.rb +0 -75
  77. data/examples/v201502/reporting/parallel_report_download.rb +0 -166
  78. data/examples/v201502/shopping_campaigns/add_product_partition_tree.rb +0 -267
  79. data/examples/v201502/shopping_campaigns/add_product_scope.rb +0 -129
  80. data/examples/v201502/shopping_campaigns/add_shopping_campaign.rb +0 -129
  81. data/examples/v201502/shopping_campaigns/get_product_category_taxonomy.rb +0 -115
  82. data/examples/v201502/targeting/add_campaign_targeting_criteria.rb +0 -169
  83. data/examples/v201502/targeting/add_demographic_targeting_criteria.rb +0 -112
  84. data/examples/v201502/targeting/get_campaign_targeting_criteria.rb +0 -106
  85. data/examples/v201502/targeting/get_targetable_languages_and_carriers.rb +0 -89
  86. data/examples/v201502/targeting/lookup_location.rb +0 -108
  87. data/lib/adwords_api/v201502/account_label_service.rb +0 -46
  88. data/lib/adwords_api/v201502/account_label_service_registry.rb +0 -46
  89. data/lib/adwords_api/v201502/ad_customizer_feed_service.rb +0 -46
  90. data/lib/adwords_api/v201502/ad_customizer_feed_service_registry.rb +0 -46
  91. data/lib/adwords_api/v201502/ad_group_ad_service.rb +0 -70
  92. data/lib/adwords_api/v201502/ad_group_ad_service_registry.rb +0 -46
  93. data/lib/adwords_api/v201502/ad_group_bid_modifier_service.rb +0 -54
  94. data/lib/adwords_api/v201502/ad_group_bid_modifier_service_registry.rb +0 -46
  95. data/lib/adwords_api/v201502/ad_group_criterion_service.rb +0 -62
  96. data/lib/adwords_api/v201502/ad_group_criterion_service_registry.rb +0 -46
  97. data/lib/adwords_api/v201502/ad_group_extension_setting_service.rb +0 -54
  98. data/lib/adwords_api/v201502/ad_group_extension_setting_service_registry.rb +0 -46
  99. data/lib/adwords_api/v201502/ad_group_feed_service.rb +0 -54
  100. data/lib/adwords_api/v201502/ad_group_feed_service_registry.rb +0 -46
  101. data/lib/adwords_api/v201502/ad_group_service.rb +0 -62
  102. data/lib/adwords_api/v201502/ad_group_service_registry.rb +0 -46
  103. data/lib/adwords_api/v201502/ad_param_service.rb +0 -46
  104. data/lib/adwords_api/v201502/ad_param_service_registry.rb +0 -46
  105. data/lib/adwords_api/v201502/adwords_user_list_service.rb +0 -46
  106. data/lib/adwords_api/v201502/adwords_user_list_service_registry.rb +0 -46
  107. data/lib/adwords_api/v201502/bidding_strategy_service.rb +0 -54
  108. data/lib/adwords_api/v201502/bidding_strategy_service_registry.rb +0 -46
  109. data/lib/adwords_api/v201502/budget_order_service.rb +0 -54
  110. data/lib/adwords_api/v201502/budget_order_service_registry.rb +0 -46
  111. data/lib/adwords_api/v201502/budget_service.rb +0 -54
  112. data/lib/adwords_api/v201502/budget_service_registry.rb +0 -46
  113. data/lib/adwords_api/v201502/campaign_criterion_service.rb +0 -54
  114. data/lib/adwords_api/v201502/campaign_criterion_service_registry.rb +0 -46
  115. data/lib/adwords_api/v201502/campaign_extension_setting_service.rb +0 -54
  116. data/lib/adwords_api/v201502/campaign_extension_setting_service_registry.rb +0 -46
  117. data/lib/adwords_api/v201502/campaign_feed_service.rb +0 -54
  118. data/lib/adwords_api/v201502/campaign_feed_service_registry.rb +0 -46
  119. data/lib/adwords_api/v201502/campaign_service.rb +0 -62
  120. data/lib/adwords_api/v201502/campaign_service_registry.rb +0 -46
  121. data/lib/adwords_api/v201502/campaign_shared_set_service.rb +0 -46
  122. data/lib/adwords_api/v201502/campaign_shared_set_service_registry.rb +0 -46
  123. data/lib/adwords_api/v201502/constant_data_service.rb +0 -102
  124. data/lib/adwords_api/v201502/constant_data_service_registry.rb +0 -46
  125. data/lib/adwords_api/v201502/conversion_tracker_service.rb +0 -54
  126. data/lib/adwords_api/v201502/conversion_tracker_service_registry.rb +0 -46
  127. data/lib/adwords_api/v201502/customer_extension_setting_service.rb +0 -54
  128. data/lib/adwords_api/v201502/customer_extension_setting_service_registry.rb +0 -46
  129. data/lib/adwords_api/v201502/customer_feed_service.rb +0 -54
  130. data/lib/adwords_api/v201502/customer_feed_service_registry.rb +0 -46
  131. data/lib/adwords_api/v201502/customer_service.rb +0 -46
  132. data/lib/adwords_api/v201502/customer_service_registry.rb +0 -46
  133. data/lib/adwords_api/v201502/customer_sync_service.rb +0 -38
  134. data/lib/adwords_api/v201502/customer_sync_service_registry.rb +0 -47
  135. data/lib/adwords_api/v201502/data_service.rb +0 -78
  136. data/lib/adwords_api/v201502/data_service_registry.rb +0 -46
  137. data/lib/adwords_api/v201502/experiment_service.rb +0 -46
  138. data/lib/adwords_api/v201502/experiment_service_registry.rb +0 -46
  139. data/lib/adwords_api/v201502/feed_item_service.rb +0 -54
  140. data/lib/adwords_api/v201502/feed_item_service_registry.rb +0 -46
  141. data/lib/adwords_api/v201502/feed_mapping_service.rb +0 -54
  142. data/lib/adwords_api/v201502/feed_mapping_service_registry.rb +0 -46
  143. data/lib/adwords_api/v201502/feed_service.rb +0 -54
  144. data/lib/adwords_api/v201502/feed_service_registry.rb +0 -46
  145. data/lib/adwords_api/v201502/geo_location_service.rb +0 -38
  146. data/lib/adwords_api/v201502/geo_location_service_registry.rb +0 -46
  147. data/lib/adwords_api/v201502/label_service.rb +0 -54
  148. data/lib/adwords_api/v201502/label_service_registry.rb +0 -46
  149. data/lib/adwords_api/v201502/location_criterion_service.rb +0 -46
  150. data/lib/adwords_api/v201502/location_criterion_service_registry.rb +0 -46
  151. data/lib/adwords_api/v201502/managed_customer_service.rb +0 -78
  152. data/lib/adwords_api/v201502/managed_customer_service_registry.rb +0 -46
  153. data/lib/adwords_api/v201502/media_service.rb +0 -54
  154. data/lib/adwords_api/v201502/media_service_registry.rb +0 -46
  155. data/lib/adwords_api/v201502/mutate_job_service.rb +0 -54
  156. data/lib/adwords_api/v201502/mutate_job_service_registry.rb +0 -46
  157. data/lib/adwords_api/v201502/offline_conversion_feed_service.rb +0 -38
  158. data/lib/adwords_api/v201502/offline_conversion_feed_service_registry.rb +0 -46
  159. data/lib/adwords_api/v201502/report_definition_service.rb +0 -38
  160. data/lib/adwords_api/v201502/report_definition_service_registry.rb +0 -46
  161. data/lib/adwords_api/v201502/shared_criterion_service.rb +0 -46
  162. data/lib/adwords_api/v201502/shared_criterion_service_registry.rb +0 -46
  163. data/lib/adwords_api/v201502/shared_set_service.rb +0 -46
  164. data/lib/adwords_api/v201502/shared_set_service_registry.rb +0 -46
  165. data/lib/adwords_api/v201502/targeting_idea_service.rb +0 -38
  166. data/lib/adwords_api/v201502/targeting_idea_service_registry.rb +0 -46
  167. data/lib/adwords_api/v201502/traffic_estimator_service.rb +0 -38
  168. data/lib/adwords_api/v201502/traffic_estimator_service_registry.rb +0 -46
  169. data/test/templates/v201502/basic_operations_get_campaigns.def +0 -116
  170. data/test/templates/v201502/misc_use_oauth2_service_account.def +0 -131
@@ -1,82 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Encoding: utf-8
3
- #
4
- # Copyright:: Copyright 2014, Google Inc. All Rights Reserved.
5
- #
6
- # License:: Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15
- # implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
- # This example adds a label to multiple campaigns.
20
-
21
- require 'adwords_api'
22
-
23
- def add_campaign_labels(campaign_ids, label_id)
24
- # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
25
- # when called without parameters.
26
- adwords = AdwordsApi::Api.new
27
-
28
- # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
29
- # the configuration file or provide your own logger:
30
- # adwords.logger = Logger.new('adwords_xml.log')
31
-
32
- campaign_srv = adwords.service(:CampaignService, API_VERSION)
33
-
34
- operations = campaign_ids.map do |campaign_id|
35
- {
36
- :operator => 'ADD',
37
- :operand => {:campaign_id => campaign_id, :label_id => label_id}
38
- }
39
- end
40
-
41
- response = campaign_srv.mutate_label(operations)
42
- if response and response[:value]
43
- response[:value].each do |campaign_label|
44
- puts "Campaign label for campaign ID %d and label ID %d was added.\n" %
45
- [campaign_label[:campaign_id], campaign_label[:label_id]]
46
- end
47
- end
48
- end
49
-
50
- if __FILE__ == $0
51
- API_VERSION = :v201502
52
-
53
- begin
54
- campaign_id_1 = 'INSERT_CAMPAIGN_ID_1_HERE'.to_i
55
- campaign_id_2 = 'INSERT_CAMPAIGN_ID_2_HERE'.to_i
56
- label_id = 'INSERT_LABEL_ID_HERE'.to_i
57
- add_campaign_labels([campaign_id_1, campaign_id_2], label_id)
58
-
59
- # Authorization error.
60
- rescue AdsCommon::Errors::OAuth2VerificationRequired => e
61
- puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
62
- "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
63
- "to retrieve and store OAuth2 tokens."
64
- puts "See this wiki page for more details:\n\n " +
65
- 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
66
-
67
- # HTTP errors.
68
- rescue AdsCommon::Errors::HttpError => e
69
- puts "HTTP Error: %s" % e
70
-
71
- # API errors.
72
- rescue AdwordsApi::Errors::ApiException => e
73
- puts "Message: %s" % e.message
74
- puts 'Errors:'
75
- e.errors.each_with_index do |error, index|
76
- puts "\tError [%d]:" % (index + 1)
77
- error.each do |field, value|
78
- puts "\t\t%s: %s" % [field, value]
79
- end
80
- end
81
- end
82
- end
@@ -1,162 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Encoding: utf-8
3
- #
4
- # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
5
- #
6
- # License:: Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15
- # implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
- # This example creates an experiment using a query percentage of 10, which
20
- # defines what fraction of auctions should go to the control split (90%) vs.
21
- # the experiment split (10%), then adds experimental bid changes for criteria
22
- # and ad groups. To get campaigns, run get_campaigns.rb. To get ad groups,
23
- # run get_ad_groups.rb. To get keywords, run get_keywords.rb.
24
-
25
- require 'adwords_api'
26
- require 'date'
27
-
28
- def add_experiment(campaign_id, 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
- experiment_srv = adwords.service(:ExperimentService, API_VERSION)
38
- ad_group_srv = adwords.service(:AdGroupService, API_VERSION)
39
- ad_group_criterion_srv =
40
- adwords.service(:AdGroupCriterionService, API_VERSION)
41
-
42
- # Prepare for adding experiment.
43
- operation = {
44
- :operator => 'ADD',
45
- :operand => {
46
- :campaign_id => campaign_id,
47
- :name => "Interplanetary Experiment #%d" % (Time.new.to_f * 1000).to_i,
48
- :query_percentage => 10,
49
- :start_date_time => Time.now.strftime('%Y%m%d %H%M%S'),
50
- # Optional fields:
51
- :status => 'ENABLED',
52
- :end_date_time =>
53
- DateTime.parse((Date.today + 30).to_s).strftime('%Y%m%d %H%M%S')
54
- }
55
- }
56
-
57
- # Add experiment.
58
- response = experiment_srv.mutate([operation])
59
- experiment = response[:value].first
60
- puts "Experiment with name '%s' and ID %d was added." %
61
- [experiment[:name], experiment[:id]]
62
-
63
- experiment_id = experiment[:id]
64
-
65
- # Setup ad group for the experiment.
66
- ad_group = {
67
- :id => ad_group_id,
68
- # Set experiment data for the ad group.
69
- :experiment_data => {
70
- :experiment_id => experiment_id,
71
- :experiment_delta_status => 'MODIFIED',
72
- # Bid multiplier rule that will modify ad group bid for the experiment.
73
- :experiment_bid_multipliers => {
74
- :xsi_type => 'ManualCPCAdGroupExperimentBidMultipliers',
75
- :max_cpc_multiplier => {
76
- :multiplier => 1.5
77
- }
78
- }
79
- }
80
- }
81
-
82
- # Prepare for updating ad group.
83
- operation = {
84
- :operator => 'SET',
85
- :operand => ad_group
86
- }
87
-
88
- # Update ad group.
89
- response = ad_group_srv.mutate([operation])
90
- ad_group = response[:value].first
91
- puts "Ad group ID %d was updated for the experiment." % ad_group[:id]
92
-
93
- # Setup ad group criterion for the experiment.
94
- ad_group_criterion = {
95
- :xsi_type => 'BiddableAdGroupCriterion',
96
- :ad_group_id => ad_group_id,
97
- :criterion => {
98
- :id => criterion_id
99
- },
100
- # Set experiment data for the criterion.
101
- :experiment_data => {
102
- :xsi_type => 'BiddableAdGroupCriterionExperimentData',
103
- :experiment_id => experiment_id,
104
- :experiment_delta_status => 'MODIFIED',
105
- # Bid multiplier rule that will modify criterion bid for the experiment.
106
- :experiment_bid_multiplier => {
107
- :xsi_type => 'ManualCPCAdGroupCriterionExperimentBidMultiplier',
108
- :max_cpc_multiplier => {
109
- :multiplier => 1.5
110
- }
111
- }
112
- }
113
- }
114
-
115
- # Prepare for updating ad group criterion.
116
- operation = {
117
- :operator => 'SET',
118
- :operand => ad_group_criterion
119
- }
120
-
121
- # Update criterion.
122
- response = ad_group_criterion_srv.mutate([operation])
123
- criterion = response[:value].first
124
- puts "Criterion ID %d was successfully updated for the experiment." %
125
- [criterion[:criterion][:id]]
126
-
127
- end
128
-
129
- if __FILE__ == $0
130
- API_VERSION = :v201502
131
-
132
- begin
133
- # IDs of the required objects.
134
- campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
135
- ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
136
- criterion_id = 'INSERT_CRITERION_ID_HERE'.to_i
137
- add_experiment(campaign_id, ad_group_id, criterion_id)
138
-
139
- # Authorization error.
140
- rescue AdsCommon::Errors::OAuth2VerificationRequired => e
141
- puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
142
- "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
143
- "to retrieve and store OAuth2 tokens."
144
- puts "See this wiki page for more details:\n\n " +
145
- 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
146
-
147
- # HTTP errors.
148
- rescue AdsCommon::Errors::HttpError => e
149
- puts "HTTP Error: %s" % e
150
-
151
- # API errors.
152
- rescue AdwordsApi::Errors::ApiException => e
153
- puts "Message: %s" % e.message
154
- puts 'Errors:'
155
- e.errors.each_with_index do |error, index|
156
- puts "\tError [%d]:" % (index + 1)
157
- error.each do |field, value|
158
- puts "\t\t%s: %s" % [field, value]
159
- end
160
- end
161
- end
162
- end
@@ -1,153 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Encoding: utf-8
3
- #
4
- # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
5
- #
6
- # License:: Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15
- # implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
- # This code sample illustrates how to add many keywords using asynchronous
20
- # requests and MutateJobService.
21
-
22
- require 'adwords_api'
23
-
24
- def add_keywords_in_bulk()
25
- # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
26
- # when called without parameters.
27
- adwords = AdwordsApi::Api.new
28
-
29
- # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
30
- # the configuration file or provide your own logger:
31
- # adwords.logger = Logger.new('adwords_xml.log')
32
-
33
- mutate_job_srv = adwords.service(:MutateJobService, API_VERSION)
34
-
35
- ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
36
-
37
- # Create AdGroupCriterionOperations to add keywords.
38
- operations = (1..KEYWORD_NUMBER).map do |index|
39
- {:xsi_type => 'AdGroupCriterionOperation',
40
- :operator => 'ADD',
41
- :operand => {
42
- :xsi_type => 'BiddableAdGroupCriterion',
43
- :ad_group_id => ad_group_id,
44
- :criterion => {
45
- :xsi_type => 'Keyword',
46
- :match_type => 'BROAD',
47
- :text => "mars%d" % index}}}
48
- end
49
-
50
- # You can specify up to 3 job IDs that must successfully complete before
51
- # this job can be processed.
52
- policy = {:prerequisite_job_ids => []}
53
-
54
- # Call mutate to create a new job.
55
- response = mutate_job_srv.mutate(operations, policy)
56
-
57
- raise StandardError, 'Failed to submit a job; aborting.' unless response
58
-
59
- job_id = response[:id]
60
- puts "Job ID %d was successfully created." % job_id
61
-
62
- # Creating selector to retrive hob status and wait for it to complete.
63
- selector = {
64
- :xsi_type => 'BulkMutateJobSelector',
65
- :job_ids => [job_id]
66
- }
67
-
68
- status = nil
69
-
70
- # Poll for job status until it's finished.
71
- puts 'Retrieving job status...'
72
- RETRIES_COUNT.times do |retry_attempt|
73
- job_status_response = mutate_job_srv.get(selector)
74
- if job_status_response
75
- status = job_status_response.first[:status]
76
- case status
77
- when 'FAILED'
78
- raise StandardError, "Job failed with reason: '%s'" %
79
- job_status_response.first[:failure_reason]
80
- when 'COMPLETED'
81
- puts "[%d] Job finished with status '%s'" % [retry_attempt, status]
82
- break
83
- else
84
- puts "[%d] Current status is '%s', waiting %d seconds to retry..." %
85
- [retry_attempt, status, RETRY_INTERVAL]
86
- sleep(RETRY_INTERVAL)
87
- end
88
- else
89
- raise StandardError, 'Error retrieving job status; aborting.'
90
- end
91
- end
92
-
93
- if status == 'COMPLETED'
94
- # Get the job result. Here we re-use the same selector.
95
- result_response = mutate_job_srv.get_result(selector)
96
-
97
- if result_response and result_response[:simple_mutate_result]
98
- results = result_response[:simple_mutate_result][:results]
99
- if results
100
- results.each_with_index do |result, index|
101
- result_message = result.include?(:place_holder) ?
102
- 'FAILED' : 'SUCCEEDED'
103
- puts "Operation [%d] - %s" % [index, result_message]
104
- end
105
- end
106
- errors = result_response[:simple_mutate_result][:errors]
107
- if errors
108
- errors.each do |error|
109
- puts "Error, reason: '%s', trigger: '%s', field path: '%s'" %
110
- [error[:reason], error[:trigger], error[:field_path]]
111
- end
112
- end
113
- else
114
- raise StandardError, 'Error retrieving job results; aborting.'
115
- end
116
- else
117
- puts "Job failed to complete after %d retries." % RETRY_COUNT
118
- end
119
- end
120
-
121
- if __FILE__ == $0
122
- API_VERSION = :v201502
123
- RETRY_INTERVAL = 30
124
- RETRIES_COUNT = 30
125
- KEYWORD_NUMBER = 100
126
-
127
- begin
128
- add_keywords_in_bulk()
129
-
130
- # Authorization error.
131
- rescue AdsCommon::Errors::OAuth2VerificationRequired => e
132
- puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
133
- "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
134
- "to retrieve and store OAuth2 tokens."
135
- puts "See this wiki page for more details:\n\n " +
136
- 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
137
-
138
- # HTTP errors.
139
- rescue AdsCommon::Errors::HttpError => e
140
- puts "HTTP Error: %s" % e
141
-
142
- # API errors.
143
- rescue AdwordsApi::Errors::ApiException => e
144
- puts "Message: %s" % e.message
145
- puts 'Errors:'
146
- e.errors.each_with_index do |error, index|
147
- puts "\tError [%d]:" % (index + 1)
148
- error.each do |field, value|
149
- puts "\t\t%s: %s" % [field, value]
150
- end
151
- end
152
- end
153
- end
@@ -1,97 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Encoding: utf-8
3
- #
4
- # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
5
- #
6
- # License:: Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15
- # implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
- # This example illustrates how to retrieve all the disapproved ads in a given
20
- # ad group. To add ads, run add_text_ads.rb.
21
-
22
- require 'adwords_api'
23
-
24
- def get_all_disapproved_ads(ad_group_id)
25
- # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
26
- # when called without parameters.
27
- adwords = AdwordsApi::Api.new
28
-
29
- # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
30
- # the configuration file or provide your own logger:
31
- # adwords.logger = Logger.new('adwords_xml.log')
32
-
33
- ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)
34
-
35
- # Get all the disapproved ads for this campaign.
36
- selector = {
37
- :fields => ['Id', 'AdGroupAdDisapprovalReasons'],
38
- :ordering => [{:field => 'Id', :sort_order => 'ASCENDING'}],
39
- :predicates => [
40
- {:field => 'AdGroupId', :operator => 'IN', :values => [ad_group_id]},
41
- {
42
- :field => 'AdGroupCreativeApprovalStatus',
43
- :operator => 'IN',
44
- :values => ['DISAPPROVED']
45
- }
46
- ]
47
- }
48
- response = ad_group_ad_srv.get(selector)
49
- if response and response[:entries]
50
- puts 'Ad group %d has %d disapproved ad(s).' %
51
- [ad_group_id, response[:total_num_entries]]
52
- response[:entries].each do |ad_group_ad|
53
- puts ("\tAd with ID %d and type '%s' was disapproved for the following " +
54
- 'reasons:') % [ad_group_ad[:ad][:id], ad_group_ad[:ad][:xsi_type]]
55
- if ad_group_ad.include?(:disapproval_reasons)
56
- ad_group_ad[:disapproval_reasons].each {|reason| puts "\t\t%s" % reason}
57
- else
58
- puts "\t\tReason not provided."
59
- end
60
- end
61
- else
62
- puts 'No disapproved ads found for ad group %d.' % ad_group_id
63
- end
64
- end
65
-
66
- if __FILE__ == $0
67
- API_VERSION = :v201502
68
-
69
- begin
70
- # ID of an ad group to get disapproved ads for.
71
- ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
72
- get_all_disapproved_ads(ad_group_id)
73
-
74
- # Authorization error.
75
- rescue AdsCommon::Errors::OAuth2VerificationRequired => e
76
- puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
77
- "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
78
- "to retrieve and store OAuth2 tokens."
79
- puts "See this wiki page for more details:\n\n " +
80
- 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
81
-
82
- # HTTP errors.
83
- rescue AdsCommon::Errors::HttpError => e
84
- puts "HTTP Error: %s" % e
85
-
86
- # API errors.
87
- rescue AdwordsApi::Errors::ApiException => e
88
- puts "Message: %s" % e.message
89
- puts 'Errors:'
90
- e.errors.each_with_index do |error, index|
91
- puts "\tError [%d]:" % (index + 1)
92
- error.each do |field, value|
93
- puts "\t\t%s: %s" % [field, value]
94
- end
95
- end
96
- end
97
- end