google-adwords-api 0.18.0 → 0.18.1

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 (171) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog +8 -0
  3. data/examples/v201509/basic_operations/add_ad_groups.rb +4 -2
  4. data/examples/v201509/remarketing/add_crm_based_user_list.rb +2 -4
  5. data/examples/v201509/{advanced_operations → remarketing}/upload_offline_conversions.rb +6 -21
  6. data/examples/v201601/account_management/create_account.rb +88 -0
  7. data/examples/v201601/account_management/get_account_changes.rb +139 -0
  8. data/examples/v201601/account_management/get_account_hierarchy.rb +132 -0
  9. data/examples/v201601/advanced_operations/add_ad_customizers.rb +184 -0
  10. data/examples/v201601/advanced_operations/add_ad_group_bid_modifier.rb +101 -0
  11. data/examples/v201601/advanced_operations/add_click_to_download_ad.rb +133 -0
  12. data/examples/v201601/advanced_operations/add_html5_ad.rb +137 -0
  13. data/examples/v201601/advanced_operations/add_keywords_using_incremental_batch_job.rb +179 -0
  14. data/examples/v201601/advanced_operations/add_text_ad_with_upgraded_urls.rb +134 -0
  15. data/examples/v201601/advanced_operations/create_and_attach_shared_keyword_set.rb +141 -0
  16. data/examples/v201601/advanced_operations/find_and_remove_criteria_from_shared_set.rb +174 -0
  17. data/examples/v201601/advanced_operations/get_ad_group_bid_modifiers.rb +102 -0
  18. data/examples/v201601/advanced_operations/use_shared_bidding_strategy.rb +147 -0
  19. data/examples/v201601/basic_operations/add_ad_groups.rb +142 -0
  20. data/examples/v201601/basic_operations/add_campaigns.rb +139 -0
  21. data/examples/v201601/basic_operations/add_keywords.rb +114 -0
  22. data/examples/v201601/basic_operations/add_text_ads.rb +109 -0
  23. data/examples/v201601/basic_operations/get_ad_groups.rb +102 -0
  24. data/examples/v201601/basic_operations/get_campaigns.rb +97 -0
  25. data/examples/v201601/basic_operations/get_campaigns_with_awql.rb +89 -0
  26. data/examples/v201601/basic_operations/get_keywords.rb +109 -0
  27. data/examples/v201601/basic_operations/get_text_ads.rb +110 -0
  28. data/examples/v201601/basic_operations/pause_ad.rb +88 -0
  29. data/examples/v201601/basic_operations/remove_ad.rb +89 -0
  30. data/examples/v201601/basic_operations/remove_ad_group.rb +85 -0
  31. data/examples/v201601/basic_operations/remove_campaign.rb +87 -0
  32. data/examples/v201601/basic_operations/remove_keyword.rb +94 -0
  33. data/examples/v201601/basic_operations/update_ad_group.rb +85 -0
  34. data/examples/v201601/basic_operations/update_campaign.rb +86 -0
  35. data/examples/v201601/basic_operations/update_keyword.rb +106 -0
  36. data/examples/v201601/campaign_management/add_campaign_labels.rb +82 -0
  37. data/examples/v201601/campaign_management/add_complete_campaigns_using_batch_job.rb +356 -0
  38. data/examples/v201601/campaign_management/add_experiment.rb +162 -0
  39. data/examples/v201601/campaign_management/add_keywords_in_bulk.rb +153 -0
  40. data/examples/v201601/campaign_management/get_all_disapproved_ads.rb +97 -0
  41. data/examples/v201601/campaign_management/get_all_disapproved_ads_with_awql.rb +89 -0
  42. data/examples/v201601/campaign_management/get_campaigns_by_label.rb +108 -0
  43. data/examples/v201601/campaign_management/promote_experiment.rb +81 -0
  44. data/examples/v201601/campaign_management/set_ad_parameters.rb +118 -0
  45. data/examples/v201601/campaign_management/set_criterion_bid_modifier.rb +104 -0
  46. data/examples/v201601/campaign_management/validate_text_ad.rb +110 -0
  47. data/examples/v201601/error_handling/handle_partial_failures.rb +130 -0
  48. data/examples/v201601/error_handling/handle_policy_violation_error.rb +141 -0
  49. data/examples/v201601/extensions/add_google_my_business_location_extensions.rb +193 -0
  50. data/examples/v201601/extensions/add_site_links.rb +164 -0
  51. data/examples/v201601/extensions/add_site_links_using_feeds.rb +281 -0
  52. data/examples/v201601/migration/migrate_to_extension_settings.rb +386 -0
  53. data/examples/v201601/migration/upgrade_ad_url.rb +93 -0
  54. data/examples/v201601/misc/get_all_images_and_videos.rb +104 -0
  55. data/examples/v201601/misc/setup_oauth2.rb +84 -0
  56. data/examples/v201601/misc/upload_image.rb +93 -0
  57. data/examples/v201601/misc/upload_media_bundle.rb +90 -0
  58. data/examples/v201601/misc/use_oauth2_jwt.rb +93 -0
  59. data/examples/v201601/misc/use_runtime_config.rb +92 -0
  60. data/examples/v201601/optimization/estimate_keyword_traffic.rb +146 -0
  61. data/examples/v201601/optimization/get_keyword_bid_simulations.rb +95 -0
  62. data/examples/v201601/optimization/get_keyword_ideas.rb +126 -0
  63. data/examples/v201601/remarketing/add_audience.rb +118 -0
  64. data/examples/v201601/remarketing/add_conversion_tracker.rb +97 -0
  65. data/examples/v201601/remarketing/add_crm_based_user_list.rb +119 -0
  66. data/examples/v201601/remarketing/add_rule_based_user_lists.rb +167 -0
  67. data/examples/v201601/remarketing/upload_offline_conversions.rb +98 -0
  68. data/examples/v201601/reporting/download_criteria_report.rb +92 -0
  69. data/examples/v201601/reporting/download_criteria_report_with_awql.rb +93 -0
  70. data/examples/v201601/reporting/get_report_fields.rb +75 -0
  71. data/examples/v201601/reporting/parallel_report_download.rb +166 -0
  72. data/examples/v201601/reporting/stream_criteria_report_results.rb +97 -0
  73. data/examples/v201601/shopping_campaigns/add_product_partition_tree.rb +267 -0
  74. data/examples/v201601/shopping_campaigns/add_product_scope.rb +129 -0
  75. data/examples/v201601/shopping_campaigns/add_shopping_campaign.rb +129 -0
  76. data/examples/v201601/shopping_campaigns/get_product_category_taxonomy.rb +115 -0
  77. data/examples/v201601/targeting/add_campaign_targeting_criteria.rb +180 -0
  78. data/examples/v201601/targeting/add_demographic_targeting_criteria.rb +112 -0
  79. data/examples/v201601/targeting/get_campaign_targeting_criteria.rb +106 -0
  80. data/examples/v201601/targeting/get_targetable_languages_and_carriers.rb +89 -0
  81. data/examples/v201601/targeting/lookup_location.rb +108 -0
  82. data/lib/adwords_api/api_config.rb +90 -4
  83. data/lib/adwords_api/batch_job_utils.rb +29 -17
  84. data/lib/adwords_api/incremental_upload_helper.rb +5 -1
  85. data/lib/adwords_api/report_stream.rb +7 -8
  86. data/lib/adwords_api/report_utils.rb +4 -4
  87. data/lib/adwords_api/v201601/account_label_service.rb +46 -0
  88. data/lib/adwords_api/v201601/account_label_service_registry.rb +46 -0
  89. data/lib/adwords_api/v201601/ad_customizer_feed_service.rb +46 -0
  90. data/lib/adwords_api/v201601/ad_customizer_feed_service_registry.rb +46 -0
  91. data/lib/adwords_api/v201601/ad_group_ad_service.rb +70 -0
  92. data/lib/adwords_api/v201601/ad_group_ad_service_registry.rb +46 -0
  93. data/lib/adwords_api/v201601/ad_group_bid_modifier_service.rb +54 -0
  94. data/lib/adwords_api/v201601/ad_group_bid_modifier_service_registry.rb +46 -0
  95. data/lib/adwords_api/v201601/ad_group_criterion_service.rb +62 -0
  96. data/lib/adwords_api/v201601/ad_group_criterion_service_registry.rb +46 -0
  97. data/lib/adwords_api/v201601/ad_group_extension_setting_service.rb +54 -0
  98. data/lib/adwords_api/v201601/ad_group_extension_setting_service_registry.rb +46 -0
  99. data/lib/adwords_api/v201601/ad_group_feed_service.rb +54 -0
  100. data/lib/adwords_api/v201601/ad_group_feed_service_registry.rb +46 -0
  101. data/lib/adwords_api/v201601/ad_group_service.rb +62 -0
  102. data/lib/adwords_api/v201601/ad_group_service_registry.rb +46 -0
  103. data/lib/adwords_api/v201601/ad_param_service.rb +46 -0
  104. data/lib/adwords_api/v201601/ad_param_service_registry.rb +46 -0
  105. data/lib/adwords_api/v201601/adwords_user_list_service.rb +54 -0
  106. data/lib/adwords_api/v201601/adwords_user_list_service_registry.rb +46 -0
  107. data/lib/adwords_api/v201601/batch_job_service.rb +54 -0
  108. data/lib/adwords_api/v201601/batch_job_service_registry.rb +46 -0
  109. data/lib/adwords_api/v201601/bidding_strategy_service.rb +54 -0
  110. data/lib/adwords_api/v201601/bidding_strategy_service_registry.rb +46 -0
  111. data/lib/adwords_api/v201601/budget_order_service.rb +54 -0
  112. data/lib/adwords_api/v201601/budget_order_service_registry.rb +46 -0
  113. data/lib/adwords_api/v201601/budget_service.rb +54 -0
  114. data/lib/adwords_api/v201601/budget_service_registry.rb +46 -0
  115. data/lib/adwords_api/v201601/campaign_criterion_service.rb +54 -0
  116. data/lib/adwords_api/v201601/campaign_criterion_service_registry.rb +46 -0
  117. data/lib/adwords_api/v201601/campaign_extension_setting_service.rb +54 -0
  118. data/lib/adwords_api/v201601/campaign_extension_setting_service_registry.rb +46 -0
  119. data/lib/adwords_api/v201601/campaign_feed_service.rb +54 -0
  120. data/lib/adwords_api/v201601/campaign_feed_service_registry.rb +46 -0
  121. data/lib/adwords_api/v201601/campaign_service.rb +62 -0
  122. data/lib/adwords_api/v201601/campaign_service_registry.rb +46 -0
  123. data/lib/adwords_api/v201601/campaign_shared_set_service.rb +54 -0
  124. data/lib/adwords_api/v201601/campaign_shared_set_service_registry.rb +46 -0
  125. data/lib/adwords_api/v201601/constant_data_service.rb +110 -0
  126. data/lib/adwords_api/v201601/constant_data_service_registry.rb +46 -0
  127. data/lib/adwords_api/v201601/conversion_tracker_service.rb +54 -0
  128. data/lib/adwords_api/v201601/conversion_tracker_service_registry.rb +46 -0
  129. data/lib/adwords_api/v201601/customer_extension_setting_service.rb +54 -0
  130. data/lib/adwords_api/v201601/customer_extension_setting_service_registry.rb +46 -0
  131. data/lib/adwords_api/v201601/customer_feed_service.rb +54 -0
  132. data/lib/adwords_api/v201601/customer_feed_service_registry.rb +46 -0
  133. data/lib/adwords_api/v201601/customer_service.rb +54 -0
  134. data/lib/adwords_api/v201601/customer_service_registry.rb +46 -0
  135. data/lib/adwords_api/v201601/customer_sync_service.rb +38 -0
  136. data/lib/adwords_api/v201601/customer_sync_service_registry.rb +47 -0
  137. data/lib/adwords_api/v201601/data_service.rb +78 -0
  138. data/lib/adwords_api/v201601/data_service_registry.rb +46 -0
  139. data/lib/adwords_api/v201601/experiment_service.rb +46 -0
  140. data/lib/adwords_api/v201601/experiment_service_registry.rb +46 -0
  141. data/lib/adwords_api/v201601/feed_item_service.rb +54 -0
  142. data/lib/adwords_api/v201601/feed_item_service_registry.rb +46 -0
  143. data/lib/adwords_api/v201601/feed_mapping_service.rb +54 -0
  144. data/lib/adwords_api/v201601/feed_mapping_service_registry.rb +46 -0
  145. data/lib/adwords_api/v201601/feed_service.rb +54 -0
  146. data/lib/adwords_api/v201601/feed_service_registry.rb +46 -0
  147. data/lib/adwords_api/v201601/label_service.rb +54 -0
  148. data/lib/adwords_api/v201601/label_service_registry.rb +46 -0
  149. data/lib/adwords_api/v201601/location_criterion_service.rb +46 -0
  150. data/lib/adwords_api/v201601/location_criterion_service_registry.rb +46 -0
  151. data/lib/adwords_api/v201601/managed_customer_service.rb +78 -0
  152. data/lib/adwords_api/v201601/managed_customer_service_registry.rb +46 -0
  153. data/lib/adwords_api/v201601/media_service.rb +54 -0
  154. data/lib/adwords_api/v201601/media_service_registry.rb +46 -0
  155. data/lib/adwords_api/v201601/mutate_job_service.rb +54 -0
  156. data/lib/adwords_api/v201601/mutate_job_service_registry.rb +46 -0
  157. data/lib/adwords_api/v201601/offline_conversion_feed_service.rb +38 -0
  158. data/lib/adwords_api/v201601/offline_conversion_feed_service_registry.rb +46 -0
  159. data/lib/adwords_api/v201601/report_definition_service.rb +38 -0
  160. data/lib/adwords_api/v201601/report_definition_service_registry.rb +46 -0
  161. data/lib/adwords_api/v201601/shared_criterion_service.rb +54 -0
  162. data/lib/adwords_api/v201601/shared_criterion_service_registry.rb +46 -0
  163. data/lib/adwords_api/v201601/shared_set_service.rb +54 -0
  164. data/lib/adwords_api/v201601/shared_set_service_registry.rb +46 -0
  165. data/lib/adwords_api/v201601/targeting_idea_service.rb +38 -0
  166. data/lib/adwords_api/v201601/targeting_idea_service_registry.rb +46 -0
  167. data/lib/adwords_api/v201601/traffic_estimator_service.rb +38 -0
  168. data/lib/adwords_api/v201601/traffic_estimator_service_registry.rb +46 -0
  169. data/lib/adwords_api/version.rb +1 -1
  170. data/test/adwords_api/test_batch_job_utils.rb +11 -2
  171. metadata +163 -5
@@ -0,0 +1,98 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Copyright:: Copyright 2013, 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 example imports offline conversion values for specific clicks to
20
+ # your account. To get Google Click ID for a click, run
21
+ # CLICK_PERFORMANCE_REPORT. To set up a conversion tracker, run the
22
+ # add_conversion_tracker.rb example.
23
+
24
+ require 'adwords_api'
25
+ require 'date'
26
+
27
+ def upload_offline_conversions(conversion_name, google_click_id,
28
+ conversion_time, conversion_value)
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
+ conversion_feed_srv =
38
+ adwords.service(:OfflineConversionFeedService, API_VERSION)
39
+
40
+ # Associate offline conversions with the existing named conversion tracker. If
41
+ # this tracker was newly created, it may be a few hours before it can accept
42
+ # conversions.
43
+ feed = {
44
+ :conversion_name => conversion_name,
45
+ :google_click_id => google_click_id,
46
+ :conversion_time => conversion_time,
47
+ :conversion_value => conversion_value
48
+ }
49
+ return_feeds = conversion_feed_srv.mutate([
50
+ {:operator => 'ADD', :operand => feed}])
51
+ return_feeds[:value].each do |return_feed|
52
+ puts ("Uploaded offline conversion value %.2f for Google Click ID '%s', " +
53
+ 'to %s') % [return_feed[:conversion_value],
54
+ return_feed[:google_click_id],
55
+ return_feed[:conversion_name]]
56
+ end
57
+ end
58
+
59
+ if __FILE__ == $0
60
+ API_VERSION = :v201601
61
+
62
+ begin
63
+ # Name of the conversion tracker to upload to.
64
+ conversion_name = 'INSERT_CONVERSION_NAME_HERE'
65
+ # Google Click ID of the click for which offline conversions are uploaded.
66
+ google_click_id = 'INSERT_GOOGLE_CLICK_ID_HERE'
67
+ # Conversion time in 'yyyymmdd hhmmss' format.
68
+ conversion_time = Time.new.strftime("%Y%m%d %H%M%S")
69
+ # Conversion value to be uploaded.
70
+ conversion_value = 'INSERT_CONVERSION_VALUE_HERE'.to_f
71
+
72
+ upload_offline_conversions(conversion_name, google_click_id,
73
+ conversion_time, conversion_value)
74
+
75
+ # Authorization error.
76
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
77
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
78
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
79
+ "to retrieve and store OAuth2 tokens."
80
+ puts "See this wiki page for more details:\n\n " +
81
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
82
+
83
+ # HTTP errors.
84
+ rescue AdsCommon::Errors::HttpError => e
85
+ puts "HTTP Error: %s" % e
86
+
87
+ # API errors.
88
+ rescue AdwordsApi::Errors::ApiException => e
89
+ puts "Message: %s" % e.message
90
+ puts 'Errors:'
91
+ e.errors.each_with_index do |error, index|
92
+ puts "\tError [%d]:" % (index + 1)
93
+ error.each do |field, value|
94
+ puts "\t\t%s: %s" % [field, value]
95
+ end
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,92 @@
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 gets and downloads an Ad Hoc report from a XML report definition.
20
+
21
+ require 'adwords_api'
22
+
23
+ def download_criteria_report(file_name)
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
+ # Get report utilities for the version.
33
+ report_utils = adwords.report_utils(API_VERSION)
34
+
35
+ # Define report definition. You can also pass your own XML text as a string.
36
+ report_definition = {
37
+ :selector => {
38
+ :fields => ['CampaignId', 'AdGroupId', 'Id', 'Criteria', 'CriteriaType',
39
+ 'FinalUrls', 'Impressions', 'Clicks', 'Cost'],
40
+ # Predicates are optional.
41
+ :predicates => {
42
+ :field => 'Status',
43
+ :operator => 'IN',
44
+ :values => ['ENABLED', 'PAUSED']
45
+ }
46
+ },
47
+ :report_name => 'Last 7 days CRITERIA_PERFORMANCE_REPORT',
48
+ :report_type => 'CRITERIA_PERFORMANCE_REPORT',
49
+ :download_format => 'CSV',
50
+ :date_range_type => 'LAST_7_DAYS',
51
+ }
52
+
53
+ # Optional: Set the configuration of the API instance to suppress header,
54
+ # column name, or summary rows in the report output. You can also configure
55
+ # this in your adwords_api.yml configuration file.
56
+ adwords.skip_report_header = false
57
+ adwords.skip_column_header = false
58
+ adwords.skip_report_summary = false
59
+ # Enable to allow rows with zero impressions to show.
60
+ adwords.include_zero_impressions = false
61
+
62
+ # Download report, using "download_report_as_file" utility method.
63
+ # To retrieve the report as return value, use "download_report" method.
64
+ report_utils.download_report_as_file(report_definition, file_name)
65
+ puts "Report was downloaded to '%s'." % file_name
66
+ end
67
+
68
+ if __FILE__ == $0
69
+ API_VERSION = :v201601
70
+
71
+ begin
72
+ # File name to write report to.
73
+ file_name = 'INSERT_OUTPUT_FILE_NAME_HERE'
74
+ download_criteria_report(file_name)
75
+
76
+ # Authorization error.
77
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
78
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
79
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
80
+ "to retrieve and store OAuth2 tokens."
81
+ puts "See this wiki page for more details:\n\n " +
82
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
83
+
84
+ # HTTP errors.
85
+ rescue AdsCommon::Errors::HttpError => e
86
+ puts "HTTP Error: %s" % e
87
+
88
+ # API errors.
89
+ rescue AdwordsApi::Errors::ReportError => e
90
+ puts "Reporting Error: %s" % e.message
91
+ end
92
+ end
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Copyright:: Copyright 2012, 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 gets an Ad Hoc report using AdWords Query Language.
20
+ # See AWQL guide for more details:
21
+ # https://developers.google.com/adwords/api/docs/guides/awql
22
+
23
+ require 'date'
24
+
25
+ require 'adwords_api'
26
+
27
+ def download_criteria_report_with_awql(file_name, report_format)
28
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
29
+ # when called without parameters.
30
+ adwords = AdwordsApi::Api.new
31
+
32
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
33
+ # the configuration file or provide your own logger:
34
+ # adwords.logger = Logger.new('adwords_xml.log')
35
+
36
+ # Get report utilities for the version.
37
+ report_utils = adwords.report_utils(API_VERSION)
38
+
39
+ # Prepare a date range for the last week. Instead you can use 'LAST_7_DAYS'.
40
+ date_range = '%s,%s' % [
41
+ DateTime.parse((Date.today - 7).to_s).strftime('%Y%m%d'),
42
+ DateTime.parse((Date.today - 1).to_s).strftime('%Y%m%d')
43
+ ]
44
+
45
+ # Define report definition. You can also pass your own XML text as a string.
46
+ report_query = 'SELECT CampaignId, AdGroupId, Id, Criteria, CriteriaType, ' +
47
+ 'Impressions, Clicks, Cost FROM CRITERIA_PERFORMANCE_REPORT ' +
48
+ 'WHERE Status IN [ENABLED, PAUSED] ' +
49
+ 'DURING %s' % date_range
50
+
51
+ # Optional: Set the configuration of the API instance to suppress header,
52
+ # column name, or summary rows in the report output. You can also configure
53
+ # this in your adwords_api.yml configuration file.
54
+ adwords.skip_report_header = false
55
+ adwords.skip_column_header = false
56
+ adwords.skip_report_summary = false
57
+ # Enable to allow rows with zero impressions to show.
58
+ adwords.include_zero_impressions = true
59
+
60
+ # Download report, using "download_report_as_file_with_awql" utility method.
61
+ # To retrieve the report as return value, use "download_report_with_awql"
62
+ # method.
63
+ report_utils.download_report_as_file_with_awql(report_query, report_format,
64
+ file_name)
65
+ puts "Report was downloaded to '%s'." % file_name
66
+ end
67
+
68
+ if __FILE__ == $0
69
+ API_VERSION = :v201601
70
+
71
+ begin
72
+ # File name to write report to.
73
+ file_name = 'INSERT_OUTPUT_FILE_NAME_HERE'
74
+ report_format = 'CSV'
75
+ download_criteria_report_with_awql(file_name, report_format)
76
+
77
+ # Authorization error.
78
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
79
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
80
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
81
+ "to retrieve and store OAuth2 tokens."
82
+ puts "See this wiki page for more details:\n\n " +
83
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
84
+
85
+ # HTTP errors.
86
+ rescue AdsCommon::Errors::HttpError => e
87
+ puts 'HTTP Error: %s' % e
88
+
89
+ # API errors.
90
+ rescue AdwordsApi::Errors::ReportError => e
91
+ puts 'Reporting Error: %s' % e.message
92
+ end
93
+ end
@@ -0,0 +1,75 @@
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 gets the list of possible report fields for a report type.
20
+
21
+ require 'adwords_api'
22
+
23
+ def get_report_fields(report_type)
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
+ report_def_srv = adwords.service(:ReportDefinitionService, API_VERSION)
33
+
34
+ # Get report fields.
35
+ fields = report_def_srv.get_report_fields(report_type)
36
+ if fields
37
+ puts "Report type '%s' contains the following fields:" % report_type
38
+ fields.each do |field|
39
+ puts ' - %s (%s)' % [field[:field_name], field[:field_type]]
40
+ puts ' := [%s]' % field[:enum_values].join(', ') if field[:enum_values]
41
+ end
42
+ end
43
+ end
44
+
45
+ if __FILE__ == $0
46
+ API_VERSION = :v201601
47
+
48
+ begin
49
+ report_type = 'INSERT_REPORT_TYPE_HERE'
50
+ get_report_fields(report_type)
51
+
52
+ # Authorization error.
53
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
54
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
55
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
56
+ "to retrieve and store OAuth2 tokens."
57
+ puts "See this wiki page for more details:\n\n " +
58
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
59
+
60
+ # HTTP errors.
61
+ rescue AdsCommon::Errors::HttpError => e
62
+ puts "HTTP Error: %s" % e
63
+
64
+ # API errors.
65
+ rescue AdwordsApi::Errors::ApiException => e
66
+ puts "Message: %s" % e.message
67
+ puts 'Errors:'
68
+ e.errors.each_with_index do |error, index|
69
+ puts "\tError [%d]:" % (index + 1)
70
+ error.each do |field, value|
71
+ puts "\t\t%s: %s" % [field, value]
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,166 @@
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 gets and downloads an Ad Hoc report from a XML report definition
20
+ # for all accounts in hierarchy in multiple parallel threads. This example
21
+ # needs to be run against an AdWords manager account.
22
+
23
+ require 'thread'
24
+
25
+ require 'adwords_api'
26
+ require 'adwords_api/utils'
27
+
28
+ def parallel_report_download()
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
+ # Determine list of customer IDs to retrieve report for. For this example we
38
+ # will use ManagedCustomerService to get all IDs in hierarchy.
39
+
40
+ managed_customer_srv = adwords.service(:ManagedCustomerService, API_VERSION)
41
+
42
+ # Get the account hierarchy for this account.
43
+ selector = {:fields => ['CustomerId']}
44
+
45
+ graph = managed_customer_srv.get(selector)
46
+
47
+ # Using queue to balance load between threads.
48
+ queue = Queue.new()
49
+
50
+ if graph and graph[:entries] and !graph[:entries].empty?
51
+ graph[:entries].each {|account| queue << account[:customer_id]}
52
+ else
53
+ raise StandardError, 'Can not retrieve any customer ID'
54
+ end
55
+
56
+ # Get report utilities for the version.
57
+ report_utils = adwords.report_utils(API_VERSION)
58
+
59
+ # Define report definition. You can also pass your own XML text as a string.
60
+ report_definition = {
61
+ :selector => {
62
+ :fields => ['CampaignId', 'AdGroupId', 'Impressions', 'Clicks', 'Cost'],
63
+ # Predicates are optional.
64
+ :predicates => {
65
+ :field => 'AdGroupStatus',
66
+ :operator => 'IN',
67
+ :values => ['ENABLED', 'PAUSED']
68
+ }
69
+ },
70
+ :report_name => 'Custom ADGROUP_PERFORMANCE_REPORT',
71
+ :report_type => 'ADGROUP_PERFORMANCE_REPORT',
72
+ :download_format => 'CSV',
73
+ :date_range_type => 'LAST_7_DAYS',
74
+ # Enable to get rows with zero impressions.
75
+ :include_zero_impressions => false
76
+ }
77
+
78
+ puts 'Retrieving %d reports with %d threads:' % [queue.size, THREADS]
79
+
80
+ reports_succeeded = Queue.new()
81
+ reports_failed = Queue.new()
82
+
83
+ # Creating a mutex to control access to the queue.
84
+ queue_mutex = Mutex.new
85
+
86
+ # Start all the threads.
87
+ threads = (1..THREADS).map do |thread_id|
88
+ Thread.new(report_definition) do |local_def|
89
+ cid = nil
90
+ begin
91
+ cid = queue_mutex.synchronize {(queue.empty?) ? nil : queue.pop(true)}
92
+ if cid
93
+ retry_count = 0
94
+ file_name = 'adgroup_%010d.csv' % cid
95
+ puts "[%2d/%d] Loading report for customer ID %s into '%s'..." %
96
+ [thread_id, retry_count,
97
+ AdwordsApi::Utils.format_id(cid), file_name]
98
+ begin
99
+ report_utils.download_report_as_file(local_def, file_name, cid)
100
+ reports_succeeded << {:cid => cid, :file_name => file_name}
101
+ rescue AdwordsApi::Errors::ReportError => e
102
+ if e.http_code == 500 && retry_count < MAX_RETRIES
103
+ retry_count += 1
104
+ sleep(retry_count * BACKOFF_FACTOR)
105
+ retry
106
+ else
107
+ puts(('Report failed for customer ID %s with code %d after %d ' +
108
+ 'retries.') % [cid, e.http_code, retry_count + 1])
109
+ reports_failed <<
110
+ {:cid => cid, :http_code => e.http_code, :message => e.message}
111
+ end
112
+ end
113
+ end
114
+ end while (cid != nil)
115
+ end
116
+ end
117
+
118
+ # Wait for all threads to finish.
119
+ threads.each { |aThread| aThread.join }
120
+
121
+ puts 'Download completed, results:'
122
+ puts 'Successful reports:'
123
+ while !reports_succeeded.empty? do
124
+ result = reports_succeeded.pop()
125
+ puts "\tClient ID %s => '%s'" %
126
+ [AdwordsApi::Utils.format_id(result[:cid]), result[:file_name]]
127
+ end
128
+ puts 'Failed reports:'
129
+ while !reports_failed.empty? do
130
+ result = reports_failed.pop()
131
+ puts "\tClient ID %s => Code: %d, Message: '%s'" %
132
+ [AdwordsApi::Utils.format_id(result[:cid]),
133
+ result[:http_code], result[:message]]
134
+ end
135
+ puts 'End of results.'
136
+ end
137
+
138
+ if __FILE__ == $0
139
+ API_VERSION = :v201601
140
+ # Number of parallel threads to spawn.
141
+ THREADS = 10
142
+ # Maximum number of retries for 500 errors.
143
+ MAX_RETRIES = 5
144
+ # Timeout between retries in seconds.
145
+ BACKOFF_FACTOR = 5
146
+
147
+ begin
148
+ parallel_report_download()
149
+
150
+ # Authorization error.
151
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
152
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
153
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
154
+ "to retrieve and store OAuth2 tokens."
155
+ puts "See this wiki page for more details:\n\n " +
156
+ 'https://github.com/googleads/google-api-ads-ruby/wiki/OAuth2'
157
+
158
+ # HTTP errors.
159
+ rescue AdsCommon::Errors::HttpError => e
160
+ puts 'HTTP Error: %s' % e
161
+
162
+ # API errors.
163
+ rescue AdwordsApi::Errors::ReportError => e
164
+ puts 'Reporting Error: %s' % e.message
165
+ end
166
+ end