google-adx-buyer-api 0.4.4 → 0.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (92) hide show
  1. data/ChangeLog +5 -1
  2. data/README +12 -9
  3. data/examples/v201206/campaign_management/add_placements_in_bulk.rb +1 -1
  4. data/examples/v201209/campaign_management/add_placements_in_bulk.rb +1 -1
  5. data/examples/v201209/error_handling/handle_two_factor_authorization_error.rb +2 -1
  6. data/examples/v201209/misc/get_all_images_and_videos.rb +3 -4
  7. data/examples/v201209/misc/upload_image.rb +11 -9
  8. data/examples/{v201109_1/misc/use_oauth.rb → v201209/misc/use_oauth2.rb} +24 -24
  9. data/examples/v201209/misc/{use_oauth.rb → use_oauth2_jwt.rb} +19 -23
  10. data/examples/v201209/optimization/get_placement_ideas.rb +1 -3
  11. data/examples/v201209/remarketing/add_audience.rb +27 -23
  12. data/examples/v201209/remarketing/add_conversion_tracker.rb +8 -4
  13. data/examples/v201209/targeting/get_targetable_languages_and_carriers.rb +7 -3
  14. metadata +34 -132
  15. data/examples/v201109/account_management/get_account_changes.rb +0 -137
  16. data/examples/v201109/basic_operations/add_ad_group.rb +0 -88
  17. data/examples/v201109/basic_operations/add_campaign.rb +0 -98
  18. data/examples/v201109/basic_operations/add_placements.rb +0 -99
  19. data/examples/v201109/basic_operations/add_thirdparty_redirect_ad.rb +0 -105
  20. data/examples/v201109/basic_operations/delete_ad.rb +0 -80
  21. data/examples/v201109/basic_operations/delete_ad_group.rb +0 -76
  22. data/examples/v201109/basic_operations/delete_campaign.rb +0 -77
  23. data/examples/v201109/basic_operations/delete_placement.rb +0 -86
  24. data/examples/v201109/basic_operations/get_ad_groups.rb +0 -80
  25. data/examples/v201109/basic_operations/get_campaigns.rb +0 -77
  26. data/examples/v201109/basic_operations/get_placements.rb +0 -92
  27. data/examples/v201109/basic_operations/get_thirdparty_redirect_ads.rb +0 -100
  28. data/examples/v201109/basic_operations/pause_ad.rb +0 -81
  29. data/examples/v201109/basic_operations/update_ad_group.rb +0 -76
  30. data/examples/v201109/basic_operations/update_campaign.rb +0 -79
  31. data/examples/v201109/basic_operations/update_placement.rb +0 -94
  32. data/examples/v201109/campaign_management/add_placements_in_bulk.rb +0 -151
  33. data/examples/v201109/campaign_management/get_all_disapproved_ads.rb +0 -92
  34. data/examples/v201109/error_handling/handle_captcha_challenge.rb +0 -93
  35. data/examples/v201109/error_handling/handle_partial_failures.rb +0 -117
  36. data/examples/v201109/error_handling/handle_policy_violation_error.rb +0 -138
  37. data/examples/v201109/error_handling/handle_two_factor_authorization_error.rb +0 -87
  38. data/examples/v201109/misc/get_all_images_and_videos.rb +0 -101
  39. data/examples/v201109/misc/upload_image.rb +0 -87
  40. data/examples/v201109/misc/use_oauth.rb +0 -97
  41. data/examples/v201109/optimization/get_placement_ideas.rb +0 -106
  42. data/examples/v201109/remarketing/add_audience.rb +0 -111
  43. data/examples/v201109/remarketing/add_conversion_tracker.rb +0 -93
  44. data/examples/v201109/reporting/download_criteria_report.rb +0 -79
  45. data/examples/v201109/reporting/download_defined_report.rb +0 -67
  46. data/examples/v201109/reporting/get_campaign_stats.rb +0 -105
  47. data/examples/v201109/reporting/get_defined_reports.rb +0 -75
  48. data/examples/v201109/reporting/get_report_fields.rb +0 -71
  49. data/examples/v201109/reporting/parallel_report_download.rb +0 -159
  50. data/examples/v201109/targeting/add_campaign_targeting_criteria.rb +0 -110
  51. data/examples/v201109/targeting/get_campaign_targeting_criteria.rb +0 -104
  52. data/examples/v201109/targeting/get_targetable_languages_and_carriers.rb +0 -82
  53. data/examples/v201109/targeting/lookup_location.rb +0 -103
  54. data/examples/v201109_1/account_management/get_account_changes.rb +0 -137
  55. data/examples/v201109_1/basic_operations/add_ad_group.rb +0 -88
  56. data/examples/v201109_1/basic_operations/add_campaign.rb +0 -98
  57. data/examples/v201109_1/basic_operations/add_placements.rb +0 -99
  58. data/examples/v201109_1/basic_operations/add_thirdparty_redirect_ad.rb +0 -105
  59. data/examples/v201109_1/basic_operations/delete_ad.rb +0 -80
  60. data/examples/v201109_1/basic_operations/delete_ad_group.rb +0 -76
  61. data/examples/v201109_1/basic_operations/delete_campaign.rb +0 -77
  62. data/examples/v201109_1/basic_operations/delete_placement.rb +0 -86
  63. data/examples/v201109_1/basic_operations/get_ad_groups.rb +0 -80
  64. data/examples/v201109_1/basic_operations/get_campaigns.rb +0 -77
  65. data/examples/v201109_1/basic_operations/get_placements.rb +0 -92
  66. data/examples/v201109_1/basic_operations/get_thirdparty_redirect_ads.rb +0 -100
  67. data/examples/v201109_1/basic_operations/pause_ad.rb +0 -81
  68. data/examples/v201109_1/basic_operations/update_ad_group.rb +0 -76
  69. data/examples/v201109_1/basic_operations/update_campaign.rb +0 -79
  70. data/examples/v201109_1/basic_operations/update_placement.rb +0 -94
  71. data/examples/v201109_1/campaign_management/add_placements_in_bulk.rb +0 -151
  72. data/examples/v201109_1/campaign_management/get_all_disapproved_ads.rb +0 -92
  73. data/examples/v201109_1/error_handling/handle_captcha_challenge.rb +0 -93
  74. data/examples/v201109_1/error_handling/handle_partial_failures.rb +0 -117
  75. data/examples/v201109_1/error_handling/handle_policy_violation_error.rb +0 -138
  76. data/examples/v201109_1/error_handling/handle_two_factor_authorization_error.rb +0 -87
  77. data/examples/v201109_1/misc/get_all_images_and_videos.rb +0 -101
  78. data/examples/v201109_1/misc/upload_image.rb +0 -87
  79. data/examples/v201109_1/optimization/get_placement_ideas.rb +0 -106
  80. data/examples/v201109_1/remarketing/add_audience.rb +0 -111
  81. data/examples/v201109_1/remarketing/add_conversion_tracker.rb +0 -93
  82. data/examples/v201109_1/reporting/download_criteria_report.rb +0 -79
  83. data/examples/v201109_1/reporting/download_defined_report.rb +0 -67
  84. data/examples/v201109_1/reporting/get_campaign_stats.rb +0 -105
  85. data/examples/v201109_1/reporting/get_defined_reports.rb +0 -75
  86. data/examples/v201109_1/reporting/get_report_fields.rb +0 -71
  87. data/examples/v201109_1/reporting/parallel_report_download.rb +0 -159
  88. data/examples/v201109_1/targeting/add_campaign_targeting_criteria.rb +0 -110
  89. data/examples/v201109_1/targeting/get_campaign_targeting_criteria.rb +0 -104
  90. data/examples/v201109_1/targeting/get_targetable_languages_and_carriers.rb +0 -82
  91. data/examples/v201109_1/targeting/lookup_location.rb +0 -103
  92. data/examples/v201209/reporting/parallel_report_download.rb +0 -159
@@ -1,110 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Encoding: utf-8
3
- #
4
- # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
- #
6
- # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
7
- #
8
- # License:: Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # http://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
17
- # implied.
18
- # See the License for the specific language governing permissions and
19
- # limitations under the License.
20
- #
21
- # This example adds various types of targeting criteria to a campaign. To get
22
- # campaigns list, run get_campaigns.rb.
23
- #
24
- # Tags: CampaignCriterionService.mutate
25
-
26
- require 'adwords_api'
27
-
28
- def add_campaign_targeting_criteria(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_criterion_srv =
38
- adwords.service(:CampaignCriterionService, API_VERSION)
39
-
40
- # Create campaign criteria.
41
- campaign_criteria = [
42
- # Location criteria. The IDs can be found in the documentation or retrieved
43
- # with the LocationCriterionService.
44
- {:xsi_type => 'Location', :id => 21137}, # California, USA
45
- {:xsi_type => 'Location', :id => 2484}, # Mexico
46
- # Language criteria. The IDs can be found in the documentation or retrieved
47
- # with the ConstantDataService.
48
- {:xsi_type => 'Language', :id => 1000}, # English
49
- {:xsi_type => 'Language', :id => 1003}, # Spanish
50
- # Platform criteria. The IDs can be found in the documentation.
51
- {:xsi_type => 'Platform', :id => 30001}, # Mobile
52
- {:xsi_type => 'Platform', :id => 30002} # Tablets
53
- ]
54
-
55
- # Create operations.
56
- operations = campaign_criteria.map do |criterion|
57
- {:operator => 'ADD',
58
- :operand => {
59
- :campaign_id => campaign_id,
60
- :criterion => criterion}
61
- }
62
- end
63
-
64
- # Create operation to add a negative campaign placement.
65
- operations << {
66
- :operator => 'ADD',
67
- :operand => {
68
- :xsi_type => 'NegativeCampaignCriterion',
69
- :campaign_id => campaign_id,
70
- :criterion => {
71
- :xsi_type => 'Placement',
72
- :url => 'http://mars.google.com'
73
- }
74
- }
75
- }
76
-
77
- response = campaign_criterion_srv.mutate(operations)
78
-
79
- criteria = response[:value]
80
- criteria.each do |campaign_criterion|
81
- criterion = campaign_criterion[:criterion]
82
- puts ("Campaign criterion with campaign ID %d, criterion ID %d and " +
83
- "type '%s' was added.") % [campaign_criterion[:campaign_id],
84
- criterion[:id], criterion[:criterion_type]]
85
- end
86
- end
87
-
88
- if __FILE__ == $0
89
- API_VERSION = :v201109_1
90
-
91
- begin
92
- campaign_id = 'INSERT_CAMPAIGN_ID_HERE'
93
- add_campaign_targeting_criteria(campaign_id)
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
@@ -1,104 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Encoding: utf-8
3
- #
4
- # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
- #
6
- # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
7
- #
8
- # License:: Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # http://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
17
- # implied.
18
- # See the License for the specific language governing permissions and
19
- # limitations under the License.
20
- #
21
- # This example illustrates how to retrieve all the campaign targets. To set
22
- # campaign targets, run add_campaign_targeting_criteria.rb.
23
- #
24
- # Tags: CampaignCriterionService.get
25
-
26
- require 'adwords_api'
27
-
28
- def get_campaign_targeting_criteria(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_criterion_srv =
38
- adwords.service(:CampaignCriterionService, API_VERSION)
39
-
40
- # Selector to get all the targeting for this campaign.
41
- selector = {
42
- :fields => ['Id', 'CriteriaType', 'PlacementUrl'],
43
- :predicates => [
44
- {:field => 'CampaignId', :operator => 'EQUALS', :values => [campaign_id]},
45
- {
46
- :field => 'CriteriaType',
47
- :operator => 'EQUALS',
48
- :values => ['PLACEMENT']
49
- }
50
- ],
51
- :paging => {
52
- :start_index => 0,
53
- :number_results => PAGE_SIZE
54
- }
55
- }
56
-
57
- # Set initial values.
58
- offset, page = 0, {}
59
-
60
- begin
61
- page = campaign_criterion_srv.get(selector)
62
- if page[:entries]
63
- page[:entries].each do |criterion|
64
- placement = criterion[:criterion]
65
- puts "Placement with ID %d, type '%s' and URL '%s' was found." %
66
- [placement[:id], placement[:type], placement[:url]]
67
- end
68
- # Increment values to request the next page.
69
- offset += PAGE_SIZE
70
- selector[:paging][:start_index] = offset
71
- end
72
- end while page[:total_num_entries] > offset
73
-
74
- if page.include?(:total_num_entries)
75
- puts "\tCampaign ID %d has %d placements." %
76
- [campaign_id, page[:total_num_entries]]
77
- end
78
- end
79
-
80
- if __FILE__ == $0
81
- API_VERSION = :v201109_1
82
- PAGE_SIZE = 500
83
-
84
- begin
85
- # Specify campaign ID to get targeting for.
86
- campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
87
- get_campaign_targeting_criteria(campaign_id)
88
-
89
- # HTTP errors.
90
- rescue AdsCommon::Errors::HttpError => e
91
- puts "HTTP Error: %s" % e
92
-
93
- # API errors.
94
- rescue AdwordsApi::Errors::ApiException => e
95
- puts "Message: %s" % e.message
96
- puts 'Errors:'
97
- e.errors.each_with_index do |error, index|
98
- puts "\tError [%d]:" % (index + 1)
99
- error.each do |field, value|
100
- puts "\t\t%s: %s" % [field, value]
101
- end
102
- end
103
- end
104
- end
@@ -1,82 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Encoding: utf-8
3
- #
4
- # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
- #
6
- # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
7
- #
8
- # License:: Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # http://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
17
- # implied.
18
- # See the License for the specific language governing permissions and
19
- # limitations under the License.
20
- #
21
- # This example illustrates how to retrieve all languages and carriers available
22
- # for targeting.
23
- #
24
- # Tags: ConstantDataService.getLanguageCriterion
25
- # Tags: ConstantDataService.getCarrierCriterion
26
-
27
- require 'adwords_api'
28
-
29
- def get_targetable_languages_and_carriers()
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
- constant_data_srv = adwords.service(:ConstantDataService, API_VERSION)
39
-
40
- # Get all languages from ConstantDataService.
41
- languages = constant_data_srv.get_language_criterion()
42
-
43
- if languages
44
- languages.each do |language|
45
- puts "Language name is '%s', ID is %d and code is '%s'." %
46
- [language[:name], language[:id], language[:code]]
47
- end
48
- else
49
- puts 'No languages were found.'
50
- end
51
-
52
- # Get all carriers from ConstantDataService.
53
- carriers = constant_data_srv.get_carrier_criterion()
54
-
55
- carriers.each do |carrier|
56
- puts "Carrier name is '%s', ID is %d and country code is '%s'." %
57
- [carrier[:name], carrier[:id], carrier[:country_code]]
58
- end
59
- end
60
-
61
- if __FILE__ == $0
62
- API_VERSION = :v201109_1
63
-
64
- begin
65
- get_targetable_languages_and_carriers()
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,103 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Encoding: utf-8
3
- #
4
- # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
- #
6
- # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
7
- #
8
- # License:: Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # http://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
17
- # implied.
18
- # See the License for the specific language governing permissions and
19
- # limitations under the License.
20
- #
21
- # This example gets location criteria by name.
22
- #
23
- # Tags: LocationCriterionService.get
24
-
25
- require 'adwords_api'
26
-
27
- def lookup_location()
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
- location_criterion_srv =
37
- adwords.service(:LocationCriterionService, API_VERSION)
38
-
39
- # List of locations to look up.
40
- location_names = ['Paris', 'Quebec', 'Spain', 'Deutschland']
41
- # Locale to retrieve names in.
42
- locale = 'en'
43
-
44
- # Get the criteria by names.
45
- selector = {
46
- :fields => ['Id', 'LocationName', 'CanonicalName', 'DisplayType',
47
- 'ParentLocations', 'Reach'],
48
- :predicates => [
49
- # Location names must match exactly, only EQUALS and IN are supported.
50
- {:field => 'LocationName',
51
- :operator => 'IN',
52
- :values => location_names},
53
- # Set the locale of the returned location names.
54
- {:field => 'Locale', :operator => 'EQUALS', :values => [locale]}
55
- ]
56
- }
57
- criteria = location_criterion_srv.get(selector)
58
-
59
- if criteria
60
- criteria.each do |criterion|
61
- # Extract all parent location names as one comma-separated string.
62
- parent_location = if criterion[:location][:parent_locations] and
63
- !criterion[:location][:parent_locations].empty?
64
- locations_array = criterion[:location][:parent_locations].map do |loc|
65
- loc[:location_name]
66
- end
67
- locations_array.join(', ')
68
- else
69
- 'N/A'
70
- end
71
- puts ("The search term '%s' returned the location '%s' of type '%s' " +
72
- "with ID %d, parent locations '%s' and reach %d") %
73
- [criterion[:search_term], criterion[:location][:location_name],
74
- criterion[:location][:criterion_type], criterion[:location][:id],
75
- parent_location, criterion[:reach]]
76
- end
77
- else
78
- puts 'No criteria were returned.'
79
- end
80
- end
81
-
82
- if __FILE__ == $0
83
- API_VERSION = :v201109_1
84
-
85
- begin
86
- lookup_location()
87
-
88
- # HTTP errors.
89
- rescue AdsCommon::Errors::HttpError => e
90
- puts "HTTP Error: %s" % e
91
-
92
- # API errors.
93
- rescue AdwordsApi::Errors::ApiException => e
94
- puts "Message: %s" % e.message
95
- puts 'Errors:'
96
- e.errors.each_with_index do |error, index|
97
- puts "\tError [%d]:" % (index + 1)
98
- error.each do |field, value|
99
- puts "\t\t%s: %s" % [field, value]
100
- end
101
- end
102
- end
103
- end
@@ -1,159 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Encoding: utf-8
3
- #
4
- # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
- #
6
- # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
7
- #
8
- # License:: Licensed under the Apache License, Version 2.0 (the "License");
9
- # you may not use this file except in compliance with the License.
10
- # You may obtain a copy of the License at
11
- #
12
- # http://www.apache.org/licenses/LICENSE-2.0
13
- #
14
- # Unless required by applicable law or agreed to in writing, software
15
- # distributed under the License is distributed on an "AS IS" BASIS,
16
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
17
- # implied.
18
- # See the License for the specific language governing permissions and
19
- # limitations under the License.
20
- #
21
- # This example gets and downloads an Ad Hoc report from a XML report definition.
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 ServicedAccountService to get all IDs in hierarchy.
39
-
40
- serviced_account_srv = adwords.service(:ServicedAccountService, API_VERSION)
41
-
42
- # Get the account hierarchy for this account.
43
- selector = {:enable_paging => false}
44
-
45
- # Run the request at the MCC level.
46
- graph = adwords.use_mcc() {serviced_account_srv.get(selector)}
47
-
48
- # Using queue to balance load between threads.
49
- queue = Queue.new()
50
-
51
- if graph and graph[:accounts] and !graph[:accounts].empty?
52
- graph[:accounts].each {|account| queue << account[:customer_id]}
53
- else
54
- raise StandardError, 'Can not retrieve any customer ID'
55
- end
56
-
57
- # Get report utilities for the version.
58
- report_utils = adwords.report_utils(API_VERSION)
59
-
60
- # Define report definition. You can also pass your own XML text as a string.
61
- report_definition = {
62
- :selector => {
63
- :fields => ['CampaignId', 'Id', 'Impressions', 'Clicks', 'Cost'],
64
- # Predicates are optional.
65
- :predicates => {
66
- :field => 'Status',
67
- :operator => 'IN',
68
- :values => ['ENABLED', 'PAUSED']
69
- }
70
- },
71
- :report_name => 'Custom ADGROUP_PERFORMANCE_REPORT',
72
- :report_type => 'ADGROUP_PERFORMANCE_REPORT',
73
- :download_format => 'CSV',
74
- :date_range_type => 'LAST_7_DAYS',
75
- # Enable to get rows with zero impressions.
76
- :include_zero_impressions => false
77
- }
78
-
79
- puts "Retrieving %d reports with %d threads:" % [queue.size, THREADS]
80
-
81
- reports_succeeded = Queue.new()
82
- reports_failed = Queue.new()
83
-
84
- # Creating a mutex to control access to the queue.
85
- queue_mutex = Mutex.new
86
-
87
- # Start all the threads.
88
- threads = (1..THREADS).map do |thread_id|
89
- Thread.new(report_definition) do |local_def|
90
- cid = nil
91
- begin
92
- cid = queue_mutex.synchronize {(queue.empty?) ? nil : queue.pop(true)}
93
- if cid
94
- retry_count = 0
95
- file_name = "adgroup_%010d.csv" % cid
96
- puts "[%2d/%d] Loading report for customer ID %s into '%s'..." %
97
- [thread_id, retry_count,
98
- AdwordsApi::Utils.format_id(cid), file_name]
99
- begin
100
- report_utils.download_report_as_file(local_def, file_name, cid)
101
- reports_succeeded << {:cid => cid, :file_name => file_name}
102
- rescue AdwordsApi::Errors::ReportError => e
103
- if e.http_code == 500 && retry_count < MAX_RETRIES
104
- retry_count += 1
105
- sleep(retry_count * BACKOFF_FACTOR)
106
- retry
107
- else
108
- puts(("Report failed for customer ID %s with code %d after %d " +
109
- "retries.") % [cid, e.http_code, retry_count + 1])
110
- reports_failed <<
111
- {:cid => cid, :http_code => e.http_code, :message => e.message}
112
- end
113
- end
114
- end
115
- end while (cid != nil)
116
- end
117
- end
118
-
119
- # Wait for all threads to finish.
120
- threads.each { |aThread| aThread.join }
121
-
122
- puts 'Download completed, results:'
123
- puts 'Successful reports:'
124
- while !reports_succeeded.empty? do
125
- result = reports_succeeded.pop()
126
- puts "\tClient ID %s => '%s'" %
127
- [AdwordsApi::Utils.format_id(result[:cid]), result[:file_name]]
128
- end
129
- puts 'Failed reports:'
130
- while !reports_failed.empty? do
131
- result = reports_failed.pop()
132
- puts "\tClient ID %s => Code: %d, Message: '%s'" %
133
- [AdwordsApi::Utils.format_id(result[:cid]),
134
- result[:http_code], result[:message]]
135
- end
136
- puts 'End of results.'
137
- end
138
-
139
- if __FILE__ == $0
140
- API_VERSION = :v201209
141
- # Number of parallel threads to spawn.
142
- THREADS = 10
143
- # Maximum number of retries for 500 errors.
144
- MAX_RETRIES = 5
145
- # Timeout between retries in seconds.
146
- BACKOFF_FACTOR = 5
147
-
148
- begin
149
- parallel_report_download()
150
-
151
- # HTTP errors.
152
- rescue AdsCommon::Errors::HttpError => e
153
- puts "HTTP Error: %s" % e
154
-
155
- # API errors.
156
- rescue AdwordsApi::Errors::ReportError => e
157
- puts "Reporting Error: %s" % e.message
158
- end
159
- end