google-adwords-api 0.15.2 → 0.16.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 (167) hide show
  1. checksums.yaml +8 -8
  2. data/ChangeLog +7 -0
  3. data/adwords_api.yml +3 -2
  4. data/examples/v201506/basic_operations/get_keywords.rb +4 -3
  5. data/examples/v201506/misc/{create_ad_words_session_without_properties_file.rb → use_runtime_config.rb} +2 -2
  6. data/lib/adwords_api.rb +1 -1
  7. data/lib/adwords_api/api_config.rb +0 -86
  8. data/lib/adwords_api/report_header_handler.rb +4 -4
  9. data/lib/adwords_api/version.rb +1 -1
  10. data/test/templates/v201502/basic_operations_get_campaigns.def +1 -1
  11. data/test/templates/v201502/{misc_use_oauth2_jwt.def → misc_use_oauth2_service_account.def} +2 -2
  12. data/test/templates/v201506/basic_operations_get_campaigns.def +1 -1
  13. data/test/templates/v201506/{misc_use_oauth2_jwt.def → misc_use_oauth2_service_account.def} +2 -2
  14. metadata +7 -160
  15. data/examples/v201409/account_management/create_account.rb +0 -92
  16. data/examples/v201409/account_management/get_account_changes.rb +0 -145
  17. data/examples/v201409/account_management/get_account_hierarchy.rb +0 -102
  18. data/examples/v201409/advanced_operations/add_ad_customizers.rb +0 -277
  19. data/examples/v201409/advanced_operations/add_ad_group_bid_modifier.rb +0 -105
  20. data/examples/v201409/advanced_operations/add_click_to_download_ad.rb +0 -137
  21. data/examples/v201409/advanced_operations/add_text_ad_with_upgraded_urls.rb +0 -137
  22. data/examples/v201409/advanced_operations/get_ad_group_bid_modifiers.rb +0 -106
  23. data/examples/v201409/advanced_operations/upload_offline_conversions.rb +0 -117
  24. data/examples/v201409/advanced_operations/use_shared_bidding_strategy.rb +0 -152
  25. data/examples/v201409/basic_operations/add_ad_groups.rb +0 -144
  26. data/examples/v201409/basic_operations/add_campaigns.rb +0 -143
  27. data/examples/v201409/basic_operations/add_keywords.rb +0 -118
  28. data/examples/v201409/basic_operations/add_text_ads.rb +0 -113
  29. data/examples/v201409/basic_operations/get_ad_groups.rb +0 -106
  30. data/examples/v201409/basic_operations/get_campaigns.rb +0 -101
  31. data/examples/v201409/basic_operations/get_campaigns_with_awql.rb +0 -93
  32. data/examples/v201409/basic_operations/get_keywords.rb +0 -112
  33. data/examples/v201409/basic_operations/get_text_ads.rb +0 -114
  34. data/examples/v201409/basic_operations/pause_ad.rb +0 -92
  35. data/examples/v201409/basic_operations/remove_ad.rb +0 -93
  36. data/examples/v201409/basic_operations/remove_ad_group.rb +0 -89
  37. data/examples/v201409/basic_operations/remove_campaign.rb +0 -91
  38. data/examples/v201409/basic_operations/remove_keyword.rb +0 -98
  39. data/examples/v201409/basic_operations/update_ad_group.rb +0 -89
  40. data/examples/v201409/basic_operations/update_campaign.rb +0 -90
  41. data/examples/v201409/basic_operations/update_keyword.rb +0 -110
  42. data/examples/v201409/campaign_management/add_campaign_labels.rb +0 -86
  43. data/examples/v201409/campaign_management/add_experiment.rb +0 -166
  44. data/examples/v201409/campaign_management/add_keywords_in_bulk.rb +0 -158
  45. data/examples/v201409/campaign_management/add_location_extension.rb +0 -125
  46. data/examples/v201409/campaign_management/get_all_disapproved_ads.rb +0 -101
  47. data/examples/v201409/campaign_management/get_all_disapproved_ads_with_awql.rb +0 -93
  48. data/examples/v201409/campaign_management/get_campaigns_by_label.rb +0 -112
  49. data/examples/v201409/campaign_management/promote_experiment.rb +0 -85
  50. data/examples/v201409/campaign_management/set_ad_parameters.rb +0 -122
  51. data/examples/v201409/campaign_management/set_criterion_bid_modifier.rb +0 -108
  52. data/examples/v201409/campaign_management/validate_text_ad.rb +0 -114
  53. data/examples/v201409/error_handling/handle_partial_failures.rb +0 -134
  54. data/examples/v201409/error_handling/handle_policy_violation_error.rb +0 -145
  55. data/examples/v201409/extensions/add_google_my_business_location_extensions.rb +0 -183
  56. data/examples/v201409/extensions/add_site_links.rb +0 -167
  57. data/examples/v201409/extensions/add_site_links_using_feeds.rb +0 -306
  58. data/examples/v201409/migration/migrate_to_extension_settings.rb +0 -392
  59. data/examples/v201409/migration/upgrade_ad_url.rb +0 -97
  60. data/examples/v201409/misc/create_ad_words_session_without_properties_file.rb +0 -94
  61. data/examples/v201409/misc/get_all_images_and_videos.rb +0 -108
  62. data/examples/v201409/misc/setup_oauth2.rb +0 -88
  63. data/examples/v201409/misc/upload_image.rb +0 -97
  64. data/examples/v201409/misc/use_oauth2_jwt.rb +0 -97
  65. data/examples/v201409/optimization/estimate_keyword_traffic.rb +0 -155
  66. data/examples/v201409/optimization/get_keyword_bid_simulations.rb +0 -100
  67. data/examples/v201409/optimization/get_keyword_ideas.rb +0 -130
  68. data/examples/v201409/remarketing/add_audience.rb +0 -122
  69. data/examples/v201409/remarketing/add_conversion_tracker.rb +0 -105
  70. data/examples/v201409/remarketing/add_rule_based_user_lists.rb +0 -171
  71. data/examples/v201409/reporting/download_criteria_report.rb +0 -87
  72. data/examples/v201409/reporting/download_criteria_report_with_awql.rb +0 -86
  73. data/examples/v201409/reporting/get_report_fields.rb +0 -79
  74. data/examples/v201409/reporting/parallel_report_download.rb +0 -171
  75. data/examples/v201409/shopping_campaigns/add_product_partition_tree.rb +0 -269
  76. data/examples/v201409/shopping_campaigns/add_product_scope.rb +0 -133
  77. data/examples/v201409/shopping_campaigns/add_shopping_campaign.rb +0 -131
  78. data/examples/v201409/shopping_campaigns/get_product_category_taxonomy.rb +0 -117
  79. data/examples/v201409/targeting/add_campaign_targeting_criteria.rb +0 -173
  80. data/examples/v201409/targeting/add_demographic_targeting_criteria.rb +0 -116
  81. data/examples/v201409/targeting/get_campaign_targeting_criteria.rb +0 -110
  82. data/examples/v201409/targeting/get_targetable_languages_and_carriers.rb +0 -94
  83. data/examples/v201409/targeting/lookup_location.rb +0 -112
  84. data/lib/adwords_api/v201409/ad_customizer_feed_service.rb +0 -38
  85. data/lib/adwords_api/v201409/ad_customizer_feed_service_registry.rb +0 -46
  86. data/lib/adwords_api/v201409/ad_group_ad_service.rb +0 -50
  87. data/lib/adwords_api/v201409/ad_group_ad_service_registry.rb +0 -46
  88. data/lib/adwords_api/v201409/ad_group_bid_modifier_service.rb +0 -42
  89. data/lib/adwords_api/v201409/ad_group_bid_modifier_service_registry.rb +0 -46
  90. data/lib/adwords_api/v201409/ad_group_criterion_service.rb +0 -46
  91. data/lib/adwords_api/v201409/ad_group_criterion_service_registry.rb +0 -46
  92. data/lib/adwords_api/v201409/ad_group_extension_setting_service.rb +0 -42
  93. data/lib/adwords_api/v201409/ad_group_extension_setting_service_registry.rb +0 -46
  94. data/lib/adwords_api/v201409/ad_group_feed_service.rb +0 -42
  95. data/lib/adwords_api/v201409/ad_group_feed_service_registry.rb +0 -46
  96. data/lib/adwords_api/v201409/ad_group_service.rb +0 -46
  97. data/lib/adwords_api/v201409/ad_group_service_registry.rb +0 -46
  98. data/lib/adwords_api/v201409/ad_param_service.rb +0 -38
  99. data/lib/adwords_api/v201409/ad_param_service_registry.rb +0 -46
  100. data/lib/adwords_api/v201409/adwords_user_list_service.rb +0 -38
  101. data/lib/adwords_api/v201409/adwords_user_list_service_registry.rb +0 -46
  102. data/lib/adwords_api/v201409/bidding_strategy_service.rb +0 -42
  103. data/lib/adwords_api/v201409/bidding_strategy_service_registry.rb +0 -46
  104. data/lib/adwords_api/v201409/budget_order_service.rb +0 -42
  105. data/lib/adwords_api/v201409/budget_order_service_registry.rb +0 -46
  106. data/lib/adwords_api/v201409/budget_service.rb +0 -42
  107. data/lib/adwords_api/v201409/budget_service_registry.rb +0 -46
  108. data/lib/adwords_api/v201409/campaign_ad_extension_service.rb +0 -38
  109. data/lib/adwords_api/v201409/campaign_ad_extension_service_registry.rb +0 -46
  110. data/lib/adwords_api/v201409/campaign_criterion_service.rb +0 -42
  111. data/lib/adwords_api/v201409/campaign_criterion_service_registry.rb +0 -46
  112. data/lib/adwords_api/v201409/campaign_extension_setting_service.rb +0 -42
  113. data/lib/adwords_api/v201409/campaign_extension_setting_service_registry.rb +0 -46
  114. data/lib/adwords_api/v201409/campaign_feed_service.rb +0 -42
  115. data/lib/adwords_api/v201409/campaign_feed_service_registry.rb +0 -46
  116. data/lib/adwords_api/v201409/campaign_service.rb +0 -46
  117. data/lib/adwords_api/v201409/campaign_service_registry.rb +0 -46
  118. data/lib/adwords_api/v201409/campaign_shared_set_service.rb +0 -38
  119. data/lib/adwords_api/v201409/campaign_shared_set_service_registry.rb +0 -47
  120. data/lib/adwords_api/v201409/constant_data_service.rb +0 -66
  121. data/lib/adwords_api/v201409/constant_data_service_registry.rb +0 -46
  122. data/lib/adwords_api/v201409/conversion_tracker_service.rb +0 -38
  123. data/lib/adwords_api/v201409/conversion_tracker_service_registry.rb +0 -46
  124. data/lib/adwords_api/v201409/customer_extension_setting_service.rb +0 -42
  125. data/lib/adwords_api/v201409/customer_extension_setting_service_registry.rb +0 -46
  126. data/lib/adwords_api/v201409/customer_feed_service.rb +0 -42
  127. data/lib/adwords_api/v201409/customer_feed_service_registry.rb +0 -46
  128. data/lib/adwords_api/v201409/customer_service.rb +0 -38
  129. data/lib/adwords_api/v201409/customer_service_registry.rb +0 -46
  130. data/lib/adwords_api/v201409/customer_sync_service.rb +0 -34
  131. data/lib/adwords_api/v201409/customer_sync_service_registry.rb +0 -47
  132. data/lib/adwords_api/v201409/data_service.rb +0 -54
  133. data/lib/adwords_api/v201409/data_service_registry.rb +0 -46
  134. data/lib/adwords_api/v201409/experiment_service.rb +0 -38
  135. data/lib/adwords_api/v201409/experiment_service_registry.rb +0 -46
  136. data/lib/adwords_api/v201409/feed_item_service.rb +0 -42
  137. data/lib/adwords_api/v201409/feed_item_service_registry.rb +0 -46
  138. data/lib/adwords_api/v201409/feed_mapping_service.rb +0 -42
  139. data/lib/adwords_api/v201409/feed_mapping_service_registry.rb +0 -46
  140. data/lib/adwords_api/v201409/feed_service.rb +0 -42
  141. data/lib/adwords_api/v201409/feed_service_registry.rb +0 -46
  142. data/lib/adwords_api/v201409/geo_location_service.rb +0 -34
  143. data/lib/adwords_api/v201409/geo_location_service_registry.rb +0 -46
  144. data/lib/adwords_api/v201409/label_service.rb +0 -42
  145. data/lib/adwords_api/v201409/label_service_registry.rb +0 -46
  146. data/lib/adwords_api/v201409/location_criterion_service.rb +0 -38
  147. data/lib/adwords_api/v201409/location_criterion_service_registry.rb +0 -46
  148. data/lib/adwords_api/v201409/managed_customer_service.rb +0 -50
  149. data/lib/adwords_api/v201409/managed_customer_service_registry.rb +0 -46
  150. data/lib/adwords_api/v201409/media_service.rb +0 -42
  151. data/lib/adwords_api/v201409/media_service_registry.rb +0 -46
  152. data/lib/adwords_api/v201409/mutate_job_service.rb +0 -42
  153. data/lib/adwords_api/v201409/mutate_job_service_registry.rb +0 -46
  154. data/lib/adwords_api/v201409/offline_conversion_feed_service.rb +0 -34
  155. data/lib/adwords_api/v201409/offline_conversion_feed_service_registry.rb +0 -46
  156. data/lib/adwords_api/v201409/report_definition_service.rb +0 -34
  157. data/lib/adwords_api/v201409/report_definition_service_registry.rb +0 -46
  158. data/lib/adwords_api/v201409/shared_criterion_service.rb +0 -38
  159. data/lib/adwords_api/v201409/shared_criterion_service_registry.rb +0 -47
  160. data/lib/adwords_api/v201409/shared_set_service.rb +0 -38
  161. data/lib/adwords_api/v201409/shared_set_service_registry.rb +0 -47
  162. data/lib/adwords_api/v201409/targeting_idea_service.rb +0 -34
  163. data/lib/adwords_api/v201409/targeting_idea_service_registry.rb +0 -46
  164. data/lib/adwords_api/v201409/traffic_estimator_service.rb +0 -34
  165. data/lib/adwords_api/v201409/traffic_estimator_service_registry.rb +0 -46
  166. data/test/templates/v201409/basic_operations_get_campaigns.def +0 -116
  167. data/test/templates/v201409/misc_use_oauth2_jwt.def +0 -131
@@ -1,92 +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 create an account. Note by default this
22
- # account will only be accessible via parent MCC.
23
- #
24
- # Tags: ManagedCustomerService.mutate
25
-
26
- require 'adwords_api'
27
- require 'adwords_api/utils'
28
-
29
- def create_account()
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
- managed_customer_srv = adwords.service(:ManagedCustomerService, API_VERSION)
39
-
40
- # Create a local Customer object.
41
- customer = {
42
- :name => 'Account created with ManagedCustomerService',
43
- :currency_code => 'EUR',
44
- :date_time_zone => 'Europe/London'
45
- }
46
-
47
- # Prepare operation to create an account.
48
- operation = {
49
- :operator => 'ADD',
50
- :operand => customer
51
- }
52
-
53
- # Create the account. It is possible to create multiple accounts with one
54
- # request by sending an array of operations.
55
- response = managed_customer_srv.mutate([operation])
56
-
57
- response[:value].each do |new_account|
58
- puts "Account with customer ID '%s' was successfully created." %
59
- AdwordsApi::Utils.format_id(new_account[:customer_id])
60
- end
61
- end
62
-
63
- if __FILE__ == $0
64
- API_VERSION = :v201409
65
-
66
- begin
67
- create_account()
68
-
69
- # Authorization error.
70
- rescue AdsCommon::Errors::OAuth2VerificationRequired => e
71
- puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
72
- "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
73
- "to retrieve and store OAuth2 tokens."
74
- puts "See this wiki page for more details:\n\n " +
75
- 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
76
-
77
- # HTTP errors.
78
- rescue AdsCommon::Errors::HttpError => e
79
- puts "HTTP Error: %s" % e
80
-
81
- # API errors.
82
- rescue AdwordsApi::Errors::ApiException => e
83
- puts "Message: %s" % e.message
84
- puts 'Errors:'
85
- e.errors.each_with_index do |error, index|
86
- puts "\tError [%d]:" % (index + 1)
87
- error.each do |field, value|
88
- puts "\t\t%s: %s" % [field, value]
89
- end
90
- end
91
- end
92
- end
@@ -1,145 +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 all account changes that happened within the last 24 hours,
22
- # for all your campaigns.
23
- #
24
- # Tags: CustomerSyncService.get
25
-
26
- require 'adwords_api'
27
- require 'date'
28
- require 'pp'
29
-
30
- def get_account_changes()
31
- # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
32
- # when called without parameters.
33
- adwords = AdwordsApi::Api.new
34
-
35
- # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
36
- # the configuration file or provide your own logger:
37
- # adwords.logger = Logger.new('adwords_xml.log')
38
-
39
- campaign_srv = adwords.service(:CampaignService, API_VERSION)
40
- customer_sync_srv = adwords.service(:CustomerSyncService, API_VERSION)
41
-
42
- today_at_midnight = DateTime.parse(Date.today.to_s)
43
- yesterday_at_midnight = DateTime.parse((Date.today - 1).to_s)
44
- min_date_time = yesterday_at_midnight.strftime("%Y%m%d %H%M%S")
45
- max_date_time = today_at_midnight.strftime("%Y%m%d %H%M%S")
46
-
47
- # Get all the campaigns for this account.
48
- selector = {
49
- :fields => ['Id']
50
- }
51
- response = campaign_srv.get(selector)
52
-
53
- campaign_ids = []
54
-
55
- if response and response[:entries]
56
- campaign_ids = response[:entries].map { |campaign| campaign[:id] }
57
- else
58
- raise StandardError, 'No campaigns were found.'
59
- end
60
-
61
- # Create a selector for CustomerSyncService.
62
- selector = {
63
- :campaign_ids => campaign_ids,
64
- :date_time_range => {
65
- :min => min_date_time,
66
- :max => max_date_time
67
- }
68
- }
69
-
70
- # Get all account changes for the campaigns.
71
- campaign_changes = customer_sync_srv.get(selector)
72
-
73
- # Display changes.
74
- if campaign_changes
75
- puts "Most recent change: %s" % campaign_changes[:last_change_timestamp]
76
- campaign_changes[:changed_campaigns].each do |campaign|
77
- puts "Campaign with ID %d was changed:" % campaign[:campaign_id]
78
- puts "\tCampaign change status: '%s'" % campaign[:campaign_change_status]
79
- unless ['NEW', 'FIELDS_UNCHANGED'].include?(
80
- campaign[:campaign_change_status])
81
- puts "\tAdded ad extensions: '%s'" %
82
- campaign[:added_ad_extensions].pretty_inspect.chomp
83
- puts "\tAdded campaign criteria: '%s'" %
84
- campaign[:added_campaign_criteria].pretty_inspect.chomp
85
- puts "\tAdded campaign targeting: '%s'" %
86
- campaign[:campaign_targeting_changed].pretty_inspect.chomp
87
- puts "\tDeleted ad extensions: '%s'" %
88
- campaign[:deleted_ad_extensions].pretty_inspect.chomp
89
- puts "\tDeleted campaign criteria: '%s'" %
90
- campaign[:deleted_campaign_criteria].pretty_inspect.chomp
91
-
92
- if campaign[:changed_ad_groups]
93
- campaign[:changed_ad_groups].each do |ad_group|
94
- puts "\tAd group with ID %d was changed:" % ad_group[:ad_group_id]
95
- puts "\t\tAd group changed status: '%s'" %
96
- ad_group[:ad_group_change_status]
97
- unless ['NEW', 'FIELDS_UNCHANGED'].include?(
98
- ad_group[:ad_group_change_status])
99
- puts "\t\tAds changed: '%s'" %
100
- ad_group[:changed_ads].pretty_inspect.chomp
101
- puts "\t\tCriteria changed: '%s'" %
102
- ad_group[:changed_criteria].pretty_inspect.chomp
103
- puts "\t\tCriteria deleted: '%s'" %
104
- ad_group[:deleted_criteria].pretty_inspect.chomp
105
- end
106
- end
107
- end
108
- end
109
- puts
110
- end
111
- else
112
- puts 'No account changes were found.'
113
- end
114
- end
115
-
116
- if __FILE__ == $0
117
- API_VERSION = :v201409
118
-
119
- begin
120
- get_account_changes()
121
-
122
- # Authorization error.
123
- rescue AdsCommon::Errors::OAuth2VerificationRequired => e
124
- puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
125
- "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
126
- "to retrieve and store OAuth2 tokens."
127
- puts "See this wiki page for more details:\n\n " +
128
- 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
129
-
130
- # HTTP errors.
131
- rescue AdsCommon::Errors::HttpError => e
132
- puts "HTTP Error: %s" % e
133
-
134
- # API errors.
135
- rescue AdwordsApi::Errors::ApiException => e
136
- puts "Message: %s" % e.message
137
- puts 'Errors:'
138
- e.errors.each_with_index do |error, index|
139
- puts "\tError [%d]:" % (index + 1)
140
- error.each do |field, value|
141
- puts "\t\t%s: %s" % [field, value]
142
- end
143
- end
144
- end
145
- end
@@ -1,102 +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 the account hierarchy under an
22
- # account.
23
- #
24
- # Note: This code example uses MCC-level calls and won't work with Test
25
- # Accounts, see: https://developers.google.com/adwords/api/docs/test-accounts
26
- #
27
- # Tags: ManagedCustomerService.get
28
-
29
- require 'adwords_api'
30
- require 'adwords_api/utils'
31
-
32
- def get_account_hierarchy()
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
- managed_customer_srv = adwords.service(:ManagedCustomerService, API_VERSION)
42
-
43
- # Get the account hierarchy for this account.
44
- selector = {
45
- :fields => ['CustomerId', 'Name']
46
- }
47
-
48
- # Run the request. Make sure the configured clientCustomerId is an MCC.
49
- graph = managed_customer_srv.get(selector)
50
-
51
- if graph and graph[:entries]
52
- puts 'Accounts under this hierarchy: %d' % graph[:total_num_entries]
53
- graph[:entries].each_with_index do |account, index|
54
- puts "%d) Customer ID: %s" %
55
- [index + 1, AdwordsApi::Utils.format_id(account[:customer_id])]
56
- puts "\tName: %s" % account[:name]
57
- end
58
-
59
- # Display the links.
60
- if graph[:links]
61
- puts 'Hierarchy links:'
62
- graph[:links].each do |link|
63
- puts "\tThere is a link from %s to %s" %
64
- [AdwordsApi::Utils.format_id(link[:manager_customer_id]),
65
- AdwordsApi::Utils.format_id(link[:client_customer_id])]
66
- end
67
- end
68
- else
69
- puts 'No accounts were found.'
70
- end
71
- end
72
-
73
- if __FILE__ == $0
74
- API_VERSION = :v201409
75
-
76
- begin
77
- get_account_hierarchy()
78
-
79
- # Authorization error.
80
- rescue AdsCommon::Errors::OAuth2VerificationRequired => e
81
- puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
82
- "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
83
- "to retrieve and store OAuth2 tokens."
84
- puts "See this wiki page for more details:\n\n " +
85
- 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
86
-
87
- # HTTP errors.
88
- rescue AdsCommon::Errors::HttpError => e
89
- puts "HTTP Error: %s" % e
90
-
91
- # API errors.
92
- rescue AdwordsApi::Errors::ApiException => e
93
- puts "Message: %s" % e.message
94
- puts 'Errors:'
95
- e.errors.each_with_index do |error, index|
96
- puts "\tError [%d]:" % (index + 1)
97
- error.each do |field, value|
98
- puts "\t\t%s: %s" % [field, value]
99
- end
100
- end
101
- end
102
- end
@@ -1,277 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Encoding: utf-8
3
- #
4
- # Author:: api.mcloonan@gmail.com (Michael Cloonan)
5
- #
6
- # Copyright:: Copyright 2015, 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 an ad customizer feed and associates it with the customer.
22
- # Then it adds an ad that uses the feed to populate dynamic data.
23
- #
24
- # Tags: CustomerFeedService.mutate, FeedItemService.mutate
25
- # Tags: FeedMappingService.mutate, FeedService.mutate
26
- # Tags: AdGroupAdService.mutate
27
-
28
- require 'adwords_api'
29
-
30
- def add_ad_customizers(ad_group_ids)
31
- # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
32
- # when called without parameters.
33
- adwords = AdwordsApi::Api.new
34
-
35
- # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
36
- # the configuration file or provide your own logger:
37
- # adwords.logger = Logger.new('adwords_xml.log')
38
-
39
- feed_srv = adwords.service(:FeedService, API_VERSION)
40
- feed_item_srv = adwords.service(:FeedItemService, API_VERSION)
41
- feed_mapping_srv = adwords.service(:FeedMappingService, API_VERSION)
42
- customer_feed_srv = adwords.service(:CustomerFeedService, API_VERSION)
43
- ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)
44
-
45
- # First, create a customizer feed. One feed per account can be used for
46
- # all ads.
47
- customizer_feed = {
48
- :name => 'CustomizerFeed',
49
- :attributes => [
50
- {:type => 'STRING', :name => 'Name'},
51
- {:type => 'STRING', :name => 'Price'},
52
- {:type => 'DATE_TIME', :name => 'Date'}
53
- ]
54
- }
55
-
56
- response = feed_srv.mutate([
57
- {:operator => 'ADD', :operand => customizer_feed}
58
- ])
59
-
60
- feed_data = {}
61
- if response and response[:value]
62
- feed = response[:value].first
63
- feed_data = {
64
- :feed_id => feed[:id],
65
- :name_id => feed[:attributes][0][:id],
66
- :price_id => feed[:attributes][1][:id],
67
- :date_id => feed[:attributes][2][:id]
68
- }
69
- puts "Feed with name '%s' and ID %d was added with:" %
70
- [feed[:name], feed[:id]]
71
- puts ("\tName attribute ID %d and price attribute ID %d " +
72
- "and date attribute ID %d.") % [
73
- feed_data[:name_id],
74
- feed_data[:price_id],
75
- feed_data[:date_id]
76
- ]
77
- else
78
- raise new StandardError, 'No feeds were added.'
79
- end
80
-
81
- # Creating feed mapping to map the fields with customizer IDs.
82
- feed_mapping = {
83
- :placeholder_type => PLACEHOLDER_AD_CUSTOMIZER,
84
- :feed_id => feed_data[:feed_id],
85
- :attribute_field_mappings => [
86
- {
87
- :feed_attribute_id => feed_data[:name_id],
88
- :field_id => PLACEHOLDER_FIELD_STRING
89
- },
90
- {
91
- :feed_attribute_id => feed_data[:price_id],
92
- :field_id => PLACEHOLDER_FIELD_PRICE
93
- },
94
- {
95
- :feed_attribute_id => feed_data[:date_id],
96
- :field_id => PLACEHOLDER_FIELD_DATE
97
- }
98
- ]
99
- }
100
-
101
- response = feed_mapping_srv.mutate([
102
- {:operator => 'ADD', :operand => feed_mapping}
103
- ])
104
- if response and response[:value]
105
- feed_mapping = response[:value].first
106
- puts ('Feed mapping with ID %d and placeholder type %d was saved for feed' +
107
- ' with ID %d.') % [
108
- feed_mapping[:feed_mapping_id],
109
- feed_mapping[:placeholder_type],
110
- feed_mapping[:feed_id]
111
- ]
112
- else
113
- raise new StandardError, 'No feed mappings were added.'
114
- end
115
-
116
- # Now adding feed items -- the values we'd like to place.
117
- items_data = [
118
- {
119
- :name => 'Mars',
120
- :price => '$1234.56',
121
- :date => '20140601 000000',
122
- :ad_group_id => ad_group_ids[0]
123
- },
124
- {
125
- :name => 'Venus',
126
- :price => '$1450.00',
127
- :date => '20140615 120000',
128
- :ad_group_id => ad_group_ids[1]
129
- }
130
- ]
131
-
132
- feed_items = items_data.map do |item|
133
- {
134
- :feed_id => feed_data[:feed_id],
135
- :attribute_values => [
136
- {
137
- :feed_attribute_id => feed_data[:name_id],
138
- :string_value => item[:name]
139
- },
140
- {
141
- :feed_attribute_id => feed_data[:price_id],
142
- :string_value => item[:price]
143
- },
144
- {
145
- :feed_attribute_id => feed_data[:date_id],
146
- :string_value => item[:date]
147
- }
148
- ],
149
- :ad_group_targeting => {
150
- :targeting_ad_group_id => item[:ad_group_id]
151
- }
152
- }
153
- end
154
-
155
- feed_items_operations = feed_items.map do |item|
156
- {:operator => 'ADD', :operand => item}
157
- end
158
-
159
- response = feed_item_srv.mutate(feed_items_operations)
160
- if response and response[:value]
161
- response[:value].each do |feed_item|
162
- puts 'Feed item with ID %d was added.' % feed_item[:feed_item_id]
163
- end
164
- else
165
- raise new StandardError, 'No feed items were added.'
166
- end
167
-
168
- # Finally, creating a customer (account-level) feed with a matching function
169
- # that determines when to use this feed. For this case we use the "IDENTITY"
170
- # matching function that is always 'true' just to associate this feed with
171
- # the customer. The targeting is done within the feed items using the
172
- # :campaign_targeting, :ad_group_targeting, or :keyword_targeting attributes.
173
- matching_function = {
174
- :operator => 'IDENTITY',
175
- :lhs_operand => [
176
- {
177
- :xsi_type => 'ConstantOperand',
178
- :type => 'BOOLEAN',
179
- :boolean_value => true
180
- }
181
- ]
182
- }
183
-
184
- customer_feed = {
185
- :feed_id => feed_data[:feed_id],
186
- :matching_function => matching_function,
187
- :placeholder_types => [PLACEHOLDER_AD_CUSTOMIZER]
188
- }
189
-
190
- response = customer_feed_srv.mutate([
191
- {:operator => 'ADD', :operand => customer_feed}
192
- ])
193
- if response and response[:value]
194
- feed = response[:value].first
195
- puts 'Customer feed with ID %d was added.' % [feed[:feed_id]]
196
- else
197
- raise new StandardError, 'No customer feeds were added.'
198
- end
199
-
200
- # All set! We can now create ads with customizations.
201
- text_ad = {
202
- :xsi_type => 'TextAd',
203
- :headline => 'Luxury Cruise to {=CustomizerFeed.Name}',
204
- :description1 => 'Only {=CustomizerFeed.Price}',
205
- :description2 => 'Offer ends in {=countdown(CustomizerFeed.Date)}!',
206
- :final_urls => ['http://www.example.com'],
207
- :display_url => 'www.example.com'
208
- }
209
-
210
- # We add the same ad to both ad groups. When they serve, they will show
211
- # different values, since they match different feed items.
212
- operations = ad_group_ids.map do |ad_group_id|
213
- {
214
- :operator => 'ADD',
215
- :operand => {
216
- :ad_group_id => ad_group_id,
217
- :ad => text_ad.dup()
218
- }
219
- }
220
- end
221
-
222
- response = ad_group_ad_srv.mutate(operations)
223
- if response and response[:value]
224
- ads = response[:value]
225
- ads.each do |ad|
226
- puts "\tCreated an ad with ID %d, type '%s' and status '%s'" %
227
- [ad[:ad][:id], ad[:ad][:ad_type], ad[:status]]
228
- end
229
- else
230
- raise StandardError, 'No ads were added.'
231
- end
232
- end
233
-
234
- if __FILE__ == $0
235
- API_VERSION = :v201409
236
-
237
- # See the Placeholder reference page for a list of all the placeholder types
238
- # and fields:
239
- # https://developers.google.com/adwords/api/docs/appendix/placeholders
240
- PLACEHOLDER_AD_CUSTOMIZER = 10
241
- PLACEHOLDER_FIELD_INTEGER = 1
242
- PLACEHOLDER_FIELD_FLOAT = 2
243
- PLACEHOLDER_FIELD_PRICE = 3
244
- PLACEHOLDER_FIELD_DATE = 4
245
- PLACEHOLDER_FIELD_STRING = 5
246
-
247
- begin
248
- ad_group_ids = [
249
- 'INSERT_AD_GROUP_ID_HERE'.to_i,
250
- 'INSERT_AD_GROUP_ID_HERE'.to_i
251
- ]
252
- add_ad_customizers(ad_group_ids)
253
-
254
- # Authorization error.
255
- rescue AdsCommon::Errors::OAuth2VerificationRequired => e
256
- puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
257
- "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
258
- "to retrieve and store OAuth2 tokens."
259
- puts "See this wiki page for more details:\n\n " +
260
- 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
261
-
262
- # HTTP errors.
263
- rescue AdsCommon::Errors::HttpError => e
264
- puts "HTTP Error: %s" % e
265
-
266
- # API errors.
267
- rescue AdwordsApi::Errors::ApiException => e
268
- puts "Message: %s" % e.message
269
- puts 'Errors:'
270
- e.errors.each_with_index do |error, index|
271
- puts "\tError [%d]:" % (index + 1)
272
- error.each do |field, value|
273
- puts "\t\t%s: %s" % [field, value]
274
- end
275
- end
276
- end
277
- end