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.
- data/ChangeLog +4 -0
- data/README +39 -25
- data/examples/v201109/account_management/get_account_changes.rb +137 -0
- data/examples/{v201008 → v201109/basic_operations}/add_ad_group.rb +18 -28
- data/examples/{v201003 → v201109/basic_operations}/add_campaign.rb +28 -30
- data/examples/{v201008/add_ad_group_criteria.rb → v201109/basic_operations/add_placements.rb} +45 -46
- data/examples/v201109/basic_operations/add_thirdparty_redirect_ad.rb +105 -0
- data/examples/{v201008 → v201109/basic_operations}/delete_ad.rb +21 -35
- data/examples/{v201101 → v201109/basic_operations}/delete_ad_group.rb +18 -28
- data/examples/v201109/{delete_campaign.rb → basic_operations/delete_campaign.rb} +18 -28
- data/examples/{v201008/delete_ad_group_criterion.rb → v201109/basic_operations/delete_placement.rb} +24 -33
- data/examples/{v201101/get_all_ad_groups.rb → v201109/basic_operations/get_ad_groups.rb} +21 -35
- data/examples/{v201101/get_all_campaigns.rb → v201109/basic_operations/get_campaigns.rb} +14 -23
- data/examples/{v201008/get_all_ad_group_criteria.rb → v201109/basic_operations/get_placements.rb} +37 -36
- data/examples/v201109/{get_all_ads.rb → basic_operations/get_thirdparty_redirect_ads.rb} +37 -36
- data/examples/v201109/{get_client_customer_id.rb → basic_operations/pause_ad.rb} +27 -33
- data/examples/{v201003 → v201109/basic_operations}/update_ad_group.rb +18 -32
- data/examples/{v201101 → v201109/basic_operations}/update_campaign.rb +19 -33
- data/examples/{v201003/delete_ad_group_criterion.rb → v201109/basic_operations/update_placement.rb} +35 -36
- data/examples/v201109/{perform_mutate_job.rb → campaign_management/add_placements_in_bulk.rb} +11 -11
- data/examples/v201109/{get_all_disapproved_ads.rb → campaign_management/get_all_disapproved_ads.rb} +18 -28
- data/examples/v201109/error_handling/handle_captcha_challenge.rb +93 -0
- data/examples/v201109/error_handling/handle_partial_failures.rb +117 -0
- data/examples/v201109/error_handling/handle_policy_violation_error.rb +138 -0
- data/examples/v201109/error_handling/handle_two_factor_authorization_error.rb +87 -0
- data/examples/v201109/misc/get_all_images_and_videos.rb +101 -0
- data/examples/{v201101 → v201109/misc}/upload_image.rb +23 -33
- data/examples/v201109/{get_all_campaigns.rb → misc/use_oauth.rb} +42 -31
- data/examples/{v201003/get_related_placements.rb → v201109/optimization/get_placement_ideas.rb} +32 -37
- data/examples/{v201008/add_user_list.rb → v201109/remarketing/add_audience.rb} +49 -34
- data/examples/v201109/{add_conversion.rb → remarketing/add_conversion_tracker.rb} +31 -35
- data/examples/v201109/{download_adhoc_report.rb → reporting/download_criteria_report.rb} +24 -24
- data/examples/{v201008/download_report.rb → v201109/reporting/download_defined_report.rb} +20 -29
- data/examples/v201109/reporting/get_campaign_stats.rb +105 -0
- data/examples/{v201008/get_all_report_definitions.rb → v201109/reporting/get_defined_reports.rb} +18 -27
- data/examples/v201109/{get_all_carriers.rb → reporting/get_report_fields.rb} +18 -19
- data/examples/v201109/reporting/parallel_report_download.rb +159 -0
- data/examples/v201109/{add_campaign_targeting_criteria.rb → targeting/add_campaign_targeting_criteria.rb} +27 -19
- data/examples/v201109/targeting/get_campaign_targeting_criteria.rb +104 -0
- data/examples/v201109/{get_all_languages.rb → targeting/get_targetable_languages_and_carriers.rb} +18 -9
- data/examples/v201109/{get_location_criteria.rb → targeting/lookup_location.rb} +7 -7
- metadata +59 -191
- data/Rakefile +0 -50
- data/examples/v201003/add_ad_group.rb +0 -98
- data/examples/v201003/add_ad_group_criteria.rb +0 -100
- data/examples/v201003/add_ads.rb +0 -110
- data/examples/v201003/add_negative_campaign_criterion.rb +0 -95
- data/examples/v201003/add_placement_performance_report_definition.rb +0 -108
- data/examples/v201003/check_campaigns.rb +0 -132
- data/examples/v201003/delete_ad.rb +0 -94
- data/examples/v201003/delete_ad_group.rb +0 -86
- data/examples/v201003/delete_campaign.rb +0 -87
- data/examples/v201003/download_report.rb +0 -76
- data/examples/v201003/get_all_active_ad_group_criteria.rb +0 -93
- data/examples/v201003/get_all_ad_group_criteria.rb +0 -91
- data/examples/v201003/get_all_ad_groups.rb +0 -88
- data/examples/v201003/get_all_ads.rb +0 -91
- data/examples/v201003/get_all_campaign_targets.rb +0 -83
- data/examples/v201003/get_all_campaigns.rb +0 -83
- data/examples/v201003/get_all_disapproved_ads.rb +0 -94
- data/examples/v201003/get_all_images.rb +0 -88
- data/examples/v201003/get_all_paused_campaigns.rb +0 -86
- data/examples/v201003/get_all_report_definitions.rb +0 -84
- data/examples/v201003/get_criterion_bid_landscape.rb +0 -105
- data/examples/v201003/get_geo_location_info.rb +0 -108
- data/examples/v201003/get_report_fields.rb +0 -81
- data/examples/v201003/perform_bulk_mutate_job.rb +0 -222
- data/examples/v201003/set_campaign_targets.rb +0 -124
- data/examples/v201003/update_ad.rb +0 -95
- data/examples/v201003/update_ad_group_criterion.rb +0 -108
- data/examples/v201003/update_campaign.rb +0 -92
- data/examples/v201003/upload_image.rb +0 -97
- data/examples/v201008/add_ads.rb +0 -110
- data/examples/v201008/add_campaign.rb +0 -101
- data/examples/v201008/add_negative_campaign_criterion.rb +0 -95
- data/examples/v201008/add_placement_performance_report_definition.rb +0 -108
- data/examples/v201008/check_campaigns.rb +0 -132
- data/examples/v201008/delete_ad_group.rb +0 -86
- data/examples/v201008/delete_bulk_mutate_job.rb +0 -96
- data/examples/v201008/delete_campaign.rb +0 -87
- data/examples/v201008/delete_user_list.rb +0 -87
- data/examples/v201008/get_all_account_changes.rb +0 -144
- data/examples/v201008/get_all_active_ad_group_criteria.rb +0 -93
- data/examples/v201008/get_all_ad_groups.rb +0 -88
- data/examples/v201008/get_all_ads.rb +0 -91
- data/examples/v201008/get_all_campaign_targets.rb +0 -83
- data/examples/v201008/get_all_campaigns.rb +0 -83
- data/examples/v201008/get_all_disapproved_ads.rb +0 -94
- data/examples/v201008/get_all_images.rb +0 -88
- data/examples/v201008/get_all_paused_campaigns.rb +0 -86
- data/examples/v201008/get_all_user_lists.rb +0 -84
- data/examples/v201008/get_bulk_mutate_job.rb +0 -106
- data/examples/v201008/get_campaign_alerts.rb +0 -103
- data/examples/v201008/get_criterion_bid_landscape.rb +0 -105
- data/examples/v201008/get_geo_location_info.rb +0 -108
- data/examples/v201008/get_related_placements.rb +0 -114
- data/examples/v201008/get_report_fields.rb +0 -81
- data/examples/v201008/perform_bulk_mutate_job.rb +0 -222
- data/examples/v201008/set_campaign_targets.rb +0 -124
- data/examples/v201008/update_ad.rb +0 -95
- data/examples/v201008/update_ad_group.rb +0 -90
- data/examples/v201008/update_ad_group_criterion.rb +0 -108
- data/examples/v201008/update_campaign.rb +0 -93
- data/examples/v201008/update_user_list.rb +0 -91
- data/examples/v201008/upload_image.rb +0 -97
- data/examples/v201101/add_ad_group.rb +0 -98
- data/examples/v201101/add_ad_group_criteria.rb +0 -100
- data/examples/v201101/add_ads.rb +0 -110
- data/examples/v201101/add_campaign.rb +0 -108
- data/examples/v201101/add_conversion.rb +0 -97
- data/examples/v201101/add_negative_campaign_criterion.rb +0 -95
- data/examples/v201101/add_placement_performance_report_definition.rb +0 -108
- data/examples/v201101/add_rtb_campaign.rb +0 -113
- data/examples/v201101/add_user_list.rb +0 -122
- data/examples/v201101/check_campaigns.rb +0 -132
- data/examples/v201101/delete_ad.rb +0 -94
- data/examples/v201101/delete_ad_group_criterion.rb +0 -95
- data/examples/v201101/delete_bulk_mutate_job.rb +0 -96
- data/examples/v201101/delete_campaign.rb +0 -87
- data/examples/v201101/delete_user_list.rb +0 -87
- data/examples/v201101/download_report.rb +0 -76
- data/examples/v201101/get_ad_group_bid_landscape.rb +0 -103
- data/examples/v201101/get_all_account_changes.rb +0 -146
- data/examples/v201101/get_all_active_ad_group_criteria.rb +0 -106
- data/examples/v201101/get_all_ad_group_criteria.rb +0 -97
- data/examples/v201101/get_all_ads.rb +0 -99
- data/examples/v201101/get_all_campaign_targets.rb +0 -83
- data/examples/v201101/get_all_conversions.rb +0 -88
- data/examples/v201101/get_all_disapproved_ads.rb +0 -102
- data/examples/v201101/get_all_images.rb +0 -90
- data/examples/v201101/get_all_paused_campaigns.rb +0 -92
- data/examples/v201101/get_all_report_definitions.rb +0 -84
- data/examples/v201101/get_all_user_lists.rb +0 -87
- data/examples/v201101/get_bulk_mutate_job.rb +0 -106
- data/examples/v201101/get_campaign_alerts.rb +0 -103
- data/examples/v201101/get_criterion_bid_landscape.rb +0 -102
- data/examples/v201101/get_geo_location_info.rb +0 -108
- data/examples/v201101/get_related_placements.rb +0 -114
- data/examples/v201101/get_report_fields.rb +0 -81
- data/examples/v201101/perform_bulk_mutate_job.rb +0 -222
- data/examples/v201101/set_campaign_targets.rb +0 -111
- data/examples/v201101/update_ad.rb +0 -95
- data/examples/v201101/update_ad_group.rb +0 -90
- data/examples/v201101/update_ad_group_criterion.rb +0 -108
- data/examples/v201101/update_conversion.rb +0 -96
- data/examples/v201101/update_user_list.rb +0 -91
- data/examples/v201109/add_ad_group.rb +0 -98
- data/examples/v201109/add_ad_group_criteria.rb +0 -100
- data/examples/v201109/add_ads.rb +0 -110
- data/examples/v201109/add_campaign.rb +0 -108
- data/examples/v201109/add_negative_campaign_criterion.rb +0 -95
- data/examples/v201109/add_rtb_campaign.rb +0 -113
- data/examples/v201109/add_user_list.rb +0 -122
- data/examples/v201109/check_campaigns.rb +0 -132
- data/examples/v201109/delete_ad.rb +0 -94
- data/examples/v201109/delete_ad_group.rb +0 -86
- data/examples/v201109/delete_ad_group_criterion.rb +0 -95
- data/examples/v201109/delete_bulk_mutate_job.rb +0 -96
- data/examples/v201109/delete_user_list.rb +0 -87
- data/examples/v201109/download_report.rb +0 -76
- data/examples/v201109/get_ad_group_bid_landscape.rb +0 -103
- data/examples/v201109/get_all_account_changes.rb +0 -146
- data/examples/v201109/get_all_active_ad_group_criteria.rb +0 -106
- data/examples/v201109/get_all_ad_group_criteria.rb +0 -98
- data/examples/v201109/get_all_ad_groups.rb +0 -94
- data/examples/v201109/get_all_campaign_targets.rb +0 -83
- data/examples/v201109/get_all_conversions.rb +0 -88
- data/examples/v201109/get_all_images.rb +0 -90
- data/examples/v201109/get_all_paused_campaigns.rb +0 -92
- data/examples/v201109/get_all_report_definitions.rb +0 -84
- data/examples/v201109/get_all_user_lists.rb +0 -87
- data/examples/v201109/get_bulk_mutate_job.rb +0 -106
- data/examples/v201109/get_campaign_alerts.rb +0 -103
- data/examples/v201109/get_criterion_bid_landscape.rb +0 -102
- data/examples/v201109/get_geo_location_info.rb +0 -108
- data/examples/v201109/get_related_placements.rb +0 -114
- data/examples/v201109/get_report_fields.rb +0 -81
- data/examples/v201109/perform_bulk_mutate_job.rb +0 -222
- data/examples/v201109/update_ad.rb +0 -95
- data/examples/v201109/update_ad_group.rb +0 -90
- data/examples/v201109/update_ad_group_criterion.rb +0 -108
- data/examples/v201109/update_campaign.rb +0 -93
- data/examples/v201109/update_conversion.rb +0 -96
- data/examples/v201109/update_user_list.rb +0 -91
- data/examples/v201109/upload_image.rb +0 -97
data/ChangeLog
CHANGED
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
|
|
10
|
-
|
|
11
|
-
|
|
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.
|
|
31
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
$
|
|
168
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
70
|
+
campaign_id = 'INSERT_CAMPAIGN_ID_HERE'.to_i
|
|
71
|
+
add_ad_group(campaign_id)
|
|
74
72
|
|
|
75
|
-
#
|
|
76
|
-
rescue
|
|
77
|
-
puts
|
|
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
|
|
77
|
+
# API errors.
|
|
81
78
|
rescue AdwordsApi::Errors::ApiException => e
|
|
82
|
-
puts
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
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.
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
#
|
|
79
|
-
rescue
|
|
80
|
-
puts
|
|
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
|
|
88
|
+
# API errors.
|
|
84
89
|
rescue AdwordsApi::Errors::ApiException => e
|
|
85
|
-
puts
|
|
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
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
data/examples/{v201008/add_ad_group_criteria.rb → v201109/basic_operations/add_placements.rb}
RENAMED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
#!/usr/bin/ruby
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Encoding: utf-8
|
|
2
3
|
#
|
|
3
|
-
# Author:: api.
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
#
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
puts "
|
|
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
|
-
|
|
81
|
+
ad_group_id = 'INSERT_AD_GROUP_ID_HERE'.to_i
|
|
82
|
+
add_placements(ad_group_id)
|
|
76
83
|
|
|
77
|
-
#
|
|
78
|
-
rescue
|
|
79
|
-
puts
|
|
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
|
|
88
|
+
# API errors.
|
|
83
89
|
rescue AdwordsApi::Errors::ApiException => e
|
|
84
|
-
puts
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|