google-adx-buyer-api 0.4.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. data/ChangeLog +4 -0
  2. data/README +39 -25
  3. data/examples/v201109/account_management/get_account_changes.rb +137 -0
  4. data/examples/{v201008 → v201109/basic_operations}/add_ad_group.rb +18 -28
  5. data/examples/{v201003 → v201109/basic_operations}/add_campaign.rb +28 -30
  6. data/examples/{v201008/add_ad_group_criteria.rb → v201109/basic_operations/add_placements.rb} +45 -46
  7. data/examples/v201109/basic_operations/add_thirdparty_redirect_ad.rb +105 -0
  8. data/examples/{v201008 → v201109/basic_operations}/delete_ad.rb +21 -35
  9. data/examples/{v201101 → v201109/basic_operations}/delete_ad_group.rb +18 -28
  10. data/examples/v201109/{delete_campaign.rb → basic_operations/delete_campaign.rb} +18 -28
  11. data/examples/{v201008/delete_ad_group_criterion.rb → v201109/basic_operations/delete_placement.rb} +24 -33
  12. data/examples/{v201101/get_all_ad_groups.rb → v201109/basic_operations/get_ad_groups.rb} +21 -35
  13. data/examples/{v201101/get_all_campaigns.rb → v201109/basic_operations/get_campaigns.rb} +14 -23
  14. data/examples/{v201008/get_all_ad_group_criteria.rb → v201109/basic_operations/get_placements.rb} +37 -36
  15. data/examples/v201109/{get_all_ads.rb → basic_operations/get_thirdparty_redirect_ads.rb} +37 -36
  16. data/examples/v201109/{get_client_customer_id.rb → basic_operations/pause_ad.rb} +27 -33
  17. data/examples/{v201003 → v201109/basic_operations}/update_ad_group.rb +18 -32
  18. data/examples/{v201101 → v201109/basic_operations}/update_campaign.rb +19 -33
  19. data/examples/{v201003/delete_ad_group_criterion.rb → v201109/basic_operations/update_placement.rb} +35 -36
  20. data/examples/v201109/{perform_mutate_job.rb → campaign_management/add_placements_in_bulk.rb} +11 -11
  21. data/examples/v201109/{get_all_disapproved_ads.rb → campaign_management/get_all_disapproved_ads.rb} +18 -28
  22. data/examples/v201109/error_handling/handle_captcha_challenge.rb +93 -0
  23. data/examples/v201109/error_handling/handle_partial_failures.rb +117 -0
  24. data/examples/v201109/error_handling/handle_policy_violation_error.rb +138 -0
  25. data/examples/v201109/error_handling/handle_two_factor_authorization_error.rb +87 -0
  26. data/examples/v201109/misc/get_all_images_and_videos.rb +101 -0
  27. data/examples/{v201101 → v201109/misc}/upload_image.rb +23 -33
  28. data/examples/v201109/{get_all_campaigns.rb → misc/use_oauth.rb} +42 -31
  29. data/examples/{v201003/get_related_placements.rb → v201109/optimization/get_placement_ideas.rb} +32 -37
  30. data/examples/{v201008/add_user_list.rb → v201109/remarketing/add_audience.rb} +49 -34
  31. data/examples/v201109/{add_conversion.rb → remarketing/add_conversion_tracker.rb} +31 -35
  32. data/examples/v201109/{download_adhoc_report.rb → reporting/download_criteria_report.rb} +24 -24
  33. data/examples/{v201008/download_report.rb → v201109/reporting/download_defined_report.rb} +20 -29
  34. data/examples/v201109/reporting/get_campaign_stats.rb +105 -0
  35. data/examples/{v201008/get_all_report_definitions.rb → v201109/reporting/get_defined_reports.rb} +18 -27
  36. data/examples/v201109/{get_all_carriers.rb → reporting/get_report_fields.rb} +18 -19
  37. data/examples/v201109/reporting/parallel_report_download.rb +159 -0
  38. data/examples/v201109/{add_campaign_targeting_criteria.rb → targeting/add_campaign_targeting_criteria.rb} +27 -19
  39. data/examples/v201109/targeting/get_campaign_targeting_criteria.rb +104 -0
  40. data/examples/v201109/{get_all_languages.rb → targeting/get_targetable_languages_and_carriers.rb} +18 -9
  41. data/examples/v201109/{get_location_criteria.rb → targeting/lookup_location.rb} +7 -7
  42. metadata +59 -191
  43. data/Rakefile +0 -50
  44. data/examples/v201003/add_ad_group.rb +0 -98
  45. data/examples/v201003/add_ad_group_criteria.rb +0 -100
  46. data/examples/v201003/add_ads.rb +0 -110
  47. data/examples/v201003/add_negative_campaign_criterion.rb +0 -95
  48. data/examples/v201003/add_placement_performance_report_definition.rb +0 -108
  49. data/examples/v201003/check_campaigns.rb +0 -132
  50. data/examples/v201003/delete_ad.rb +0 -94
  51. data/examples/v201003/delete_ad_group.rb +0 -86
  52. data/examples/v201003/delete_campaign.rb +0 -87
  53. data/examples/v201003/download_report.rb +0 -76
  54. data/examples/v201003/get_all_active_ad_group_criteria.rb +0 -93
  55. data/examples/v201003/get_all_ad_group_criteria.rb +0 -91
  56. data/examples/v201003/get_all_ad_groups.rb +0 -88
  57. data/examples/v201003/get_all_ads.rb +0 -91
  58. data/examples/v201003/get_all_campaign_targets.rb +0 -83
  59. data/examples/v201003/get_all_campaigns.rb +0 -83
  60. data/examples/v201003/get_all_disapproved_ads.rb +0 -94
  61. data/examples/v201003/get_all_images.rb +0 -88
  62. data/examples/v201003/get_all_paused_campaigns.rb +0 -86
  63. data/examples/v201003/get_all_report_definitions.rb +0 -84
  64. data/examples/v201003/get_criterion_bid_landscape.rb +0 -105
  65. data/examples/v201003/get_geo_location_info.rb +0 -108
  66. data/examples/v201003/get_report_fields.rb +0 -81
  67. data/examples/v201003/perform_bulk_mutate_job.rb +0 -222
  68. data/examples/v201003/set_campaign_targets.rb +0 -124
  69. data/examples/v201003/update_ad.rb +0 -95
  70. data/examples/v201003/update_ad_group_criterion.rb +0 -108
  71. data/examples/v201003/update_campaign.rb +0 -92
  72. data/examples/v201003/upload_image.rb +0 -97
  73. data/examples/v201008/add_ads.rb +0 -110
  74. data/examples/v201008/add_campaign.rb +0 -101
  75. data/examples/v201008/add_negative_campaign_criterion.rb +0 -95
  76. data/examples/v201008/add_placement_performance_report_definition.rb +0 -108
  77. data/examples/v201008/check_campaigns.rb +0 -132
  78. data/examples/v201008/delete_ad_group.rb +0 -86
  79. data/examples/v201008/delete_bulk_mutate_job.rb +0 -96
  80. data/examples/v201008/delete_campaign.rb +0 -87
  81. data/examples/v201008/delete_user_list.rb +0 -87
  82. data/examples/v201008/get_all_account_changes.rb +0 -144
  83. data/examples/v201008/get_all_active_ad_group_criteria.rb +0 -93
  84. data/examples/v201008/get_all_ad_groups.rb +0 -88
  85. data/examples/v201008/get_all_ads.rb +0 -91
  86. data/examples/v201008/get_all_campaign_targets.rb +0 -83
  87. data/examples/v201008/get_all_campaigns.rb +0 -83
  88. data/examples/v201008/get_all_disapproved_ads.rb +0 -94
  89. data/examples/v201008/get_all_images.rb +0 -88
  90. data/examples/v201008/get_all_paused_campaigns.rb +0 -86
  91. data/examples/v201008/get_all_user_lists.rb +0 -84
  92. data/examples/v201008/get_bulk_mutate_job.rb +0 -106
  93. data/examples/v201008/get_campaign_alerts.rb +0 -103
  94. data/examples/v201008/get_criterion_bid_landscape.rb +0 -105
  95. data/examples/v201008/get_geo_location_info.rb +0 -108
  96. data/examples/v201008/get_related_placements.rb +0 -114
  97. data/examples/v201008/get_report_fields.rb +0 -81
  98. data/examples/v201008/perform_bulk_mutate_job.rb +0 -222
  99. data/examples/v201008/set_campaign_targets.rb +0 -124
  100. data/examples/v201008/update_ad.rb +0 -95
  101. data/examples/v201008/update_ad_group.rb +0 -90
  102. data/examples/v201008/update_ad_group_criterion.rb +0 -108
  103. data/examples/v201008/update_campaign.rb +0 -93
  104. data/examples/v201008/update_user_list.rb +0 -91
  105. data/examples/v201008/upload_image.rb +0 -97
  106. data/examples/v201101/add_ad_group.rb +0 -98
  107. data/examples/v201101/add_ad_group_criteria.rb +0 -100
  108. data/examples/v201101/add_ads.rb +0 -110
  109. data/examples/v201101/add_campaign.rb +0 -108
  110. data/examples/v201101/add_conversion.rb +0 -97
  111. data/examples/v201101/add_negative_campaign_criterion.rb +0 -95
  112. data/examples/v201101/add_placement_performance_report_definition.rb +0 -108
  113. data/examples/v201101/add_rtb_campaign.rb +0 -113
  114. data/examples/v201101/add_user_list.rb +0 -122
  115. data/examples/v201101/check_campaigns.rb +0 -132
  116. data/examples/v201101/delete_ad.rb +0 -94
  117. data/examples/v201101/delete_ad_group_criterion.rb +0 -95
  118. data/examples/v201101/delete_bulk_mutate_job.rb +0 -96
  119. data/examples/v201101/delete_campaign.rb +0 -87
  120. data/examples/v201101/delete_user_list.rb +0 -87
  121. data/examples/v201101/download_report.rb +0 -76
  122. data/examples/v201101/get_ad_group_bid_landscape.rb +0 -103
  123. data/examples/v201101/get_all_account_changes.rb +0 -146
  124. data/examples/v201101/get_all_active_ad_group_criteria.rb +0 -106
  125. data/examples/v201101/get_all_ad_group_criteria.rb +0 -97
  126. data/examples/v201101/get_all_ads.rb +0 -99
  127. data/examples/v201101/get_all_campaign_targets.rb +0 -83
  128. data/examples/v201101/get_all_conversions.rb +0 -88
  129. data/examples/v201101/get_all_disapproved_ads.rb +0 -102
  130. data/examples/v201101/get_all_images.rb +0 -90
  131. data/examples/v201101/get_all_paused_campaigns.rb +0 -92
  132. data/examples/v201101/get_all_report_definitions.rb +0 -84
  133. data/examples/v201101/get_all_user_lists.rb +0 -87
  134. data/examples/v201101/get_bulk_mutate_job.rb +0 -106
  135. data/examples/v201101/get_campaign_alerts.rb +0 -103
  136. data/examples/v201101/get_criterion_bid_landscape.rb +0 -102
  137. data/examples/v201101/get_geo_location_info.rb +0 -108
  138. data/examples/v201101/get_related_placements.rb +0 -114
  139. data/examples/v201101/get_report_fields.rb +0 -81
  140. data/examples/v201101/perform_bulk_mutate_job.rb +0 -222
  141. data/examples/v201101/set_campaign_targets.rb +0 -111
  142. data/examples/v201101/update_ad.rb +0 -95
  143. data/examples/v201101/update_ad_group.rb +0 -90
  144. data/examples/v201101/update_ad_group_criterion.rb +0 -108
  145. data/examples/v201101/update_conversion.rb +0 -96
  146. data/examples/v201101/update_user_list.rb +0 -91
  147. data/examples/v201109/add_ad_group.rb +0 -98
  148. data/examples/v201109/add_ad_group_criteria.rb +0 -100
  149. data/examples/v201109/add_ads.rb +0 -110
  150. data/examples/v201109/add_campaign.rb +0 -108
  151. data/examples/v201109/add_negative_campaign_criterion.rb +0 -95
  152. data/examples/v201109/add_rtb_campaign.rb +0 -113
  153. data/examples/v201109/add_user_list.rb +0 -122
  154. data/examples/v201109/check_campaigns.rb +0 -132
  155. data/examples/v201109/delete_ad.rb +0 -94
  156. data/examples/v201109/delete_ad_group.rb +0 -86
  157. data/examples/v201109/delete_ad_group_criterion.rb +0 -95
  158. data/examples/v201109/delete_bulk_mutate_job.rb +0 -96
  159. data/examples/v201109/delete_user_list.rb +0 -87
  160. data/examples/v201109/download_report.rb +0 -76
  161. data/examples/v201109/get_ad_group_bid_landscape.rb +0 -103
  162. data/examples/v201109/get_all_account_changes.rb +0 -146
  163. data/examples/v201109/get_all_active_ad_group_criteria.rb +0 -106
  164. data/examples/v201109/get_all_ad_group_criteria.rb +0 -98
  165. data/examples/v201109/get_all_ad_groups.rb +0 -94
  166. data/examples/v201109/get_all_campaign_targets.rb +0 -83
  167. data/examples/v201109/get_all_conversions.rb +0 -88
  168. data/examples/v201109/get_all_images.rb +0 -90
  169. data/examples/v201109/get_all_paused_campaigns.rb +0 -92
  170. data/examples/v201109/get_all_report_definitions.rb +0 -84
  171. data/examples/v201109/get_all_user_lists.rb +0 -87
  172. data/examples/v201109/get_bulk_mutate_job.rb +0 -106
  173. data/examples/v201109/get_campaign_alerts.rb +0 -103
  174. data/examples/v201109/get_criterion_bid_landscape.rb +0 -102
  175. data/examples/v201109/get_geo_location_info.rb +0 -108
  176. data/examples/v201109/get_related_placements.rb +0 -114
  177. data/examples/v201109/get_report_fields.rb +0 -81
  178. data/examples/v201109/perform_bulk_mutate_job.rb +0 -222
  179. data/examples/v201109/update_ad.rb +0 -95
  180. data/examples/v201109/update_ad_group.rb +0 -90
  181. data/examples/v201109/update_ad_group_criterion.rb +0 -108
  182. data/examples/v201109/update_campaign.rb +0 -93
  183. data/examples/v201109/update_conversion.rb +0 -96
  184. data/examples/v201109/update_user_list.rb +0 -91
  185. data/examples/v201109/upload_image.rb +0 -97
data/ChangeLog CHANGED
@@ -1,3 +1,7 @@
1
+ 0.4.1:
2
+ - Added .gemspec and updated packaging process.
3
+ - Switched to google-adwords-api-0.5.x branch.
4
+
1
5
  0.4.0:
2
6
  - Compatibility with google-adwords-api-0.4.1.
3
7
  - Switched to Savon backend.
data/README CHANGED
@@ -6,9 +6,9 @@ AdWords and DoubleClick Ad Exchange Buyer API!
6
6
  Please note that this is an early PREVIEW of the client library, still under
7
7
  development.
8
8
 
9
- It contains full support for v13, v200909, v201003, v201008, v201101 and
10
- v201109, with full stubs, and a simplified programming interface that lets you
11
- handle everything in native Ruby collections.
9
+ It contains full support for v201109, with full stubs, and a simplified
10
+ programming interface that lets you handle everything in native Ruby
11
+ collections.
12
12
 
13
13
 
14
14
  = Docs for Users
@@ -27,32 +27,22 @@ Buyer client library examples. You need the AdWords library in order to use it
27
27
  which is installed automatically as a dependency.
28
28
 
29
29
  The following gem libraries are required:
30
- - savon v0.9.6
31
- - httpclient v2.1.2 or greater
32
- - google-ads-common v0.5.4 or later.
30
+ - savon v0.9.7
31
+ - google-ads-common v0.6.3 or later.
33
32
 
34
33
 
35
34
  == 2 - Using the client library:
36
35
 
37
- It's pretty easy to use.
38
- See http://docs.rubygems.org/read/chapter/3#page70 for how to set the rubygem
39
- environment.
40
- $ export RUBYOPT=rubygems
41
- or
42
- $ ruby -rubygems my_program_that_uses_gems
43
-
44
- If you are running Ruby 1.8 and do not use the rubygems option, you need to add
45
- require 'rubygems'
46
- at the beginning of your programs.
47
-
48
- Then:
49
- gem 'google-adwords-api'
36
+ Include the library with 'require':
50
37
  require 'adwords_api'
51
38
 
39
+ Then create an API instance:
52
40
  adwords = AdwordsApi::Api.new
53
- creates an Api object that will grant you access to all the services for all of
54
- the currently supported vesions of the APIs. It uses a config file in:
55
- ENV['HOME']/adwords_api.yml to read all of your configurations.
41
+
42
+ The created API object will grant you access to all the services for all of the
43
+ currently supported vesions of the APIs. It uses a config file in:
44
+ ENV['HOME']/adwords_api.yml to read all of your configurations by default.
45
+
56
46
  There is an example configuration file shipped with these libraries.
57
47
 
58
48
  You can also pass API a manually constructed config hash like:
@@ -86,6 +76,17 @@ please set the appropriate options in the config file or config hash. E.g.:
86
76
  :proxy => 'http://user:password@proxy_hostname:8080'
87
77
  }
88
78
 
79
+ *Note*: if you are using Ruby 1.8 you may need to include RubyGems to be able
80
+ to require other gems code. There are several ways to do it, the easiest one is
81
+ to pass '-rubygems' parameter to the ruby interpreter:
82
+ $ ruby -rubygems my_program_that_uses_gems
83
+
84
+ you can also set this up in the environment:
85
+ $ export RUBYOPT="rubygems"
86
+
87
+ or add it to the bash configuration file:
88
+ $ echo 'export RUBYOPT="rubygems"' >> ~/.bashrc
89
+
89
90
 
90
91
  === 2.1 - Ruby names for a Ruby library:
91
92
 
@@ -156,6 +157,18 @@ This information can be obtained by passing a user block during method call:
156
157
  You can also retrieve the response body as the second block parameter:
157
158
  report_def_srv.get(selector) {|header, body| ... }
158
159
 
160
+ === 2.5 - GZip compression
161
+
162
+ The library offers a transparent compression option which can be enabled in the
163
+ configuration file or by the following setting:
164
+
165
+ config[:connection] = {
166
+ :enable_gzip => true
167
+ }
168
+
169
+ Enabling this option will set the headers required to request the server to
170
+ respond in gzipped format. All requests are sent uncompressed regardless.
171
+
159
172
 
160
173
  = Docs for Developers
161
174
 
@@ -164,8 +177,9 @@ You can also retrieve the response body as the second block parameter:
164
177
  $ rake generate
165
178
  to regenerate the stubs if needed
166
179
 
167
- $ rake package
168
- to package the gem and create a release
180
+ $ gem build google-adwords-api.gemspec
181
+ $ gem build google-adx-buyer-api.gemspec
182
+ to build the gems
169
183
 
170
184
  $ rake test
171
185
  to run unit tests on the library
@@ -186,7 +200,7 @@ Questions can be asked on forum
186
200
 
187
201
  == Licence
188
202
 
189
- Copyright 2011, Google Inc. All Rights Reserved.
203
+ Copyright 2010-2012, Google Inc. All Rights Reserved.
190
204
 
191
205
  Licensed under the Apache License, Version 2.0 (the "License");
192
206
  you may not use this file except in compliance with the License.
@@ -0,0 +1,137 @@
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 = :v201109
118
+
119
+ begin
120
+ get_account_changes()
121
+
122
+ # HTTP errors.
123
+ rescue AdsCommon::Errors::HttpError => e
124
+ puts "HTTP Error: %s" % e
125
+
126
+ # API errors.
127
+ rescue AdwordsApi::Errors::ApiException => e
128
+ puts "Message: %s" % e.message
129
+ puts 'Errors:'
130
+ e.errors.each_with_index do |error, index|
131
+ puts "\tError [%d]:" % (index + 1)
132
+ error.each do |field, value|
133
+ puts "\t\t%s: %s" % [field, value]
134
+ end
135
+ end
136
+ end
137
+ end
@@ -1,6 +1,7 @@
1
- #!/usr/bin/ruby
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
2
3
  #
3
- # Author:: api.sgomes@gmail.com (Sérgio Gomes)
4
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
4
5
  #
5
6
  # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
6
7
  #
@@ -22,13 +23,9 @@
22
23
  #
23
24
  # Tags: AdGroupService.mutate
24
25
 
25
- require 'rubygems'
26
- gem 'google-adwords-api'
27
26
  require 'adwords_api'
28
27
 
29
- API_VERSION = :v201008
30
-
31
- def add_ad_group()
28
+ def add_ad_group(campaign_id)
32
29
  # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
33
30
  # when called without parameters.
34
31
  adwords = AdwordsApi::Api.new
@@ -39,8 +36,6 @@ def add_ad_group()
39
36
 
40
37
  ad_group_srv = adwords.service(:AdGroupService, API_VERSION)
41
38
 
42
- campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
43
-
44
39
  # Prepare for adding ad group.
45
40
  operation = {
46
41
  :operator => 'ADD',
@@ -65,33 +60,28 @@ def add_ad_group()
65
60
  # Add ad group.
66
61
  response = ad_group_srv.mutate([operation])
67
62
  ad_group = response[:value].first
68
- puts 'Ad group id %d was successfully added.' % ad_group[:id]
63
+ puts "Ad group ID %d was successfully added." % ad_group[:id]
69
64
  end
70
65
 
71
66
  if __FILE__ == $0
67
+ API_VERSION = :v201109
68
+
72
69
  begin
73
- add_ad_group()
70
+ campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
71
+ add_ad_group(campaign_id)
74
72
 
75
- # Connection error. Likely transitory.
76
- rescue Errno::ECONNRESET, SOAP::HTTPStreamError, SocketError => e
77
- puts 'Connection Error: %s' % e
78
- puts 'Source: %s' % e.backtrace.first
73
+ # HTTP errors.
74
+ rescue AdsCommon::Errors::HttpError => e
75
+ puts "HTTP Error: %s" % e
79
76
 
80
- # API Error.
77
+ # API errors.
81
78
  rescue AdwordsApi::Errors::ApiException => e
82
- puts 'API Exception caught.'
83
- puts 'Message: %s' % e.message
84
- puts 'Code: %d' % e.code if e.code
85
- puts 'Trigger: %s' % e.trigger if e.trigger
79
+ puts "Message: %s" % e.message
86
80
  puts 'Errors:'
87
- if e.errors
88
- e.errors.each_with_index do |error, index|
89
- puts ' %d. Error type is %s. Fields:' % [index + 1, error[:xsi_type]]
90
- error.each_pair do |field, value|
91
- if field != :xsi_type
92
- puts ' %s: %s' % [field, value]
93
- end
94
- end
81
+ e.errors.each_with_index do |error, index|
82
+ puts "\tError [%d]:" % (index + 1)
83
+ error.each do |field, value|
84
+ puts "\t\t%s: %s" % [field, value]
95
85
  end
96
86
  end
97
87
  end
@@ -1,6 +1,7 @@
1
- #!/usr/bin/ruby
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
2
3
  #
3
- # Author:: api.sgomes@gmail.com (Sérgio Gomes)
4
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
4
5
  #
5
6
  # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
6
7
  #
@@ -21,12 +22,8 @@
21
22
  #
22
23
  # Tags: CampaignService.mutate
23
24
 
24
- require 'rubygems'
25
- gem 'google-adwords-api'
26
25
  require 'adwords_api'
27
26
 
28
- API_VERSION = :v201003
29
-
30
27
  def add_campaign()
31
28
  # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
32
29
  # when called without parameters.
@@ -56,45 +53,46 @@ def add_campaign()
56
53
  :micro_amount => 50000000
57
54
  },
58
55
  :delivery_method => 'STANDARD'
56
+ },
57
+ # Set the campaign network options to Search and Search Network.
58
+ :network_setting => {
59
+ :target_google_search => false,
60
+ :target_search_network => false,
61
+ :target_content_network => true,
62
+ :target_content_contextual => false
63
+ }
64
+ :settings => {
65
+ :xsi_type => 'RealTimeBiddingSetting',
66
+ :opt_in => 'true'
59
67
  }
60
68
  }
61
69
  }
62
70
 
63
71
  # Add campaign.
64
72
  response = campaign_srv.mutate([operation])
65
- if response and response[:value]
66
- campaign = response[:value].first
67
- puts 'Campaign with name "%s" and id %d was added.' %
68
- [campaign[:name], campaign[:id]]
69
- else
70
- puts 'No campaigns were added.'
71
- end
73
+ campaign = response[:value].first
74
+ puts "Campaign with name '%s' and ID %d was added." %
75
+ [campaign[:name], campaign[:id]]
72
76
  end
73
77
 
74
78
  if __FILE__ == $0
79
+ API_VERSION = :v201109
80
+
75
81
  begin
76
82
  add_campaign()
77
83
 
78
- # Connection error. Likely transitory.
79
- rescue Errno::ECONNRESET, SOAP::HTTPStreamError, SocketError => e
80
- puts 'Connection Error: %s' % e
81
- puts 'Source: %s' % e.backtrace.first
84
+ # HTTP errors.
85
+ rescue AdsCommon::Errors::HttpError => e
86
+ puts "HTTP Error: %s" % e
82
87
 
83
- # API Error.
88
+ # API errors.
84
89
  rescue AdwordsApi::Errors::ApiException => e
85
- puts 'API Exception caught.'
86
- puts 'Message: %s' % e.message
87
- puts 'Code: %d' % e.code if e.code
88
- puts 'Trigger: %s' % e.trigger if e.trigger
90
+ puts "Message: %s" % e.message
89
91
  puts 'Errors:'
90
- if e.errors
91
- e.errors.each_with_index do |error, index|
92
- puts ' %d. Error type is %s. Fields:' % [index + 1, error[:xsi_type]]
93
- error.each_pair do |field, value|
94
- if field != :xsi_type
95
- puts ' %s: %s' % [field, value]
96
- end
97
- end
92
+ e.errors.each_with_index do |error, index|
93
+ puts "\tError [%d]:" % (index + 1)
94
+ error.each do |field, value|
95
+ puts "\t\t%s: %s" % [field, value]
98
96
  end
99
97
  end
100
98
  end
@@ -1,6 +1,7 @@
1
- #!/usr/bin/ruby
1
+ #!/usr/bin/env ruby
2
+ # Encoding: utf-8
2
3
  #
3
- # Author:: api.sgomes@gmail.com (Sérgio Gomes)
4
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
4
5
  #
5
6
  # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
6
7
  #
@@ -17,18 +18,14 @@
17
18
  # See the License for the specific language governing permissions and
18
19
  # limitations under the License.
19
20
  #
20
- # This example illustrates how to add a criterion to a given ad group. To create
21
+ # This example illustrates how to add a placement to a given ad group. To create
21
22
  # an ad group, run add_ad_group.rb.
22
23
  #
23
24
  # Tags: AdGroupCriterionService.mutate
24
25
 
25
- require 'rubygems'
26
- gem 'google-adwords-api'
27
26
  require 'adwords_api'
28
27
 
29
- API_VERSION = :v201008
30
-
31
- def add_ad_group_criteria()
28
+ def add_placements(ad_group_id)
32
29
  # AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
33
30
  # when called without parameters.
34
31
  adwords = AdwordsApi::Api.new
@@ -40,60 +37,62 @@ def add_ad_group_criteria()
40
37
  ad_group_criterion_srv =
41
38
  adwords.service(:AdGroupCriterionService, API_VERSION)
42
39
 
43
- ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
44
-
45
- # Create placement.
46
- plc_operation = {
47
- :operator => 'ADD',
48
- :operand => {
40
+ # Create placements.
41
+ placements = [
42
+ {
49
43
  :xsi_type => 'BiddableAdGroupCriterion',
50
44
  :ad_group_id => ad_group_id,
51
45
  :criterion => {
52
46
  :xsi_type => 'Placement',
53
47
  :url => 'http://mars.google.com'
54
48
  }
55
- }
56
- }
49
+ },
50
+ {
51
+ :xsi_type => 'BiddableAdGroupCriterion',
52
+ :ad_group_id => ad_group_id,
53
+ :criterion => {
54
+ :xsi_type => 'Placement',
55
+ :url => 'http://pluto.google.com'
56
+ }
57
+ },
58
+ ]
57
59
 
58
- # Add criteria.
59
- response = ad_group_criterion_srv.mutate([plc_operation])
60
- if response and response[:value]
61
- ad_group_criteria = response[:value]
62
- puts "Added #{ad_group_criteria.length} criteria to ad group " +
63
- "#{ad_group_id}."
64
- ad_group_criteria.each do |ad_group_criterion|
65
- puts " Criterion id is #{ad_group_criterion[:criterion][:id]} and " +
66
- "type is #{ad_group_criterion[:criterion][:xsi_type]}."
67
- end
68
- else
69
- puts "No criteria were added."
60
+ # Create operations to add placements.
61
+ plc_operations = placements.map do |placement|
62
+ {:operator => 'ADD', :operand => placement}
63
+ end
64
+
65
+ # Add placements.
66
+ response = ad_group_criterion_srv.mutate(plc_operations)
67
+ ad_group_criteria = response[:value]
68
+ puts "Added %d placements to ad group ID %d." %
69
+ [ad_group_criteria.length, ad_group_id]
70
+ ad_group_criteria.each do |ad_group_criterion|
71
+ puts "\tPlacement ID is %d and type is '%s'." %
72
+ [ad_group_criterion[:criterion][:id],
73
+ ad_group_criterion[:criterion][:xsi_type]]
70
74
  end
71
75
  end
72
76
 
73
77
  if __FILE__ == $0
78
+ API_VERSION = :v201109
79
+
74
80
  begin
75
- add_ad_group_criteria()
81
+ ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
82
+ add_placements(ad_group_id)
76
83
 
77
- # Connection error. Likely transitory.
78
- rescue Errno::ECONNRESET, SOAP::HTTPStreamError, SocketError => e
79
- puts 'Connection Error: %s' % e
80
- puts 'Source: %s' % e.backtrace.first
84
+ # HTTP errors.
85
+ rescue AdsCommon::Errors::HttpError => e
86
+ puts "HTTP Error: %s" % e
81
87
 
82
- # API Error.
88
+ # API errors.
83
89
  rescue AdwordsApi::Errors::ApiException => e
84
- puts 'API Exception caught.'
85
- puts 'Message: %s' % e.message
86
- puts 'Code: %d' % e.code if e.code
87
- puts 'Trigger: %s' % e.trigger if e.trigger
90
+ puts "Message: %s" % e.message
88
91
  puts 'Errors:'
89
- if e.errors
90
- e.errors.each_with_index do |error, index|
91
- puts ' %d. Error type is %s. Fields:' % [index + 1, error[:xsi_type]]
92
- error.each_pair do |field, value|
93
- if field != :xsi_type
94
- puts ' %s: %s' % [field, value]
95
- end
96
- end
92
+ e.errors.each_with_index do |error, index|
93
+ puts "\tError [%d]:" % (index + 1)
94
+ error.each do |field, value|
95
+ puts "\t\t%s: %s" % [field, value]
97
96
  end
98
97
  end
99
98
  end