google-adwords-api 0.15.1 → 0.15.2

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 (166) hide show
  1. checksums.yaml +8 -8
  2. data/ChangeLog +4 -0
  3. data/examples/v201502/extensions/add_google_my_business_location_extensions.rb +4 -4
  4. data/examples/v201506/account_management/create_account.rb +92 -0
  5. data/examples/v201506/account_management/get_account_changes.rb +143 -0
  6. data/examples/v201506/account_management/get_account_hierarchy.rb +98 -0
  7. data/examples/v201506/advanced_operations/add_ad_customizers.rb +189 -0
  8. data/examples/v201506/advanced_operations/add_ad_group_bid_modifier.rb +105 -0
  9. data/examples/v201506/advanced_operations/add_click_to_download_ad.rb +137 -0
  10. data/examples/v201506/advanced_operations/add_text_ad_with_upgraded_urls.rb +138 -0
  11. data/examples/v201506/advanced_operations/create_and_attach_shared_keyword_set.rb +137 -0
  12. data/examples/v201506/advanced_operations/find_and_remove_criteria_from_shared_set.rb +171 -0
  13. data/examples/v201506/advanced_operations/get_ad_group_bid_modifiers.rb +106 -0
  14. data/examples/v201506/advanced_operations/upload_offline_conversions.rb +117 -0
  15. data/examples/v201506/advanced_operations/use_shared_bidding_strategy.rb +152 -0
  16. data/examples/v201506/basic_operations/add_ad_groups.rb +144 -0
  17. data/examples/v201506/basic_operations/add_campaigns.rb +143 -0
  18. data/examples/v201506/basic_operations/add_keywords.rb +118 -0
  19. data/examples/v201506/basic_operations/add_text_ads.rb +113 -0
  20. data/examples/v201506/basic_operations/get_ad_groups.rb +106 -0
  21. data/examples/v201506/basic_operations/get_campaigns.rb +101 -0
  22. data/examples/v201506/basic_operations/get_campaigns_with_awql.rb +93 -0
  23. data/examples/v201506/basic_operations/get_keywords.rb +112 -0
  24. data/examples/v201506/basic_operations/get_text_ads.rb +114 -0
  25. data/examples/v201506/basic_operations/pause_ad.rb +92 -0
  26. data/examples/v201506/basic_operations/remove_ad.rb +93 -0
  27. data/examples/v201506/basic_operations/remove_ad_group.rb +89 -0
  28. data/examples/v201506/basic_operations/remove_campaign.rb +91 -0
  29. data/examples/v201506/basic_operations/remove_keyword.rb +98 -0
  30. data/examples/v201506/basic_operations/update_ad_group.rb +89 -0
  31. data/examples/v201506/basic_operations/update_campaign.rb +90 -0
  32. data/examples/v201506/basic_operations/update_keyword.rb +110 -0
  33. data/examples/v201506/campaign_management/add_campaign_labels.rb +86 -0
  34. data/examples/v201506/campaign_management/add_experiment.rb +166 -0
  35. data/examples/v201506/campaign_management/add_keywords_in_bulk.rb +158 -0
  36. data/examples/v201506/campaign_management/get_all_disapproved_ads.rb +101 -0
  37. data/examples/v201506/campaign_management/get_all_disapproved_ads_with_awql.rb +93 -0
  38. data/examples/v201506/campaign_management/get_campaigns_by_label.rb +112 -0
  39. data/examples/v201506/campaign_management/promote_experiment.rb +85 -0
  40. data/examples/v201506/campaign_management/set_ad_parameters.rb +122 -0
  41. data/examples/v201506/campaign_management/set_criterion_bid_modifier.rb +108 -0
  42. data/examples/v201506/campaign_management/validate_text_ad.rb +114 -0
  43. data/examples/v201506/error_handling/handle_partial_failures.rb +134 -0
  44. data/examples/v201506/error_handling/handle_policy_violation_error.rb +145 -0
  45. data/examples/v201506/extensions/add_google_my_business_location_extensions.rb +190 -0
  46. data/examples/v201506/extensions/add_site_links.rb +168 -0
  47. data/examples/v201506/extensions/add_site_links_using_feeds.rb +276 -0
  48. data/examples/v201506/migration/migrate_to_extension_settings.rb +392 -0
  49. data/examples/v201506/migration/upgrade_ad_url.rb +97 -0
  50. data/examples/v201506/misc/create_ad_words_session_without_properties_file.rb +94 -0
  51. data/examples/v201506/misc/get_all_images_and_videos.rb +108 -0
  52. data/examples/v201506/misc/setup_oauth2.rb +88 -0
  53. data/examples/v201506/misc/upload_image.rb +97 -0
  54. data/examples/v201506/misc/use_oauth2_jwt.rb +97 -0
  55. data/examples/v201506/optimization/estimate_keyword_traffic.rb +150 -0
  56. data/examples/v201506/optimization/get_keyword_bid_simulations.rb +99 -0
  57. data/examples/v201506/optimization/get_keyword_ideas.rb +130 -0
  58. data/examples/v201506/remarketing/add_audience.rb +122 -0
  59. data/examples/v201506/remarketing/add_conversion_tracker.rb +104 -0
  60. data/examples/v201506/remarketing/add_rule_based_user_lists.rb +171 -0
  61. data/examples/v201506/reporting/download_criteria_report.rb +94 -0
  62. data/examples/v201506/reporting/download_criteria_report_with_awql.rb +95 -0
  63. data/examples/v201506/reporting/get_report_fields.rb +79 -0
  64. data/examples/v201506/reporting/parallel_report_download.rb +168 -0
  65. data/examples/v201506/shopping_campaigns/add_product_partition_tree.rb +269 -0
  66. data/examples/v201506/shopping_campaigns/add_product_scope.rb +133 -0
  67. data/examples/v201506/shopping_campaigns/add_shopping_campaign.rb +133 -0
  68. data/examples/v201506/shopping_campaigns/get_product_category_taxonomy.rb +117 -0
  69. data/examples/v201506/targeting/add_campaign_targeting_criteria.rb +184 -0
  70. data/examples/v201506/targeting/add_demographic_targeting_criteria.rb +116 -0
  71. data/examples/v201506/targeting/get_campaign_targeting_criteria.rb +110 -0
  72. data/examples/v201506/targeting/get_targetable_languages_and_carriers.rb +94 -0
  73. data/examples/v201506/targeting/lookup_location.rb +112 -0
  74. data/lib/adwords_api.rb +9 -0
  75. data/lib/adwords_api/api_config.rb +90 -4
  76. data/lib/adwords_api/report_header_handler.rb +5 -0
  77. data/lib/adwords_api/v201506/account_label_service.rb +38 -0
  78. data/lib/adwords_api/v201506/account_label_service_registry.rb +46 -0
  79. data/lib/adwords_api/v201506/ad_customizer_feed_service.rb +38 -0
  80. data/lib/adwords_api/v201506/ad_customizer_feed_service_registry.rb +46 -0
  81. data/lib/adwords_api/v201506/ad_group_ad_service.rb +50 -0
  82. data/lib/adwords_api/v201506/ad_group_ad_service_registry.rb +46 -0
  83. data/lib/adwords_api/v201506/ad_group_bid_modifier_service.rb +42 -0
  84. data/lib/adwords_api/v201506/ad_group_bid_modifier_service_registry.rb +46 -0
  85. data/lib/adwords_api/v201506/ad_group_criterion_service.rb +46 -0
  86. data/lib/adwords_api/v201506/ad_group_criterion_service_registry.rb +46 -0
  87. data/lib/adwords_api/v201506/ad_group_extension_setting_service.rb +42 -0
  88. data/lib/adwords_api/v201506/ad_group_extension_setting_service_registry.rb +46 -0
  89. data/lib/adwords_api/v201506/ad_group_feed_service.rb +42 -0
  90. data/lib/adwords_api/v201506/ad_group_feed_service_registry.rb +46 -0
  91. data/lib/adwords_api/v201506/ad_group_service.rb +46 -0
  92. data/lib/adwords_api/v201506/ad_group_service_registry.rb +46 -0
  93. data/lib/adwords_api/v201506/ad_param_service.rb +38 -0
  94. data/lib/adwords_api/v201506/ad_param_service_registry.rb +46 -0
  95. data/lib/adwords_api/v201506/adwords_user_list_service.rb +38 -0
  96. data/lib/adwords_api/v201506/adwords_user_list_service_registry.rb +46 -0
  97. data/lib/adwords_api/v201506/bidding_strategy_service.rb +42 -0
  98. data/lib/adwords_api/v201506/bidding_strategy_service_registry.rb +46 -0
  99. data/lib/adwords_api/v201506/budget_order_service.rb +42 -0
  100. data/lib/adwords_api/v201506/budget_order_service_registry.rb +46 -0
  101. data/lib/adwords_api/v201506/budget_service.rb +42 -0
  102. data/lib/adwords_api/v201506/budget_service_registry.rb +46 -0
  103. data/lib/adwords_api/v201506/campaign_criterion_service.rb +42 -0
  104. data/lib/adwords_api/v201506/campaign_criterion_service_registry.rb +46 -0
  105. data/lib/adwords_api/v201506/campaign_extension_setting_service.rb +42 -0
  106. data/lib/adwords_api/v201506/campaign_extension_setting_service_registry.rb +46 -0
  107. data/lib/adwords_api/v201506/campaign_feed_service.rb +42 -0
  108. data/lib/adwords_api/v201506/campaign_feed_service_registry.rb +46 -0
  109. data/lib/adwords_api/v201506/campaign_service.rb +46 -0
  110. data/lib/adwords_api/v201506/campaign_service_registry.rb +46 -0
  111. data/lib/adwords_api/v201506/campaign_shared_set_service.rb +42 -0
  112. data/lib/adwords_api/v201506/campaign_shared_set_service_registry.rb +46 -0
  113. data/lib/adwords_api/v201506/constant_data_service.rb +66 -0
  114. data/lib/adwords_api/v201506/constant_data_service_registry.rb +46 -0
  115. data/lib/adwords_api/v201506/conversion_tracker_service.rb +42 -0
  116. data/lib/adwords_api/v201506/conversion_tracker_service_registry.rb +46 -0
  117. data/lib/adwords_api/v201506/customer_extension_setting_service.rb +42 -0
  118. data/lib/adwords_api/v201506/customer_extension_setting_service_registry.rb +46 -0
  119. data/lib/adwords_api/v201506/customer_feed_service.rb +42 -0
  120. data/lib/adwords_api/v201506/customer_feed_service_registry.rb +46 -0
  121. data/lib/adwords_api/v201506/customer_service.rb +38 -0
  122. data/lib/adwords_api/v201506/customer_service_registry.rb +46 -0
  123. data/lib/adwords_api/v201506/customer_sync_service.rb +34 -0
  124. data/lib/adwords_api/v201506/customer_sync_service_registry.rb +47 -0
  125. data/lib/adwords_api/v201506/data_service.rb +54 -0
  126. data/lib/adwords_api/v201506/data_service_registry.rb +46 -0
  127. data/lib/adwords_api/v201506/experiment_service.rb +38 -0
  128. data/lib/adwords_api/v201506/experiment_service_registry.rb +46 -0
  129. data/lib/adwords_api/v201506/feed_item_service.rb +42 -0
  130. data/lib/adwords_api/v201506/feed_item_service_registry.rb +46 -0
  131. data/lib/adwords_api/v201506/feed_mapping_service.rb +42 -0
  132. data/lib/adwords_api/v201506/feed_mapping_service_registry.rb +46 -0
  133. data/lib/adwords_api/v201506/feed_service.rb +42 -0
  134. data/lib/adwords_api/v201506/feed_service_registry.rb +46 -0
  135. data/lib/adwords_api/v201506/geo_location_service.rb +34 -0
  136. data/lib/adwords_api/v201506/geo_location_service_registry.rb +46 -0
  137. data/lib/adwords_api/v201506/label_service.rb +42 -0
  138. data/lib/adwords_api/v201506/label_service_registry.rb +46 -0
  139. data/lib/adwords_api/v201506/location_criterion_service.rb +38 -0
  140. data/lib/adwords_api/v201506/location_criterion_service_registry.rb +46 -0
  141. data/lib/adwords_api/v201506/managed_customer_service.rb +54 -0
  142. data/lib/adwords_api/v201506/managed_customer_service_registry.rb +46 -0
  143. data/lib/adwords_api/v201506/media_service.rb +42 -0
  144. data/lib/adwords_api/v201506/media_service_registry.rb +46 -0
  145. data/lib/adwords_api/v201506/mutate_job_service.rb +42 -0
  146. data/lib/adwords_api/v201506/mutate_job_service_registry.rb +46 -0
  147. data/lib/adwords_api/v201506/offline_conversion_feed_service.rb +34 -0
  148. data/lib/adwords_api/v201506/offline_conversion_feed_service_registry.rb +46 -0
  149. data/lib/adwords_api/v201506/report_definition_service.rb +34 -0
  150. data/lib/adwords_api/v201506/report_definition_service_registry.rb +46 -0
  151. data/lib/adwords_api/v201506/shared_criterion_service.rb +42 -0
  152. data/lib/adwords_api/v201506/shared_criterion_service_registry.rb +46 -0
  153. data/lib/adwords_api/v201506/shared_set_service.rb +42 -0
  154. data/lib/adwords_api/v201506/shared_set_service_registry.rb +46 -0
  155. data/lib/adwords_api/v201506/targeting_idea_service.rb +34 -0
  156. data/lib/adwords_api/v201506/targeting_idea_service_registry.rb +46 -0
  157. data/lib/adwords_api/v201506/traffic_estimator_service.rb +34 -0
  158. data/lib/adwords_api/v201506/traffic_estimator_service_registry.rb +46 -0
  159. data/lib/adwords_api/version.rb +1 -1
  160. data/test/adwords_api/test_adwords_api.rb +1 -1
  161. data/test/adwords_api/test_api_config.rb +8 -8
  162. data/test/adwords_api/test_choices.rb +2 -2
  163. data/test/adwords_api/test_report_utils.rb +1 -1
  164. data/test/templates/v201506/basic_operations_get_campaigns.def +116 -0
  165. data/test/templates/v201506/misc_use_oauth2_jwt.def +131 -0
  166. metadata +156 -2
@@ -0,0 +1,133 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.mcloonan@gmail.com (Michael Cloonan)
5
+ #
6
+ # Copyright:: Copyright 2014, 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 restricts the products that will be included in the campaign by
22
+ # setting a ProductScope.
23
+ #
24
+ # Tags: CampaignCriterionService.mutate
25
+
26
+ require 'adwords_api'
27
+
28
+ def add_product_scope(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 = adwords.service(:CampaignCriterionService,
38
+ API_VERSION)
39
+
40
+ product_scope = {
41
+ # This set of dimensions is for demonstration purposes only. It is
42
+ # extremely unlikely that you want to include so many dimensions in your
43
+ # product scope.
44
+ :dimensions => [
45
+ {
46
+ :xsi_type => 'ProductBrand',
47
+ :value => 'Nexus'
48
+ },
49
+ {
50
+ :xsi_type => 'ProductCanonicalCondition',
51
+ :value => 'NEW'
52
+ },
53
+ {
54
+ :xsi_type => 'ProductCustomAttribute',
55
+ :type => 'CUSTOM_ATTRIBUTE_0',
56
+ :value => 'my attribute value'
57
+ },
58
+ {
59
+ :xsi_type => 'ProductOfferId',
60
+ :value => 'book1'
61
+ },
62
+ {
63
+ :xsi_type => 'ProductType',
64
+ :type => 'PRODUCT_TYPE_L1',
65
+ :value => 'Media'
66
+ },
67
+ {
68
+ :xsi_type => 'ProductType',
69
+ :type => 'PRODUCT_TYPE_L2',
70
+ :value => 'Books'
71
+ },
72
+ # The value for the bidding category is a fixed ID for the
73
+ # 'Luggage & Bags' category. You can retrieve IDs for categories from
74
+ # the ConstantDataService. See the 'get_product_category_taxonomy'
75
+ # example for more details.
76
+ {
77
+ :xsi_type => 'ProductBiddingCategory',
78
+ :type => 'BIDDING_CATEGORY_L1',
79
+ :value => '-5914235892932915235',
80
+ }
81
+ ]
82
+ }
83
+
84
+ campaign_criterion = {
85
+ :campaign_id => campaign_id,
86
+ :product_scope => product_scope
87
+ }
88
+
89
+ campaign_criterion_operation = {
90
+ :operator => 'ADD',
91
+ :operand => campaign_criterion
92
+ }
93
+
94
+ # Make the mutate request.
95
+ result = campaign_criterion_srv.mutate([campaign_criterion_operation])
96
+
97
+ campaign_criterion = result[:value].first
98
+ puts "Created a ProductScope criterion with ID %d." %
99
+ [campaign_criterion[:criterion][:id]]
100
+ end
101
+
102
+ if __FILE__ == $0
103
+ API_VERSION = :v201506
104
+
105
+ begin
106
+ campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
107
+
108
+ add_product_scope(campaign_id)
109
+
110
+ # Authorization error.
111
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
112
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
113
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
114
+ "to retrieve and store OAuth2 tokens."
115
+ puts "See this wiki page for more details:\n\n " +
116
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
117
+
118
+ # HTTP errors.
119
+ rescue AdsCommon::Errors::HttpError => e
120
+ puts "HTTP Error: %s" % e
121
+
122
+ # API errors.
123
+ rescue AdwordsApi::Errors::ApiException => e
124
+ puts "Message: %s" % e.message
125
+ puts 'Errors:'
126
+ e.errors.each_with_index do |error, index|
127
+ puts "\tError [%d]:" % (index + 1)
128
+ error.each do |field, value|
129
+ puts "\t\t%s: %s" % [field, value]
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,133 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.mcloonan@gmail.com (Michael Cloonan)
5
+ #
6
+ # Copyright:: Copyright 2014, 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 a Shopping campaign.
22
+ #
23
+ # Tags: CampaignService.mutate, AdGroupService.mutate, AdGroupAdService.mutate
24
+
25
+ require 'adwords_api'
26
+ require 'date'
27
+
28
+ def add_shopping_campaign(budget_id, merchant_id)
29
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
30
+ # when called without parameters.
31
+ adwords = AdwordsApi::Api.new
32
+
33
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
34
+ # the configuration file or provide your own logger:
35
+ # adwords.logger = Logger.new('adwords_xml.log')
36
+
37
+ campaign_srv = adwords.service(:CampaignService, API_VERSION)
38
+ ad_group_srv = adwords.service(:AdGroupService, API_VERSION)
39
+ ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)
40
+
41
+ # Create campaign.
42
+ campaign = {
43
+ :name => "Shopping campaign #%d" % (Time.new.to_f * 1000).to_i,
44
+ # The advertising_channel_type is what makes this a Shopping campaign.
45
+ :advertising_channel_type => 'SHOPPING',
46
+ :budget => {:budget_id => budget_id},
47
+ :bidding_strategy_configuration => {
48
+ :bidding_strategy_type => 'MANUAL_CPC'
49
+ },
50
+ :settings => [
51
+ {
52
+ :xsi_type => 'ShoppingSetting',
53
+ :sales_country => 'US',
54
+ :campaign_priority => 0,
55
+ :merchant_id => merchant_id,
56
+ # Set to "true" to enable Local Inventory Ads in your campaign.
57
+ :enable_local => true
58
+ }
59
+ ]
60
+ }
61
+ campaign_operation = {:operator => 'ADD', :operand => campaign}
62
+
63
+ # Make the mutate request.
64
+ result = campaign_srv.mutate([campaign_operation])
65
+
66
+ # Print the result.
67
+ campaign = result[:value].first
68
+ puts "Campaign with name '%s' and ID %d was added." %
69
+ [campaign[:name], campaign[:id]]
70
+
71
+ # Create ad group.
72
+ ad_group = {
73
+ :campaign_id => campaign[:id],
74
+ :name => 'Ad Group #%d' % (Time.new.to_f * 1000).to_i
75
+ }
76
+ ad_group_operation = {:operator => 'ADD', :operand => ad_group}
77
+
78
+ # Make the mutate request.
79
+ result = ad_group_srv.mutate([ad_group_operation])
80
+
81
+ # Print the result.
82
+ ad_group = result[:value].first
83
+ puts "Ad group with name '%s' and ID %d was added." %
84
+ [ad_group[:name], ad_group[:id]]
85
+
86
+ # Create product ad.
87
+ ad_group_ad = {
88
+ :ad_group_id => ad_group[:id],
89
+ :ad => {:xsi_type => 'ProductAd'}
90
+ }
91
+ ad_group_operation = {:operator => 'ADD', :operand => ad_group_ad}
92
+
93
+ # Make the mutate request.
94
+ result = ad_group_ad_srv.mutate([ad_group_operation])
95
+
96
+ # Print the result.
97
+ ad_group_ad = result[:value].first
98
+ puts "Product ad with ID %d was added." % [ad_group_ad[:id]]
99
+ end
100
+
101
+ if __FILE__ == $0
102
+ API_VERSION = :v201506
103
+
104
+ begin
105
+ budget_id = 'INSERT_BUDGET_ID_HERE'.to_i
106
+ merchant_id = 'INSERT_MERCHANT_ID_HERE'.to_i
107
+
108
+ add_shopping_campaign(budget_id, merchant_id)
109
+
110
+ # Authorization error.
111
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
112
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
113
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
114
+ "to retrieve and store OAuth2 tokens."
115
+ puts "See this wiki page for more details:\n\n " +
116
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
117
+
118
+ # HTTP errors.
119
+ rescue AdsCommon::Errors::HttpError => e
120
+ puts "HTTP Error: %s" % e
121
+
122
+ # API errors.
123
+ rescue AdwordsApi::Errors::ApiException => e
124
+ puts "Message: %s" % e.message
125
+ puts 'Errors:'
126
+ e.errors.each_with_index do |error, index|
127
+ puts "\tError [%d]:" % (index + 1)
128
+ error.each do |field, value|
129
+ puts "\t\t%s: %s" % [field, value]
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.mcloonan@gmail.com (Michael Cloonan)
5
+ #
6
+ # Copyright:: Copyright 2014, 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 fetches the set of valid ProductBiddingCategories.
22
+ #
23
+ # Tags: ConstantDataService.getProductBiddingCategoryData
24
+
25
+ require 'adwords_api'
26
+
27
+ def display_categories(categories, prefix='')
28
+ categories.each do |category|
29
+ puts "%s%s [%s]" % [prefix, category[:name], category[:id]]
30
+ if category[:children]
31
+ display_categories(category[:children],
32
+ "%s%s > " % [prefix, category[:name]])
33
+ end
34
+ end
35
+ end
36
+
37
+ def get_product_category_taxonomy()
38
+ # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
39
+ # when called without parameters.
40
+ adwords = AdwordsApi::Api.new
41
+
42
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
43
+ # the configuration file or provide your own logger:
44
+ # adwords.logger = Logger.new('adwords_xml.log')
45
+
46
+ constant_data_srv = adwords.service(:ConstantDataService, API_VERSION)
47
+
48
+ selector = {
49
+ :predicates => {:field => 'Country', :operator => 'IN', :values => ['US']}
50
+ }
51
+
52
+ results = constant_data_srv.get_product_bidding_category_data(selector)
53
+
54
+ bidding_categories = {}
55
+ root_categories = []
56
+
57
+ result[:value].each do |product_bidding_category|
58
+ id = product_bidding_category[:dimension_value][:value]
59
+ parent_id = nil
60
+ name = product_bidding_category[:display_value].first[:value]
61
+
62
+ if product_bidding_category[:parent_dimension_value]
63
+ parent_id = product_bidding_category[:parent_dimension_value][:value]
64
+ end
65
+
66
+ bidding_categories[id] ||= {}
67
+
68
+ category = bidding_categories[id]
69
+
70
+ if parent_id
71
+ bidding_categories[parent_id] ||= {}
72
+
73
+ parent = bidding_categories[parent_id]
74
+
75
+ parent[:children] ||= []
76
+ parent[:children] << category
77
+ else
78
+ root_categories << category
79
+ end
80
+
81
+ category[:id] = id
82
+ category[:name] = name
83
+ end
84
+
85
+ display_categories(root_categories)
86
+ end
87
+
88
+ if __FILE__ == $0
89
+ API_VERSION = :v201506
90
+
91
+ begin
92
+ get_product_category_taxonomy()
93
+
94
+ # Authorization error.
95
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
96
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
97
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
98
+ "to retrieve and store OAuth2 tokens."
99
+ puts "See this wiki page for more details:\n\n " +
100
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
101
+
102
+ # HTTP errors.
103
+ rescue AdsCommon::Errors::HttpError => e
104
+ puts "HTTP Error: %s" % e
105
+
106
+ # API errors.
107
+ rescue AdwordsApi::Errors::ApiException => e
108
+ puts "Message: %s" % e.message
109
+ puts 'Errors:'
110
+ e.errors.each_with_index do |error, index|
111
+ puts "\tError [%d]:" % (index + 1)
112
+ error.each do |field, value|
113
+ puts "\t\t%s: %s" % [field, value]
114
+ end
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,184 @@
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, location_feed_id = nil)
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
+ # Location Groups criteria. These represent targeting by household income
51
+ # or places of interest. The IDs can be found in the documentation or
52
+ # retrieved with the LocationCriterionService.
53
+ {
54
+ :xsi_type => 'LocationGroups',
55
+ :matching_function => {
56
+ :operator => 'AND',
57
+ :lhs_operand => [{
58
+ :xsi_type => 'IncomeOperand',
59
+ # Tiers are numbered 1-10, and represent 10% segments of earners.
60
+ # For example, TIER_1 is the top 10%, TIER_2 is the 80-90%, etc.
61
+ # Tiers 6 through 10 are grouped into TIER_6_TO_10.
62
+ :tier => 'TIER_3'
63
+ }],
64
+ :rhs_operand => [{
65
+ :xsi_type => 'GeoTargetOperand',
66
+ :locations => [1015116] # Miami, FL
67
+ }]
68
+ }
69
+ },
70
+ {
71
+ :xsi_type => 'LocationGroups',
72
+ :matching_function => {
73
+ :operator => 'AND',
74
+ :lhs_operand => [{
75
+ :xsi_type => 'PlacesOfInterestOperand',
76
+ :category => 'DOWNTOWN' # Other valid options: AIRPORT, UNIVERSITY.
77
+ }],
78
+ :rhs_operand => [{
79
+ :xsi_type => 'GeoTargetOperand',
80
+ :locations => [1015116] # Miami, FL
81
+ }]
82
+ }
83
+ }
84
+ ]
85
+
86
+ # Distance targeting. Area of 10 miles around targets above.
87
+ unless location_feed_id.nil?
88
+ campaign_criteria << {
89
+ :xsi_type => 'LocationGroups',
90
+ :feed_id => location_feed_id,
91
+ :matching_function => {
92
+ :operator => 'IDENTITY',
93
+ :lhs_operand => [{
94
+ :xsi_type => 'LocationExtensionOperand',
95
+ :radius => {
96
+ :xsi_type => 'ConstantOperand',
97
+ :type => 'DOUBLE',
98
+ :unit => 'MILES',
99
+ :double_value => 10
100
+ }
101
+ }]
102
+ }
103
+ }
104
+ end
105
+
106
+ # Create operations.
107
+ operations = campaign_criteria.map do |criterion|
108
+ {:operator => 'ADD',
109
+ :operand => {
110
+ :campaign_id => campaign_id,
111
+ :criterion => criterion}
112
+ }
113
+ end
114
+
115
+ # Add negative campaign criterion.
116
+ operations << {
117
+ :operator => 'ADD',
118
+ :operand => {
119
+ # The 'xsi_type' field allows you to specify the xsi:type of the object
120
+ # being created. It's only necessary when you must provide an explicit
121
+ # type that the client library can't infer.
122
+ :xsi_type => 'NegativeCampaignCriterion',
123
+ :campaign_id => campaign_id,
124
+ :criterion => {
125
+ :xsi_type => 'Keyword',
126
+ :text => 'jupiter cruise',
127
+ :match_type => 'BROAD'
128
+ }
129
+ }
130
+ }
131
+
132
+ response = campaign_criterion_srv.mutate(operations)
133
+
134
+ if response and response[:value]
135
+ criteria = response[:value]
136
+ criteria.each do |campaign_criterion|
137
+ criterion = campaign_criterion[:criterion]
138
+ puts ("Campaign criterion with campaign ID %d, criterion ID %d and " +
139
+ "type '%s' was added.") % [campaign_criterion[:campaign_id],
140
+ criterion[:id], criterion[:criterion_type]]
141
+ end
142
+ else
143
+ puts 'No criteria were returned.'
144
+ end
145
+ end
146
+
147
+ if __FILE__ == $0
148
+ API_VERSION = :v201506
149
+
150
+ begin
151
+ campaign_id = 'INSERT_CAMPAIGN_ID_HERE'
152
+ # Replace the value below with the ID a feed that has been configured for
153
+ # location targeting, meaning it has an ENABLED FeedMapping with
154
+ # criterionType of 77. Feeds linked to a GMB account automatically
155
+ # have this FeedMapping.
156
+ # If you don't have such a feed, set this value to nil or delete
157
+ # the variable.
158
+ location_feed_id = 'INSERT_LOCATION_FEED_ID_HERE'
159
+ add_campaign_targeting_criteria(campaign_id, location_feed_id)
160
+
161
+ # Authorization error.
162
+ rescue AdsCommon::Errors::OAuth2VerificationRequired => e
163
+ puts "Authorization credentials are not valid. Edit adwords_api.yml for " +
164
+ "OAuth2 client ID and secret and run misc/setup_oauth2.rb example " +
165
+ "to retrieve and store OAuth2 tokens."
166
+ puts "See this wiki page for more details:\n\n " +
167
+ 'http://code.google.com/p/google-api-ads-ruby/wiki/OAuth2'
168
+
169
+ # HTTP errors.
170
+ rescue AdsCommon::Errors::HttpError => e
171
+ puts "HTTP Error: %s" % e
172
+
173
+ # API errors.
174
+ rescue AdwordsApi::Errors::ApiException => e
175
+ puts "Message: %s" % e.message
176
+ puts 'Errors:'
177
+ e.errors.each_with_index do |error, index|
178
+ puts "\tError [%d]:" % (index + 1)
179
+ error.each do |field, value|
180
+ puts "\t\t%s: %s" % [field, value]
181
+ end
182
+ end
183
+ end
184
+ end