adwords4r 13.0.1 → 15.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Authors.txt +2 -1
- data/ChangeLog.txt +28 -0
- data/Copying.txt +1 -1
- data/{Licence.txt → License.txt} +1 -1
- data/Rakefile +49 -54
- data/Readme.txt +78 -24
- data/adwords.properties +1 -1
- data/examples/account_info.rb +20 -26
- data/examples/create_all.rb +51 -53
- data/examples/create_all_v200902.rb +204 -0
- data/examples/keyword_suggestions.rb +35 -38
- data/examples/multiple_versions.rb +167 -0
- data/examples/reports.rb +37 -75
- data/lib/adwords4r.rb +123 -123
- data/lib/adwords4r/adwordslogger.rb +56 -0
- data/lib/adwords4r/apiextensions.rb +79 -0
- data/lib/adwords4r/authtoken.rb +56 -0
- data/lib/adwords4r/credentials.rb +115 -19
- data/lib/adwords4r/services.rb +139 -14
- data/lib/adwords4r/soap4rpatches.rb +129 -0
- data/lib/adwords4r/v13/AccountService.rb +11 -11
- data/lib/adwords4r/v13/AccountServiceDriver.rb +7 -5
- data/lib/adwords4r/v13/AccountServiceMappingRegistry.rb +56 -56
- data/lib/adwords4r/v13/AdGroupService.rb +9 -9
- data/lib/adwords4r/v13/AdGroupServiceDriver.rb +11 -9
- data/lib/adwords4r/v13/AdGroupServiceMappingRegistry.rb +47 -47
- data/lib/adwords4r/v13/AdService.rb +37 -37
- data/lib/adwords4r/v13/AdServiceDriver.rb +12 -10
- data/lib/adwords4r/v13/AdServiceMappingRegistry.rb +148 -148
- data/lib/adwords4r/v13/CampaignService.rb +46 -25
- data/lib/adwords4r/v13/CampaignServiceDriver.rb +23 -13
- data/lib/adwords4r/v13/CampaignServiceMappingRegistry.rb +169 -135
- data/lib/adwords4r/v13/CriterionService.rb +19 -19
- data/lib/adwords4r/v13/CriterionServiceDriver.rb +11 -9
- data/lib/adwords4r/v13/CriterionServiceMappingRegistry.rb +90 -90
- data/lib/adwords4r/v13/InfoService.rb +3 -3
- data/lib/adwords4r/v13/InfoServiceDriver.rb +10 -8
- data/lib/adwords4r/v13/InfoServiceMappingRegistry.rb +29 -29
- data/lib/adwords4r/v13/KeywordToolService.rb +10 -10
- data/lib/adwords4r/v13/KeywordToolServiceDriver.rb +4 -2
- data/lib/adwords4r/v13/KeywordToolServiceMappingRegistry.rb +37 -37
- data/lib/adwords4r/v13/ReportService.rb +13 -13
- data/lib/adwords4r/v13/ReportServiceDriver.rb +9 -7
- data/lib/adwords4r/v13/ReportServiceMappingRegistry.rb +54 -54
- data/lib/adwords4r/v13/SiteSuggestionService.rb +15 -15
- data/lib/adwords4r/v13/SiteSuggestionServiceDriver.rb +6 -4
- data/lib/adwords4r/v13/SiteSuggestionServiceMappingRegistry.rb +57 -57
- data/lib/adwords4r/v13/TrafficEstimatorService.rb +17 -17
- data/lib/adwords4r/v13/TrafficEstimatorServiceDriver.rb +6 -4
- data/lib/adwords4r/v13/TrafficEstimatorServiceMappingRegistry.rb +96 -96
- data/lib/adwords4r/v200902/AdGroupAdService.rb +2021 -0
- data/lib/adwords4r/v200902/AdGroupAdServiceDriver.rb +63 -0
- data/lib/adwords4r/v200902/AdGroupAdServiceMappingRegistry.rb +2234 -0
- data/lib/adwords4r/v200902/AdGroupCriterionService.rb +1209 -0
- data/lib/adwords4r/v200902/AdGroupCriterionServiceDriver.rb +63 -0
- data/lib/adwords4r/v200902/AdGroupCriterionServiceMappingRegistry.rb +1434 -0
- data/lib/adwords4r/v200902/AdGroupService.rb +968 -0
- data/lib/adwords4r/{v12/KeywordToolServiceDriver.rb → v200902/AdGroupServiceDriver.rb} +15 -13
- data/lib/adwords4r/v200902/AdGroupServiceMappingRegistry.rb +1114 -0
- data/lib/adwords4r/v200902/CampaignCriterionService.rb +741 -0
- data/lib/adwords4r/v200902/CampaignCriterionServiceDriver.rb +63 -0
- data/lib/adwords4r/v200902/CampaignCriterionServiceMappingRegistry.rb +904 -0
- data/lib/adwords4r/v200902/CampaignService.rb +1249 -0
- data/lib/adwords4r/v200902/CampaignServiceDriver.rb +63 -0
- data/lib/adwords4r/v200902/CampaignServiceMappingRegistry.rb +1466 -0
- data/lib/adwords4r/v200902/CampaignTargetService.rb +1156 -0
- data/lib/adwords4r/v200902/CampaignTargetServiceDriver.rb +63 -0
- data/lib/adwords4r/v200902/CampaignTargetServiceMappingRegistry.rb +1304 -0
- data/setup.rb +0 -0
- metadata +57 -65
- data/lib/adwords4r/v12/AccountService.rb +0 -215
- data/lib/adwords4r/v12/AccountServiceDriver.rb +0 -69
- data/lib/adwords4r/v12/AccountServiceMappingRegistry.rb +0 -243
- data/lib/adwords4r/v12/AdGroupService.rb +0 -263
- data/lib/adwords4r/v12/AdGroupServiceDriver.rb +0 -109
- data/lib/adwords4r/v12/AdGroupServiceMappingRegistry.rb +0 -280
- data/lib/adwords4r/v12/AdService.rb +0 -769
- data/lib/adwords4r/v12/AdServiceDriver.rb +0 -125
- data/lib/adwords4r/v12/AdServiceMappingRegistry.rb +0 -813
- data/lib/adwords4r/v12/CampaignService.rb +0 -498
- data/lib/adwords4r/v12/CampaignServiceDriver.rb +0 -133
- data/lib/adwords4r/v12/CampaignServiceMappingRegistry.rb +0 -642
- data/lib/adwords4r/v12/CriterionService.rb +0 -445
- data/lib/adwords4r/v12/CriterionServiceDriver.rb +0 -117
- data/lib/adwords4r/v12/CriterionServiceMappingRegistry.rb +0 -509
- data/lib/adwords4r/v12/InfoService.rb +0 -242
- data/lib/adwords4r/v12/InfoServiceDriver.rb +0 -109
- data/lib/adwords4r/v12/InfoServiceMappingRegistry.rb +0 -228
- data/lib/adwords4r/v12/KeywordToolService.rb +0 -205
- data/lib/adwords4r/v12/KeywordToolServiceMappingRegistry.rb +0 -227
- data/lib/adwords4r/v12/ReportService.rb +0 -322
- data/lib/adwords4r/v12/ReportServiceDriver.rb +0 -101
- data/lib/adwords4r/v12/ReportServiceMappingRegistry.rb +0 -298
- data/lib/adwords4r/v12/SiteSuggestionService.rb +0 -242
- data/lib/adwords4r/v12/SiteSuggestionServiceDriver.rb +0 -77
- data/lib/adwords4r/v12/SiteSuggestionServiceMappingRegistry.rb +0 -271
- data/lib/adwords4r/v12/TrafficEstimatorService.rb +0 -312
- data/lib/adwords4r/v12/TrafficEstimatorServiceDriver.rb +0 -77
- data/lib/adwords4r/v12/TrafficEstimatorServiceMappingRegistry.rb +0 -483
data/Authors.txt
CHANGED
data/ChangeLog.txt
CHANGED
@@ -1,3 +1,31 @@
|
|
1
|
+
15.0.1
|
2
|
+
- Bugfix: added generation of ApiError exceptions upon SOAP faults.
|
3
|
+
|
4
|
+
15.0.0
|
5
|
+
- Added support for the v200902 sandbox.
|
6
|
+
- Added support for multiple API versions on the same AdWords::API object.
|
7
|
+
- Added request and SOAP XML file logging options.
|
8
|
+
This complements the previously existing SOAP XML console output.
|
9
|
+
- Moved API classes to their own version and service-dependent modules.
|
10
|
+
This is necessary for multiple version support.
|
11
|
+
- Moved API methods from the AdWords::API object to service wrappers.
|
12
|
+
This is necessary to avoid collisions between similarly named methods in different services.
|
13
|
+
- Added get_service method to AdWords::API to be able to access a particular version of a service.
|
14
|
+
It returns the service wrapper containing the API methods for that service.
|
15
|
+
- Added extensions mechanism, allowing for plugging of client-side methods into the wrapper objects.
|
16
|
+
This allows us to provide smart methods at the service level that simplify common tasks.
|
17
|
+
- Added report download helper method, via the extension mechanism above.
|
18
|
+
- Moved unit tracking to happen within AdWords::API instances.
|
19
|
+
This allows for correct tracking with multiple AdWords::API objects.
|
20
|
+
The methods have been renamed total_units and last_units to fit with the getter conventions.
|
21
|
+
- Made code style more coherent.
|
22
|
+
- Updated v13 code samples to work with new client library model.
|
23
|
+
- Added v200902 and multiple version code samples.
|
24
|
+
|
25
|
+
14.0.0
|
26
|
+
- Sérgio Gomes (api.sgomes@gmail.com) takes over as maintainer of this project.
|
27
|
+
- Removed support for v12 of the API, which has been deco'ed.
|
28
|
+
|
1
29
|
13.0.1
|
2
30
|
- Modified the file permissions on many of the files to make them world-readable.
|
3
31
|
|
data/Copying.txt
CHANGED
data/{Licence.txt → License.txt}
RENAMED
data/Rakefile
CHANGED
@@ -16,7 +16,7 @@ require 'lib/adwords4r/services'
|
|
16
16
|
|
17
17
|
CLOBBER.include('pkg')
|
18
18
|
|
19
|
-
CURRENT_VERSION = '
|
19
|
+
CURRENT_VERSION = '15.0.1'
|
20
20
|
PKG_VERSION = ENV['REL'] ? ENV['REL'] : CURRENT_VERSION
|
21
21
|
|
22
22
|
SRC_RB = FileList['lib/**/*.rb']
|
@@ -28,7 +28,7 @@ GENDIR = LIBDIR + '/adwords4r'
|
|
28
28
|
logger = Logger.new(STDERR)
|
29
29
|
|
30
30
|
CLEAN.include(WSDLDIR)
|
31
|
-
AdWords::Service.
|
31
|
+
AdWords::Service.get_versions.each do |v|
|
32
32
|
vname = "v#{v}"
|
33
33
|
CLEAN.include(File.join(GENDIR, vname))
|
34
34
|
end
|
@@ -38,37 +38,44 @@ task :default => [:getwsdl, :generate]
|
|
38
38
|
|
39
39
|
desc "gets the wsdl files for AdWords services"
|
40
40
|
task :getwsdl do
|
41
|
-
AdWords::Service.
|
41
|
+
AdWords::Service.get_versions.each do |v|
|
42
42
|
vname = "v#{v}"
|
43
43
|
mkdir_p File.join(WSDLDIR, vname)
|
44
|
-
AdWords::Service.
|
45
|
-
|
46
|
-
|
47
|
-
|
44
|
+
AdWords::Service.get_services(v).each do |s|
|
45
|
+
if v.to_i <= 13
|
46
|
+
save(getfile("adwords.google.com",
|
47
|
+
"/api/adwords/#{vname}/#{s}Service?wsdl"),
|
48
|
+
get_wsdl_file_name(vname, s))
|
49
|
+
else
|
50
|
+
save(getfile("adwords-sandbox.google.com",
|
51
|
+
"/api/adwords/cm/#{vname}/#{s}Service?wsdl"),
|
52
|
+
get_wsdl_file_name(vname, s))
|
53
|
+
end
|
54
|
+
end
|
48
55
|
end
|
49
56
|
end
|
50
57
|
|
51
58
|
desc "generates AdWords classes from the wsdl files"
|
52
59
|
task :generate do
|
53
|
-
AdWords::Service.
|
60
|
+
AdWords::Service.get_versions.each do |v|
|
54
61
|
vname = "v#{v}"
|
55
62
|
gendir = "#{LIBDIR}/adwords4r/#{vname}"
|
56
63
|
mkdir_p gendir
|
57
|
-
AdWords::Service.
|
64
|
+
AdWords::Service.get_services(v).each do |name|
|
58
65
|
worker = WSDL::SOAP::WSDL2Ruby.new
|
59
66
|
worker.logger = logger
|
60
|
-
worker.location =
|
67
|
+
worker.location = get_wsdl_file_name(vname,name)
|
61
68
|
worker.basedir = gendir
|
62
|
-
worker.opt.update(
|
69
|
+
worker.opt.update(get_wsdl_opt(vname,name))
|
63
70
|
worker.run
|
64
|
-
|
65
|
-
|
66
|
-
|
71
|
+
fix_import(v, File.join(gendir, "#{name}Driver.rb"))
|
72
|
+
fix_import(v, File.join(gendir, "#{name}MappingRegistry.rb"))
|
73
|
+
fix_import(v, File.join(gendir, "#{name}.rb"))
|
67
74
|
end
|
68
75
|
end
|
69
76
|
end
|
70
77
|
|
71
|
-
def
|
78
|
+
def fix_import(version, file)
|
72
79
|
vname = "v#{version}"
|
73
80
|
tempfile = file + '.tmp'
|
74
81
|
outfile = File.new(tempfile,"w")
|
@@ -86,25 +93,25 @@ def fixImport(version, file)
|
|
86
93
|
File.rename(tempfile, file)
|
87
94
|
end
|
88
95
|
|
89
|
-
def
|
96
|
+
def get_wsdl_opt(v,s)
|
90
97
|
optcmd= {}
|
91
98
|
s << "Service"
|
92
99
|
optcmd['classdef'] = s
|
93
100
|
optcmd['force'] = true
|
94
101
|
optcmd['mapping_registry'] = true
|
95
102
|
optcmd['driver'] = nil
|
96
|
-
|
103
|
+
|
97
104
|
# Causes soap4r to wrap the classes it outputs into the given modules
|
98
|
-
optcmd['module_path'] = ['AdWords', s]
|
105
|
+
optcmd['module_path'] = ['AdWords', v.capitalize, s]
|
99
106
|
return optcmd
|
100
107
|
end
|
101
108
|
|
102
|
-
def
|
109
|
+
def get_wsdl_file_name(v,s)
|
103
110
|
"#{WSDLDIR}/#{v}/#{s}.wsdl"
|
104
111
|
end
|
105
112
|
|
106
113
|
def getfile(host, path)
|
107
|
-
puts "getting https
|
114
|
+
puts "getting https://#{host}#{path}"
|
108
115
|
https = Net::HTTP.new(host, 443)
|
109
116
|
https.use_ssl = true
|
110
117
|
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
@@ -115,8 +122,8 @@ def fix_attribute(text, name, type)
|
|
115
122
|
text.gsub!(Regexp.new("#{name}=\"#{type}\""),"#{name}=\"xsd:#{type}\"")
|
116
123
|
end
|
117
124
|
|
118
|
-
def
|
119
|
-
['type', 'base'].each {|name|
|
125
|
+
def fix_wsdl(wsdl)
|
126
|
+
['type', 'base'].each {|name|
|
120
127
|
['long', 'string', 'date', 'int', 'boolean'].each {|type|
|
121
128
|
fix_attribute(wsdl, name, type)}}
|
122
129
|
schema_ns = "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\""
|
@@ -124,14 +131,13 @@ def fixWsdl(wsdl)
|
|
124
131
|
wsdl.gsub!(/(<wsdl:definitions[^>]*)>/, '\1 ' + schema_ns + '>')
|
125
132
|
end
|
126
133
|
return wsdl
|
127
|
-
#wsdl.gsub(/type=\"long\"/, 'type="xsd:long"')
|
128
134
|
end
|
129
135
|
|
130
136
|
# Saves this document to the specified @var path.
|
131
|
-
#doesn't create the file if contains markup for google 404 page
|
137
|
+
# doesn't create the file if contains markup for google 404 page
|
132
138
|
def save(content, path)
|
133
139
|
if content !~ /<H2>Error 404<\/H2>/
|
134
|
-
File::open(path, 'w') {|f| f.write(
|
140
|
+
File::open(path, 'w') {|f| f.write(fix_wsdl(content))}
|
135
141
|
end
|
136
142
|
end
|
137
143
|
|
@@ -140,60 +146,49 @@ end
|
|
140
146
|
# gem files.
|
141
147
|
|
142
148
|
PKG_FILES = FileList[
|
143
|
-
'*.*',
|
144
|
-
'Rakefile',
|
145
|
-
'lib/**/*.rb',
|
146
|
-
'examples/**/*.rb',
|
147
|
-
# 'test/**/*.rb',
|
149
|
+
'*.*',
|
150
|
+
'Rakefile',
|
151
|
+
'lib/**/*.rb',
|
152
|
+
'examples/**/*.rb',
|
148
153
|
'scripts/**/*.rb'
|
149
154
|
]
|
150
155
|
|
151
|
-
#puts PKG_FILES
|
152
|
-
|
153
156
|
PKG_FILES.exclude(/\._/)
|
154
157
|
|
155
158
|
if ! defined?(Gem)
|
156
159
|
puts "Package Target requires RubyGems"
|
157
160
|
else
|
158
161
|
spec = Gem::Specification.new do |s|
|
159
|
-
|
162
|
+
|
160
163
|
#### Basic information.
|
161
|
-
|
164
|
+
|
162
165
|
s.name = 'adwords4r'
|
163
166
|
s.version = PKG_VERSION
|
164
167
|
s.summary = "Client library for the AdWords API."
|
165
168
|
s.description = %{\
|
166
|
-
Adwords4r provides an easy to use way to access the AdWords API in
|
169
|
+
Adwords4r provides an easy to use way to access the AdWords API in Ruby.\
|
167
170
|
Currently the following AdWords API versions are supported:\
|
168
171
|
\
|
169
|
-
* V12\
|
170
172
|
* V13\
|
173
|
+
* V200902 (sandbox)
|
171
174
|
}
|
172
|
-
|
175
|
+
|
173
176
|
s.files = PKG_FILES.to_a
|
174
177
|
s.require_path = 'lib'
|
175
178
|
s.autorequire = 'adwords4r'
|
176
|
-
|
177
|
-
#s.test_files = PKG_FILES.select { |fn| fn =~ /^test\/test/ }
|
178
|
-
|
179
|
-
#s.has_rdoc = true
|
179
|
+
|
180
180
|
s.has_rdoc = false
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
s.author = "Jeffrey Posnick, Patrick Chanezon, Ryan Leavengood"
|
188
|
-
s.email = "jeffy@google.com"
|
189
|
-
s.homepage = "http://rubyforge.org/projects/google4r/"
|
190
|
-
s.requirements << 'soap4r v1.5.8 or greater'
|
181
|
+
|
182
|
+
s.author =
|
183
|
+
"Sergio Gomes, Jeffrey Posnick, Patrick Chanezon, Ryan Leavengood"
|
184
|
+
s.email = "api.sgomes@gmail.com"
|
185
|
+
s.homepage = "http://code.google.com/p/google-api-adwords-ruby/"
|
186
|
+
s.requirements << 'soap4r v1.5.8'
|
191
187
|
s.requirements << 'httpclient v2.1.2 or greater'
|
192
|
-
s.
|
193
|
-
s.add_dependency('soap4r', '>= 1.5.8')
|
188
|
+
s.add_dependency('soap4r', '= 1.5.8')
|
194
189
|
s.add_dependency('httpclient', '>= 2.1.2')
|
195
190
|
end
|
196
|
-
|
191
|
+
|
197
192
|
Rake::GemPackageTask.new(spec) do |t|
|
198
193
|
t.need_tar = true
|
199
194
|
end
|
data/Readme.txt
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
Google
|
1
|
+
Google adwords4r Library
|
2
2
|
-------------------------
|
3
3
|
|
4
|
-
Welcome to adwords4r: Bringing the delights of
|
4
|
+
Welcome to adwords4r: Bringing the delights of Ruby programming to the AdWords
|
5
|
+
world!
|
5
6
|
|
6
7
|
Documentation and comments are a work in progress.
|
7
8
|
|
@@ -9,26 +10,36 @@ Documentation and comments are a work in progress.
|
|
9
10
|
Useful Web Resources
|
10
11
|
--------------------
|
11
12
|
|
12
|
-
- AdWords home:
|
13
|
-
|
14
|
-
- AdWords API
|
15
|
-
|
13
|
+
- AdWords home:
|
14
|
+
https://adwords.google.com/
|
15
|
+
- AdWords API discussion forum:
|
16
|
+
http://groups.google.com/group/adwords-api
|
17
|
+
- AdWords API documentation:
|
18
|
+
http://code.google.com/apis/adwords/docs/developer/index.html
|
19
|
+
- This project's Google Code page:
|
20
|
+
http://code.google.com/p/google-api-adwords-ruby/
|
16
21
|
|
17
22
|
|
18
23
|
Docs for Users
|
19
24
|
--------------
|
20
25
|
|
26
|
+
1 - Instalation:
|
27
|
+
|
21
28
|
adwords4r is a ruby gem. See http://docs.rubygems.org/read/book/1
|
22
29
|
|
23
30
|
Install it using the gem install command.
|
24
|
-
> gem install --
|
31
|
+
> gem install --local adwords4r
|
25
32
|
|
26
33
|
The following gem libraries are required:
|
27
|
-
- soap4r v1.5.8
|
34
|
+
- soap4r v1.5.8
|
28
35
|
- httpclient v2.1.2 or greater
|
29
36
|
|
37
|
+
|
38
|
+
2 - Using the client library:
|
39
|
+
|
30
40
|
It's pretty easy to use.
|
31
|
-
See http://docs.rubygems.org/read/chapter/3#page70 for how to set the rubygem
|
41
|
+
See http://docs.rubygems.org/read/chapter/3#page70 for how to set the rubygem
|
42
|
+
environment.
|
32
43
|
export RUBYOPT=rubygems
|
33
44
|
or ruby -rubygems my_program_that_uses_gems
|
34
45
|
|
@@ -36,11 +47,12 @@ If you do not use the rubygems option, you need to add
|
|
36
47
|
require 'rubygems'
|
37
48
|
at the beginning of your programs.
|
38
49
|
|
39
|
-
Then
|
50
|
+
Then:
|
40
51
|
require 'adwords4r'
|
41
52
|
|
42
53
|
adwords = AdWords::API.new
|
43
|
-
creates a driver for the latest version of AdWords API using a credentials file
|
54
|
+
creates a driver for the latest version of AdWords API using a credentials file
|
55
|
+
in ENV['HOME']/adwords.properties
|
44
56
|
There is an example credentials in the root adwords4r directory.
|
45
57
|
You can also pass API a manually constructed AdWordsCredentials object like:
|
46
58
|
adwords = AdWords::API.new(AdWords::AdWordsCredentials.new({
|
@@ -52,21 +64,63 @@ adwords = AdWords::API.new(AdWords::AdWordsCredentials.new({
|
|
52
64
|
'clientEmail' => 'user2@domain.com',
|
53
65
|
}))
|
54
66
|
|
55
|
-
|
56
|
-
|
67
|
+
Then, just specify which service you're looking to use, and which version:
|
68
|
+
account_srv = adwords.get_service(13, 'Account')
|
69
|
+
|
70
|
+
and you should now be able to just use the API methods in the object you were
|
71
|
+
returned:
|
72
|
+
client_accounts = account_srv.getClientAccounts
|
73
|
+
|
74
|
+
See the code in the examples directory for working examples you can build from.
|
75
|
+
|
76
|
+
|
77
|
+
2.1 - Using the Sandbox:
|
78
|
+
|
79
|
+
In order to use the v13 sandbox, you can add a credential named alternateUrl:
|
80
|
+
alternateUrl=https://sandbox.google.com/api/adwords/v13/
|
57
81
|
|
58
|
-
|
59
|
-
|
60
|
-
|
82
|
+
As for v200902, the alternateUrl parameter is currently ignored, since only the
|
83
|
+
sandbox is available at the moment. For this API version, all requests will be
|
84
|
+
sent to the sandbox, using the "email" and "password" fields defined in the
|
85
|
+
credentials for authentication, and clientEmail for specifying which client
|
86
|
+
account to access. Developer and application tokens are ignored.
|
61
87
|
|
62
|
-
|
63
|
-
|
88
|
+
This way, it's possible to access both the v13 and v200902 sandboxes
|
89
|
+
simultaneously. Since they share a common backend storage, it is possible for
|
90
|
+
your application to choose between v13 and v200902 services at will, mixing and
|
91
|
+
matching them.
|
92
|
+
|
93
|
+
The multiple_versions.rb code sample shows you how to build an application using
|
94
|
+
v13 and v200902 services simultaneously.
|
95
|
+
|
96
|
+
|
97
|
+
2.2 - Logging:
|
64
98
|
|
65
99
|
It is often useful to see a trace of the raw SOAP XML being sent and received.
|
66
|
-
|
67
|
-
e.g. in the bash shell
|
68
|
-
|
69
|
-
|
100
|
+
The quickest way of achieving this when debugging your application is by setting
|
101
|
+
the ADWORDS4R_DEBUG environment variable to TRUE; e.g. in the bash shell:
|
102
|
+
export ADWORDS4R_DEBUG=TRUE
|
103
|
+
or from your Ruby code:
|
104
|
+
ENV['ADWORDS4R_DEBUG'] = 'TRUE'
|
105
|
+
|
106
|
+
This will output the SOAP XML to stderr, which will usually show up in your
|
107
|
+
terminal window.
|
108
|
+
|
109
|
+
There's also the option of logging requests and XML to files. In order to enable
|
110
|
+
this, you should use the write_to_file method of the loggers inside your
|
111
|
+
AdWords::API object:
|
112
|
+
adwords = AdWords::API.new
|
113
|
+
adwords.unit_logger.log_to_file
|
114
|
+
adwords.xml_logger.log_to_file
|
115
|
+
|
116
|
+
The first logs the units spent and the requests made, whereas the second logs
|
117
|
+
the full SOAP XML being sent and received over the wire. These will be written
|
118
|
+
to the current directory by default, but you can specify a path as an optional
|
119
|
+
parameter to log_to_file:
|
120
|
+
adwords.unit_logger.log_to_file('/var/log/my_app')
|
121
|
+
adwords.xml_logger.log_to_file('/var/log/my_app')
|
122
|
+
|
123
|
+
The files will be named request_info and soap_xml, respectively.
|
70
124
|
|
71
125
|
|
72
126
|
Docs for Developers
|
@@ -78,12 +132,12 @@ rake generate
|
|
78
132
|
to regenerate the bindings if needed
|
79
133
|
rake package
|
80
134
|
to package the gem and create a release
|
81
|
-
|
135
|
+
|
82
136
|
|
83
137
|
Copyright/License Info
|
84
138
|
----------------------
|
85
139
|
|
86
|
-
Copyright
|
140
|
+
Copyright 2009, Google Inc. All Rights Reserved.
|
87
141
|
|
88
142
|
Licensed under the Apache License, Version 2.0 (the "License");
|
89
143
|
you may not use this file except in compliance with the License.
|
data/adwords.properties
CHANGED
data/examples/account_info.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/ruby
|
2
2
|
#
|
3
|
-
# Copyright
|
3
|
+
# Copyright 2009, Google Inc. All Rights Reserved.
|
4
4
|
#
|
5
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
6
6
|
# you may not use this file except in compliance with the License.
|
@@ -18,7 +18,7 @@
|
|
18
18
|
# MCC account, and then iteratively retrieves information about each account.
|
19
19
|
|
20
20
|
require 'rubygems'
|
21
|
-
gem 'soap4r', '
|
21
|
+
gem 'soap4r', '= 1.5.8'
|
22
22
|
require 'adwords4r'
|
23
23
|
|
24
24
|
|
@@ -38,30 +38,30 @@ def main()
|
|
38
38
|
# specified inline as a hash:
|
39
39
|
#
|
40
40
|
# creds = {
|
41
|
-
#
|
42
|
-
#
|
43
|
-
#
|
44
|
-
#
|
45
|
-
#
|
46
|
-
#
|
47
|
-
#
|
41
|
+
# 'developerToken' => 'user@domain.com++USD',
|
42
|
+
# 'useragent' => 'Sample User Agent',
|
43
|
+
# 'password' => 'password',
|
44
|
+
# 'email' => 'user@domain.com',
|
45
|
+
# 'clientEmail' => 'client_1+user@domain.com',
|
46
|
+
# 'applicationToken' => 'IGNORED',
|
47
|
+
# 'alternateUrl' => 'https://sandbox.google.com/api/adwords/v13/',
|
48
48
|
# }
|
49
|
-
# adwords = AdWords::API.new(AdWords::AdWordsCredentials.new(creds)
|
50
|
-
|
49
|
+
# adwords = AdWords::API.new(AdWords::AdWordsCredentials.new(creds))
|
51
50
|
adwords = AdWords::API.new
|
52
51
|
|
53
52
|
# Clear out the clientEmail header temporarily so that we run under the
|
54
53
|
# context of the MCC user.
|
55
|
-
adwords.credentials.
|
54
|
+
adwords.credentials.set_header('clientEmail', '')
|
56
55
|
|
57
|
-
|
56
|
+
account_srv = adwords.get_service(13, 'Account')
|
57
|
+
client_accounts = account_srv.getClientAccounts
|
58
58
|
|
59
59
|
if client_accounts.length > 0 then
|
60
60
|
client_accounts.each do |client_account|
|
61
61
|
# Set the clientEmail header to each account's login email so that API
|
62
62
|
# calls are made in the context of that account.
|
63
|
-
adwords.credentials.
|
64
|
-
account_info =
|
63
|
+
adwords.credentials.set_header('clientEmail', client_account)
|
64
|
+
account_info = account_srv.getAccountInfo.getAccountInfoReturn
|
65
65
|
|
66
66
|
puts 'Client Email: %s' % client_account
|
67
67
|
if ! account_info.descriptiveName.empty? then
|
@@ -77,16 +77,14 @@ def main()
|
|
77
77
|
rescue Errno::ECONNRESET, SOAP::HTTPStreamError, SocketError => e
|
78
78
|
# This exception indicates a connection-level error.
|
79
79
|
# In general, it is likely to be transitory.
|
80
|
-
|
81
80
|
puts 'Connection Error: %s' % e
|
82
81
|
puts 'Source: %s' % e.backtrace.first
|
83
|
-
|
82
|
+
|
84
83
|
rescue AdWords::Error::UnknownAPICall => e
|
85
84
|
# This exception is thrown when an unknown SOAP method is invoked.
|
86
|
-
|
87
85
|
puts e
|
88
86
|
puts 'Source: %s' % e.backtrace.first
|
89
|
-
|
87
|
+
|
90
88
|
rescue AdWords::Error::ApiError => e
|
91
89
|
# This exception maps to receiving a SOAP Fault back from the service.
|
92
90
|
# The e.soap_faultstring_ex, e.code_ex, and potentially e.trigger_ex
|
@@ -99,7 +97,6 @@ def main()
|
|
99
97
|
# puts '%s => %s' % [var, value]
|
100
98
|
# end
|
101
99
|
# end
|
102
|
-
|
103
100
|
puts 'SOAP Error: %s (code: %d)' % [e.soap_faultstring_ex, e.code_ex]
|
104
101
|
puts 'Trigger: %s' % e.trigger_ex unless e.trigger_ex.nil?
|
105
102
|
puts 'Source: %s' % e.backtrace.first
|
@@ -107,13 +104,11 @@ def main()
|
|
107
104
|
ensure
|
108
105
|
# Display API unit usage info. This data is stored as a class variable
|
109
106
|
# in the AdWords::API class and accessed via static methods.
|
110
|
-
#
|
111
|
-
# the
|
112
|
-
# AdWords::API.get_last_units() returns the number used in the last call.
|
113
|
-
|
107
|
+
# total_units() returns a running total of units used in the scope of the
|
108
|
+
# current program. last_units() returns the number used in the last call.
|
114
109
|
puts
|
115
110
|
puts '%d API units consumed total (%d in last call).' %
|
116
|
-
|
111
|
+
[adwords.total_units, adwords.last_units]
|
117
112
|
end
|
118
113
|
end
|
119
114
|
|
@@ -124,7 +119,6 @@ if __FILE__ == $0
|
|
124
119
|
# To enable this, set the ADWORDS4R_DEBUG environement varaible to 'true'.
|
125
120
|
# This can be done either from your operating system environment or via
|
126
121
|
# code, as done below.
|
127
|
-
|
128
122
|
ENV['ADWORDS4R_DEBUG'] = 'false'
|
129
123
|
|
130
124
|
main()
|