google-adwords-api 0.8.1 → 0.8.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 (149) hide show
  1. data/ChangeLog +3 -0
  2. data/examples/v201206/campaign_management/add_keywords_in_bulk.rb +1 -1
  3. data/examples/v201209/campaign_management/add_keywords_in_bulk.rb +1 -1
  4. data/examples/v201302/account_management/create_account.rb +87 -0
  5. data/examples/v201302/account_management/get_account_alerts.rb +114 -0
  6. data/examples/v201302/account_management/get_account_changes.rb +137 -0
  7. data/examples/v201302/account_management/get_account_hierarchy.rb +95 -0
  8. data/examples/v201302/advanced_operations/add_click_to_download_ad.rb +129 -0
  9. data/examples/v201302/advanced_operations/add_site_links.rb +213 -0
  10. data/examples/v201302/basic_operations/add_ad_groups.rb +135 -0
  11. data/examples/v201302/basic_operations/add_campaigns.rb +154 -0
  12. data/examples/v201302/basic_operations/add_keywords.rb +108 -0
  13. data/examples/v201302/basic_operations/add_text_ads.rb +105 -0
  14. data/examples/v201302/basic_operations/delete_ad.rb +85 -0
  15. data/examples/v201302/basic_operations/delete_ad_group.rb +102 -0
  16. data/examples/v201302/basic_operations/delete_campaign.rb +103 -0
  17. data/examples/v201302/basic_operations/delete_keyword.rb +90 -0
  18. data/examples/v201302/basic_operations/get_ad_groups.rb +98 -0
  19. data/examples/v201302/basic_operations/get_campaigns.rb +93 -0
  20. data/examples/v201302/basic_operations/get_campaigns_with_awql.rb +85 -0
  21. data/examples/v201302/basic_operations/get_keywords.rb +104 -0
  22. data/examples/v201302/basic_operations/get_text_ads.rb +106 -0
  23. data/examples/v201302/basic_operations/pause_ad.rb +84 -0
  24. data/examples/v201302/basic_operations/update_ad_group.rb +81 -0
  25. data/examples/v201302/basic_operations/update_campaign.rb +82 -0
  26. data/examples/v201302/basic_operations/update_keyword.rb +102 -0
  27. data/examples/v201302/campaign_management/add_experiment.rb +158 -0
  28. data/examples/v201302/campaign_management/add_keywords_in_bulk.rb +150 -0
  29. data/examples/v201302/campaign_management/add_location_extension.rb +117 -0
  30. data/examples/v201302/campaign_management/add_location_extension_override.rb +83 -0
  31. data/examples/v201302/campaign_management/get_all_disapproved_ads.rb +93 -0
  32. data/examples/v201302/campaign_management/get_all_disapproved_ads_with_awql.rb +84 -0
  33. data/examples/v201302/campaign_management/promote_experiment.rb +77 -0
  34. data/examples/v201302/campaign_management/set_ad_parameters.rb +114 -0
  35. data/examples/v201302/campaign_management/set_campaign_enhanced.rb +83 -0
  36. data/examples/v201302/campaign_management/set_criterion_bid_modifier.rb +102 -0
  37. data/examples/v201302/campaign_management/validate_text_ad.rb +106 -0
  38. data/examples/v201302/error_handling/handle_captcha_challenge.rb +93 -0
  39. data/examples/v201302/error_handling/handle_partial_failures.rb +126 -0
  40. data/examples/v201302/error_handling/handle_policy_violation_error.rb +137 -0
  41. data/examples/v201302/error_handling/handle_two_factor_authorization_error.rb +88 -0
  42. data/examples/v201302/misc/get_all_images_and_videos.rb +100 -0
  43. data/examples/v201302/misc/upload_image.rb +89 -0
  44. data/examples/v201302/misc/use_oauth2.rb +97 -0
  45. data/examples/v201302/misc/use_oauth2_jwt.rb +93 -0
  46. data/examples/v201302/optimization/estimate_keyword_traffic.rb +129 -0
  47. data/examples/v201302/optimization/get_keyword_bid_simulations.rb +92 -0
  48. data/examples/v201302/optimization/get_keyword_ideas.rb +122 -0
  49. data/examples/v201302/optimization/get_placement_ideas.rb +104 -0
  50. data/examples/v201302/remarketing/add_audience.rb +115 -0
  51. data/examples/v201302/remarketing/add_conversion_tracker.rb +96 -0
  52. data/examples/v201302/reporting/download_criteria_report.rb +79 -0
  53. data/examples/v201302/reporting/download_criteria_report_with_awql.rb +78 -0
  54. data/examples/v201302/reporting/get_campaign_stats.rb +105 -0
  55. data/examples/v201302/reporting/get_report_fields.rb +71 -0
  56. data/examples/v201302/reporting/parallel_report_download.rb +163 -0
  57. data/examples/v201302/targeting/add_campaign_targeting_criteria.rb +115 -0
  58. data/examples/v201302/targeting/add_demographic_targeting_criteria.rb +108 -0
  59. data/examples/v201302/targeting/get_campaign_targeting_criteria.rb +102 -0
  60. data/examples/v201302/targeting/get_targetable_languages_and_carriers.rb +86 -0
  61. data/examples/v201302/targeting/lookup_location.rb +104 -0
  62. data/lib/adwords_api/api_config.rb +74 -4
  63. data/lib/adwords_api/v201302/ad_extension_override_service.rb +38 -0
  64. data/lib/adwords_api/v201302/ad_extension_override_service_registry.rb +46 -0
  65. data/lib/adwords_api/v201302/ad_group_ad_service.rb +42 -0
  66. data/lib/adwords_api/v201302/ad_group_ad_service_registry.rb +46 -0
  67. data/lib/adwords_api/v201302/ad_group_criterion_service.rb +42 -0
  68. data/lib/adwords_api/v201302/ad_group_criterion_service_registry.rb +46 -0
  69. data/lib/adwords_api/v201302/ad_group_feed_service.rb +38 -0
  70. data/lib/adwords_api/v201302/ad_group_feed_service_registry.rb +47 -0
  71. data/lib/adwords_api/v201302/ad_group_service.rb +42 -0
  72. data/lib/adwords_api/v201302/ad_group_service_registry.rb +46 -0
  73. data/lib/adwords_api/v201302/ad_param_service.rb +38 -0
  74. data/lib/adwords_api/v201302/ad_param_service_registry.rb +46 -0
  75. data/lib/adwords_api/v201302/alert_service.rb +34 -0
  76. data/lib/adwords_api/v201302/alert_service_registry.rb +46 -0
  77. data/lib/adwords_api/v201302/budget_order_service.rb +42 -0
  78. data/lib/adwords_api/v201302/budget_order_service_registry.rb +46 -0
  79. data/lib/adwords_api/v201302/budget_service.rb +38 -0
  80. data/lib/adwords_api/v201302/budget_service_registry.rb +46 -0
  81. data/lib/adwords_api/v201302/campaign_ad_extension_service.rb +38 -0
  82. data/lib/adwords_api/v201302/campaign_ad_extension_service_registry.rb +46 -0
  83. data/lib/adwords_api/v201302/campaign_criterion_service.rb +42 -0
  84. data/lib/adwords_api/v201302/campaign_criterion_service_registry.rb +46 -0
  85. data/lib/adwords_api/v201302/campaign_feed_service.rb +38 -0
  86. data/lib/adwords_api/v201302/campaign_feed_service_registry.rb +46 -0
  87. data/lib/adwords_api/v201302/campaign_service.rb +42 -0
  88. data/lib/adwords_api/v201302/campaign_service_registry.rb +46 -0
  89. data/lib/adwords_api/v201302/campaign_shared_set_service.rb +38 -0
  90. data/lib/adwords_api/v201302/campaign_shared_set_service_registry.rb +47 -0
  91. data/lib/adwords_api/v201302/constant_data_service.rb +62 -0
  92. data/lib/adwords_api/v201302/constant_data_service_registry.rb +46 -0
  93. data/lib/adwords_api/v201302/conversion_tracker_service.rb +38 -0
  94. data/lib/adwords_api/v201302/conversion_tracker_service_registry.rb +46 -0
  95. data/lib/adwords_api/v201302/customer_service.rb +34 -0
  96. data/lib/adwords_api/v201302/customer_service_registry.rb +46 -0
  97. data/lib/adwords_api/v201302/customer_sync_service.rb +34 -0
  98. data/lib/adwords_api/v201302/customer_sync_service_registry.rb +47 -0
  99. data/lib/adwords_api/v201302/data_service.rb +38 -0
  100. data/lib/adwords_api/v201302/data_service_registry.rb +46 -0
  101. data/lib/adwords_api/v201302/experiment_service.rb +38 -0
  102. data/lib/adwords_api/v201302/experiment_service_registry.rb +46 -0
  103. data/lib/adwords_api/v201302/feed_item_service.rb +38 -0
  104. data/lib/adwords_api/v201302/feed_item_service_registry.rb +47 -0
  105. data/lib/adwords_api/v201302/feed_mapping_service.rb +38 -0
  106. data/lib/adwords_api/v201302/feed_mapping_service_registry.rb +46 -0
  107. data/lib/adwords_api/v201302/feed_service.rb +38 -0
  108. data/lib/adwords_api/v201302/feed_service_registry.rb +47 -0
  109. data/lib/adwords_api/v201302/geo_location_service.rb +34 -0
  110. data/lib/adwords_api/v201302/geo_location_service_registry.rb +46 -0
  111. data/lib/adwords_api/v201302/location_criterion_service.rb +34 -0
  112. data/lib/adwords_api/v201302/location_criterion_service_registry.rb +46 -0
  113. data/lib/adwords_api/v201302/managed_customer_service.rb +50 -0
  114. data/lib/adwords_api/v201302/managed_customer_service_registry.rb +46 -0
  115. data/lib/adwords_api/v201302/media_service.rb +38 -0
  116. data/lib/adwords_api/v201302/media_service_registry.rb +46 -0
  117. data/lib/adwords_api/v201302/mutate_job_service.rb +42 -0
  118. data/lib/adwords_api/v201302/mutate_job_service_registry.rb +46 -0
  119. data/lib/adwords_api/v201302/report_definition_service.rb +34 -0
  120. data/lib/adwords_api/v201302/report_definition_service_registry.rb +46 -0
  121. data/lib/adwords_api/v201302/shared_criterion_service.rb +38 -0
  122. data/lib/adwords_api/v201302/shared_criterion_service_registry.rb +47 -0
  123. data/lib/adwords_api/v201302/targeting_idea_service.rb +38 -0
  124. data/lib/adwords_api/v201302/targeting_idea_service_registry.rb +46 -0
  125. data/lib/adwords_api/v201302/traffic_estimator_service.rb +34 -0
  126. data/lib/adwords_api/v201302/traffic_estimator_service_registry.rb +46 -0
  127. data/lib/adwords_api/v201302/user_list_service.rb +38 -0
  128. data/lib/adwords_api/v201302/user_list_service_registry.rb +46 -0
  129. data/lib/adwords_api/version.rb +1 -1
  130. data/test/adwords_api/test_adwords_api.rb +1 -1
  131. data/test/adwords_api/test_api_config.rb +8 -8
  132. data/test/adwords_api/test_report_utils.rb +1 -1
  133. data/test/bugs/test_issue_00000031.rb +2 -2
  134. data/test/bugs/test_issue_00000063.rb +6 -6
  135. data/test/examples/v201302/test_account_management.rb +50 -0
  136. data/test/examples/v201302/test_advanced_operations.rb +54 -0
  137. data/test/examples/v201302/test_basic_operations.rb +177 -0
  138. data/test/examples/v201302/test_campaign_management.rb +140 -0
  139. data/test/examples/v201302/test_error_handling.rb +63 -0
  140. data/test/examples/v201302/test_misc.rb +39 -0
  141. data/test/examples/v201302/test_optimization.rb +63 -0
  142. data/test/examples/v201302/test_remarketing.rb +39 -0
  143. data/test/examples/v201302/test_reporting.rb +84 -0
  144. data/test/examples/v201302/test_targeting.rb +68 -0
  145. data/test/examples/v201302/utils.rb +267 -0
  146. data/test/suite_exampletests_v201302.rb +37 -0
  147. data/test/templates/v201209/basic_operations_get_campaigns.def +1 -1
  148. data/test/templates/v201302/basic_operations_get_campaigns.def +114 -0
  149. metadata +139 -2
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
+ #
6
+ # Copyright:: Copyright 2013, 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 code example creates a click-to-download ad, also known as an app
22
+ # promotion ad to a given ad group. To list ad groups, run get_ad_groups.rb.
23
+ #
24
+ # Tags: AdGroupAdService.mutate
25
+
26
+ require 'adwords_api'
27
+
28
+ def add_click_to_download_ad(ad_group_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
+ ad_group_ad_srv = adwords.service(:AdGroupAdService, API_VERSION)
38
+
39
+ # Create the template elements for the ad. You can refer to
40
+ # https://developers.google.com/adwords/api/docs/appendix/templateads
41
+ # for the list of available template fields.
42
+ ad_data = {
43
+ :unique_name => 'adData',
44
+ :fields => [
45
+ {
46
+ :name => 'headline',
47
+ :field_text => 'Enjoy your drive in Mars',
48
+ :type => 'TEXT'
49
+ },
50
+ {
51
+ :name => 'description1',
52
+ :field_text => 'Realistic physics simulation',
53
+ :type => 'TEXT'
54
+ },
55
+ {
56
+ :name => 'description2',
57
+ :field_text => 'Race against players online',
58
+ :type => 'TEXT'
59
+ },
60
+ {
61
+ :name => 'appId',
62
+ :field_text => 'com.example.demogame',
63
+ :type => 'TEXT'
64
+ },
65
+ {
66
+ :name => 'appStore',
67
+ :field_text => '2',
68
+ :type => 'ENUM'
69
+ }
70
+ ]
71
+ }
72
+
73
+ # Create click to download ad.
74
+ click_to_download_app_ad = {
75
+ :xsi_type => 'TemplateAd',
76
+ :name => 'Ad for demo game',
77
+ :template_id => 353,
78
+ :url =>
79
+ 'http://play.google.com/store/apps/details?id=com.example.demogame',
80
+ :display_url => 'play.google.com',
81
+ :template_elements => [ad_data]
82
+ }
83
+
84
+ # Create ad group ad.
85
+ ad_group_ad = {
86
+ :ad_group_id => ad_group_id,
87
+ :ad => click_to_download_app_ad,
88
+ # Optional.
89
+ :status => 'PAUSED'
90
+ }
91
+
92
+ # Add ad.
93
+ response = ad_group_ad_srv.mutate([
94
+ {:operator => 'ADD', :operand => ad_group_ad}
95
+ ])
96
+ if response and response[:value]
97
+ response[:value].each do |ad|
98
+ puts "Added new click-to-download ad to ad group ID %d with url '%s'." %
99
+ [ad[:ad][:id], ad[:ad][:url]]
100
+ end
101
+ else
102
+ raise StandardError, 'No ads were added.'
103
+ end
104
+ end
105
+
106
+ if __FILE__ == $0
107
+ API_VERSION = :v201302
108
+
109
+ begin
110
+ # Ad group ID to add text ads to.
111
+ ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
112
+ add_click_to_download_ad(ad_group_id)
113
+
114
+ # HTTP errors.
115
+ rescue AdsCommon::Errors::HttpError => e
116
+ puts "HTTP Error: %s" % e
117
+
118
+ # API errors.
119
+ rescue AdwordsApi::Errors::ApiException => e
120
+ puts "Message: %s" % e.message
121
+ puts 'Errors:'
122
+ e.errors.each_with_index do |error, index|
123
+ puts "\tError [%d]:" % (index + 1)
124
+ error.each do |field, value|
125
+ puts "\t\t%s: %s" % [field, value]
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,213 @@
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
3
+ #
4
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
5
+ #
6
+ # Copyright:: Copyright 2013, 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 sitelinks feed and associates it with a campaign.
22
+ #
23
+ # Tags: CampaignFeedService.mutate, FeedItemService.mutate
24
+ # Tags: FeedMappingService.mutate, FeedService.mutate
25
+
26
+ require 'adwords_api'
27
+
28
+ def add_site_links(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
+ feed_srv = adwords.service(:FeedService, API_VERSION)
38
+ feed_item_srv = adwords.service(:FeedItemService, API_VERSION)
39
+ feed_mapping_srv = adwords.service(:FeedMappingService, API_VERSION)
40
+ campaign_feed_srv = adwords.service(:CampaignFeedService, API_VERSION)
41
+
42
+ sitelinks_data = {}
43
+
44
+ # Create site links feed first.
45
+ site_links_feed = {
46
+ :name => 'Feed For Site Links',
47
+ :attributes => [
48
+ {:type => 'STRING', :name => 'Link Text'},
49
+ {:type => 'URL', :name => 'Link URL'}
50
+ ]
51
+ }
52
+
53
+ response = feed_srv.mutate([
54
+ {:operator => 'ADD', :operand => site_links_feed}
55
+ ])
56
+ if response and response[:value]
57
+ feed = response[:value].first
58
+ # Attribute of type STRING.
59
+ link_text_feed_attribute_id = feed[:attributes][0][:id]
60
+ # Attribute of type URL.
61
+ link_url_feed_attribute_id = feed[:attributes][1][:id]
62
+ puts "Feed with name '%s' and ID %d was added with" %
63
+ [feed[:name], feed[:id]]
64
+ puts "\tText attribute ID %d and URL attribute ID %d." %
65
+ [link_text_feed_attribute_id, link_url_feed_attribute_id]
66
+ sitelinks_data[:feed_id] = feed[:id]
67
+ sitelinks_data[:link_text_feed_id] = link_text_feed_attribute_id
68
+ sitelinks_data[:link_url_feed_id] = link_url_feed_attribute_id
69
+ else
70
+ raise new StandardError, 'No feeds were added.'
71
+ end
72
+
73
+ # Create site links feed items.
74
+ items_data = [
75
+ {:text => 'Home', :url => 'http://www.example.com'},
76
+ {:text => 'Stores', :url => 'http://www.example.com/stores'},
77
+ {:text => 'On Sale', :url => 'http://www.example.com/sale'},
78
+ {:text => 'Support', :url => 'http://www.example.com/support'},
79
+ {:text => 'Products', :url => 'http://www.example.com/products'},
80
+ {:text => 'About', :url => 'http://www.example.com/about'}
81
+ ]
82
+
83
+ feed_items = items_data.map do |item|
84
+ {
85
+ :feed_id => sitelinks_data[:feed_id],
86
+ :attribute_values => [
87
+ {
88
+ :feed_attribute_id => sitelinks_data[:link_text_feed_id],
89
+ :string_value => item[:text]
90
+ },
91
+ {
92
+ :feed_attribute_id => sitelinks_data[:link_url_feed_id],
93
+ :string_value => item[:url]
94
+ }
95
+ ]
96
+ }
97
+ end
98
+
99
+ feed_items_operations = feed_items.map do |item|
100
+ {:operator => 'ADD', :operand => item}
101
+ end
102
+
103
+ response = feed_item_srv.mutate(feed_items_operations)
104
+ if response and response[:value]
105
+ sitelinks_data[:feed_item_ids] = []
106
+ response[:value].each do |feed_item|
107
+ puts 'Feed item with ID %d was added.' % feed_item[:feed_item_id]
108
+ sitelinks_data[:feed_item_ids] << feed_item[:feed_item_id]
109
+ end
110
+ else
111
+ raise new StandardError, 'No feed items were added.'
112
+ end
113
+
114
+ # Create site links feed mapping.
115
+ feed_mapping = {
116
+ :placeholder_type => PLACEHOLDER_SITELINKS,
117
+ :feed_id => sitelinks_data[:feed_id],
118
+ :attribute_field_mappings => [
119
+ {
120
+ :feed_attribute_id => sitelinks_data[:link_text_feed_id],
121
+ :field_id => PLACEHOLDER_FIELD_SITELINK_LINK_TEXT
122
+ },
123
+ {
124
+ :feed_attribute_id => sitelinks_data[:link_url_feed_id],
125
+ :field_id => PLACEHOLDER_FIELD_SITELINK_LINK_URL
126
+ }
127
+ ]
128
+ }
129
+
130
+ response = feed_mapping_srv.mutate([
131
+ {:operator => 'ADD', :operand => feed_mapping}
132
+ ])
133
+ if response and response[:value]
134
+ feed_mapping = response[:value].first
135
+ puts ('Feed mapping with ID %d and placeholder type %d was saved for feed' +
136
+ ' with ID %d.') % [
137
+ feed_mapping[:feed_mapping_id],
138
+ feed_mapping[:placeholder_type],
139
+ feed_mapping[:feed_id]
140
+ ]
141
+ else
142
+ raise new StandardError, 'No feed mappings were added.'
143
+ end
144
+
145
+ # Create site links campaign feed.
146
+ operands = sitelinks_data[:feed_item_ids].map do |feed_item_id|
147
+ {
148
+ :xsi_type => 'ConstantOperand',
149
+ :type => 'LONG',
150
+ :long_value => feed_item_id
151
+ }
152
+ end
153
+
154
+ function = {
155
+ :operator => 'IN',
156
+ :lhs_operand => [
157
+ {:xsi_type => 'RequestContextOperand', :context_type => 'FEED_ITEM_ID'}
158
+ ],
159
+ :rhs_operand => operands
160
+ }
161
+
162
+ campaign_feed = {
163
+ :feed_id => sitelinks_data[:feed_id],
164
+ :campaign_id => campaign_id,
165
+ :matching_function => function,
166
+ # Specifying placeholder types on the CampaignFeed allows the same feed
167
+ # to be used for different placeholders in different Campaigns.
168
+ :placeholder_types => [PLACEHOLDER_SITELINKS]
169
+ }
170
+
171
+ response = campaign_feed_srv.mutate([
172
+ {:operator => 'ADD', :operand => campaign_feed}
173
+ ])
174
+ if response and response[:value]
175
+ campaign_feed = response[:value].first
176
+ puts 'Campaign with ID %d was associated with feed with ID %d.' %
177
+ [campaign_feed[:campaign_id], campaign_feed[:feed_id]]
178
+ else
179
+ raise new StandardError, 'No campaign feeds were added.'
180
+ end
181
+ end
182
+
183
+ if __FILE__ == $0
184
+ API_VERSION = :v201302
185
+
186
+ # See the Placeholder reference page for a list of all the placeholder types
187
+ # and fields, see:
188
+ # https://developers.google.com/adwords/api/docs/appendix/placeholders
189
+ PLACEHOLDER_SITELINKS = 1
190
+ PLACEHOLDER_FIELD_SITELINK_LINK_TEXT = 1
191
+ PLACEHOLDER_FIELD_SITELINK_LINK_URL = 2
192
+
193
+ begin
194
+ # Campaign ID to add site link to. Campaign must be enhanced.
195
+ campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
196
+ add_site_links(campaign_id)
197
+
198
+ # HTTP errors.
199
+ rescue AdsCommon::Errors::HttpError => e
200
+ puts "HTTP Error: %s" % e
201
+
202
+ # API errors.
203
+ rescue AdwordsApi::Errors::ApiException => e
204
+ puts "Message: %s" % e.message
205
+ puts 'Errors:'
206
+ e.errors.each_with_index do |error, index|
207
+ puts "\tError [%d]:" % (index + 1)
208
+ error.each do |field, value|
209
+ puts "\t\t%s: %s" % [field, value]
210
+ end
211
+ end
212
+ end
213
+ end
@@ -0,0 +1,135 @@
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 ad groups. To get a list of existing
22
+ # campaigns run get_campaigns.rb.
23
+ #
24
+ # Tags: AdGroupService.mutate
25
+
26
+ require 'adwords_api'
27
+
28
+ def add_ad_groups(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
+ ad_group_srv = adwords.service(:AdGroupService, API_VERSION)
38
+
39
+ ad_groups = [
40
+ {
41
+ :name => "Earth to Mars Cruises #%d" % (Time.new.to_f * 1000).to_i,
42
+ :status => 'ENABLED',
43
+ :campaign_id => campaign_id,
44
+ :bidding_strategy_configuration => {
45
+ :bids => [
46
+ {
47
+ # The 'xsi_type' field allows you to specify the xsi:type of the
48
+ # object being created. It's only necessary when you must provide
49
+ # an explicit type that the client library can't infer.
50
+ :xsi_type => 'CpcBid',
51
+ :bid => {:micro_amount => 10000000},
52
+ :content_bid => {:micro_amount => 2000000}
53
+ }
54
+ ]
55
+ },
56
+ :settings => [
57
+ # Targetting restriction settings - these setting only affect serving
58
+ # for the Display Network.
59
+ {
60
+ :xsi_type => 'TargetingSetting',
61
+ :details => [
62
+ # Restricting to serve ads that match your ad group placements.
63
+ {
64
+ :xsi_type => 'TargetingSettingDetail',
65
+ :criterion_type_group => 'PLACEMENT',
66
+ :target_all => true
67
+ },
68
+ # Using your ad group verticals only for bidding.
69
+ {
70
+ :xsi_type => 'TargetingSettingDetail',
71
+ :criterion_type_group => 'VERTICAL',
72
+ :target_all => false
73
+ }
74
+ ]
75
+ }
76
+ ]
77
+ },
78
+ {
79
+ :name => 'Earth to Pluto Cruises #%d' % (Time.new.to_f * 1000).to_i,
80
+ :status => 'ENABLED',
81
+ :campaign_id => campaign_id,
82
+ :bidding_strategy_configuration => {
83
+ :bids => [
84
+ {
85
+ # The 'xsi_type' field allows you to specify the xsi:type of the
86
+ # object being created. It's only necessary when you must provide
87
+ # an explicit type that the client library can't infer.
88
+ :xsi_type => 'CpcBid',
89
+ :bid => {:micro_amount => 10000000}
90
+ }
91
+ ]
92
+ }
93
+ }
94
+ ]
95
+
96
+ # Prepare operations for adding ad groups.
97
+ operations = ad_groups.map do |ad_group|
98
+ {:operator => 'ADD', :operand => ad_group}
99
+ end
100
+
101
+ # Add ad groups.
102
+ response = ad_group_srv.mutate(operations)
103
+ if response and response[:value]
104
+ response[:value].each do |ad_group|
105
+ puts "Ad group ID %d was successfully added." % ad_group[:id]
106
+ end
107
+ else
108
+ raise StandardError, 'No ad group was added'
109
+ end
110
+ end
111
+
112
+ if __FILE__ == $0
113
+ API_VERSION = :v201302
114
+
115
+ begin
116
+ # Campaign ID to add ad group to.
117
+ campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
118
+ add_ad_groups(campaign_id)
119
+
120
+ # HTTP errors.
121
+ rescue AdsCommon::Errors::HttpError => e
122
+ puts "HTTP Error: %s" % e
123
+
124
+ # API errors.
125
+ rescue AdwordsApi::Errors::ApiException => e
126
+ puts "Message: %s" % e.message
127
+ puts 'Errors:'
128
+ e.errors.each_with_index do |error, index|
129
+ puts "\tError [%d]:" % (index + 1)
130
+ error.each do |field, value|
131
+ puts "\t\t%s: %s" % [field, value]
132
+ end
133
+ end
134
+ end
135
+ end