google-adwords-api 0.2.0 → 0.2.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 +1 -1
- data/Rakefile +4 -4
- data/adwords_api.yml +23 -6
- data/examples/v201101/handle_second_factor.rb +96 -0
- data/examples/v201101/oauth_handling.rb +104 -0
- data/lib/adwords_api.rb +67 -43
- data/lib/adwords_api/api_config.rb +3 -1
- data/lib/adwords_api/credential_handler.rb +55 -40
- data/lib/adwords_api/extensions.rb +1 -1
- data/lib/adwords_api/nested_header_handler.rb +47 -0
- data/lib/adwords_api/single_header_handler.rb +41 -0
- data/lib/adwords_api/soap4r/rake_common.rb +345 -0
- data/lib/adwords_api/soap4r/soap4r_generator.rb +564 -0
- data/lib/adwords_api/soap4r/soap4r_logger.rb +44 -0
- data/lib/adwords_api/soap4r/soap4r_patches.rb +210 -0
- data/lib/adwords_api/soap4r/soap4r_response_handler.rb +148 -0
- metadata +497 -489
- data/lib/adwords_api/soap4r_response_handler.rb +0 -121
data/ChangeLog
CHANGED
data/README
CHANGED
@@ -30,7 +30,7 @@ which is installed automatically as a dependency.
|
|
30
30
|
The following gem libraries are required:
|
31
31
|
- soap4r v1.5.8
|
32
32
|
- httpclient v2.1.2 or greater
|
33
|
-
- google-ads-common v0.
|
33
|
+
- google-ads-common v0.5.0 or later.
|
34
34
|
|
35
35
|
|
36
36
|
== 2 - Using the client library:
|
data/Rakefile
CHANGED
@@ -25,10 +25,10 @@ $:.unshift File.join(File.dirname(__FILE__), 'lib')
|
|
25
25
|
|
26
26
|
require 'rubygems'
|
27
27
|
gem 'google-ads-common'
|
28
|
-
require 'ads_common/build/soap4r_generator'
|
29
28
|
require 'ads_common/config'
|
30
29
|
require 'adwords_api/api_config'
|
31
30
|
require 'adwords_api/extensions'
|
31
|
+
require 'adwords_api/soap4r/soap4r_generator'
|
32
32
|
|
33
33
|
# Configure some constants and built-in tasks
|
34
34
|
$PROJECT_NAME = 'adwords_api'
|
@@ -36,7 +36,7 @@ $GEM_NAME = 'google-adwords-api'
|
|
36
36
|
$API_NAME = 'AdWords API'
|
37
37
|
$CURRENT_VERSION = AdwordsApi::ApiConfig::CLIENT_LIB_VERSION
|
38
38
|
$PRODDIR = 'adwords_api'
|
39
|
-
$ADS_COMMON_VERSION = '~> 0.
|
39
|
+
$ADS_COMMON_VERSION = '~> 0.5.0'
|
40
40
|
|
41
41
|
# Configure module / namespace
|
42
42
|
$MODULE = AdwordsApi
|
@@ -63,7 +63,7 @@ $GEM_HOMEPAGE = 'http://code.google.com/p/google-api-ads-ruby/'
|
|
63
63
|
module Generator
|
64
64
|
|
65
65
|
class << Generator
|
66
|
-
include
|
66
|
+
include AdwordsApi::Soap4r::Soap4rGenerator
|
67
67
|
end
|
68
68
|
|
69
69
|
def self.api_config
|
@@ -114,4 +114,4 @@ end
|
|
114
114
|
|
115
115
|
|
116
116
|
# Import tasks in common file
|
117
|
-
require '
|
117
|
+
require 'adwords_api/soap4r/rake_common'
|
data/adwords_api.yml
CHANGED
@@ -2,17 +2,34 @@
|
|
2
2
|
# This is an example configuration file for the AdWords API client library.
|
3
3
|
# Please fill in the required fields, and copy it over to your home directory.
|
4
4
|
:authentication:
|
5
|
+
# Authentication method, methods currently supported: OAuth, ClientLogin.
|
5
6
|
:method: ClientLogin
|
6
|
-
|
7
|
-
|
7
|
+
|
8
|
+
# Auth parameters for OAuth method.
|
9
|
+
# Set the OAuth consumer key and secret. Anonymous values can be used for
|
10
|
+
# testing, and real values can be obtained by registering your application:
|
11
|
+
# http://code.google.com/apis/accounts/docs/RegistrationForWebAppsAuto.html
|
12
|
+
#:oauth_consumer_key: anonymous
|
13
|
+
#:oauth_consumer_secret: anonymous
|
14
|
+
# If you manage or store access token manually, you can specify it here.
|
15
|
+
#:oauth_token: INSERT_OAUTH_TOKEN_HERE
|
16
|
+
# If you need to change signature method, specify it here.
|
17
|
+
#:oauth_signature_method: HMAC-SHA1
|
18
|
+
# Token secret for HMAC-SHA1 method.
|
19
|
+
#:oauth_token_secret: INSERT_OAUTH_TOKEN_SECRET_HERE
|
20
|
+
|
21
|
+
# Auth parameters for ClientLogin method.
|
8
22
|
:password: INSERT_YOUR_PASSWORD_HERE
|
9
23
|
:email: INSERT_YOUR_LOGIN_EMAIL_HERE
|
10
|
-
|
11
|
-
# If you would like to manage your auth tokens manually, use the 'auth_token'
|
12
|
-
# property.
|
24
|
+
# To manage your auth tokens manually, use the 'auth_token' property.
|
13
25
|
#:auth_token: INSERT_AUTH_TOKEN_HERE
|
26
|
+
|
27
|
+
# Other parameters.
|
28
|
+
:developer_token: INSERT_YOUR_DEVELOPER_TOKEN_HERE
|
29
|
+
:client_email: INSERT_YOUR_CLIENT_EMAIL_HERE
|
30
|
+
:user_agent: INSERT_YOUR_USER_AGENT_HERE
|
14
31
|
:service:
|
15
|
-
:environment:
|
32
|
+
:environment: SANDBOX
|
16
33
|
:connection:
|
17
34
|
:strict_ssl_verification: false
|
18
35
|
# If your proxy connection requires authentication, make sure to include it in
|
@@ -0,0 +1,96 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
4
|
+
#
|
5
|
+
# Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
|
6
|
+
#
|
7
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
16
|
+
# implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
# This example illustrates how to handle 2 factor authorization errors.
|
21
|
+
|
22
|
+
require 'rubygems'
|
23
|
+
gem 'google-adwords-api'
|
24
|
+
require 'adwords_api'
|
25
|
+
|
26
|
+
API_VERSION = :v201101
|
27
|
+
|
28
|
+
def handle_second_factor()
|
29
|
+
# Set up credentials with an account that has 2Factor enabled.
|
30
|
+
config = {
|
31
|
+
:authentication => {
|
32
|
+
:method => 'ClientLogin',
|
33
|
+
:email => '2steptester@gmail.com',
|
34
|
+
:password => 'testaccount',
|
35
|
+
:user_agent => 'Ruby 2 Factor Sample'
|
36
|
+
},
|
37
|
+
:service => {
|
38
|
+
:environment => 'PRODUCTION'
|
39
|
+
}
|
40
|
+
}
|
41
|
+
adwords = AdwordsApi::Api.new(config)
|
42
|
+
|
43
|
+
# To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
|
44
|
+
# the configuration file or provide your own logger:
|
45
|
+
# adwords.logger = Logger.new('adwords_xml.log')
|
46
|
+
|
47
|
+
begin
|
48
|
+
# Forcing library to request authorization token.
|
49
|
+
auth_token = adwords.authorize()
|
50
|
+
puts 'Successfully retrieved the token.'
|
51
|
+
|
52
|
+
# Second factor error is one of AuthErrors.
|
53
|
+
rescue AdsCommon::Errors::AuthError => e
|
54
|
+
puts "Authorization failed with message:"
|
55
|
+
puts "\t%s" % e.message
|
56
|
+
# Checking 'Info' field for particular auth error type.
|
57
|
+
if e.info and e.info.casecmp('InvalidSecondFactor') == 0
|
58
|
+
puts "The user has enabled two factor authentication in this account." +
|
59
|
+
" Please use OAuth authentication method or have the user generate an" +
|
60
|
+
" application-specific password to make calls against the AdWords" +
|
61
|
+
" API. See \n" +
|
62
|
+
" http://adwordsapi.blogspot.com/2011/02/authentication-changes-with" +
|
63
|
+
"-2-step.html\n" +
|
64
|
+
"for more details."
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
if __FILE__ == $0
|
70
|
+
begin
|
71
|
+
handle_second_factor()
|
72
|
+
|
73
|
+
# Connection error. Likely transitory.
|
74
|
+
rescue Errno::ECONNRESET, SOAP::HTTPStreamError, SocketError => e
|
75
|
+
puts 'Connection Error: %s' % e
|
76
|
+
puts 'Source: %s' % e.backtrace.first
|
77
|
+
|
78
|
+
# API Error.
|
79
|
+
rescue AdwordsApi::Errors::ApiException => e
|
80
|
+
puts 'API Exception caught.'
|
81
|
+
puts 'Message: %s' % e.message
|
82
|
+
puts 'Code: %d' % e.code if e.code
|
83
|
+
puts 'Trigger: %s' % e.trigger if e.trigger
|
84
|
+
puts 'Errors:'
|
85
|
+
if e.errors
|
86
|
+
e.errors.each_with_index do |error, index|
|
87
|
+
puts ' %d. Error type is %s. Fields:' % [index + 1, error[:xsi_type]]
|
88
|
+
error.each_pair do |field, value|
|
89
|
+
if field != :xsi_type
|
90
|
+
puts ' %s: %s' % [field, value]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
4
|
+
#
|
5
|
+
# Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
|
6
|
+
#
|
7
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
8
|
+
# you may not use this file except in compliance with the License.
|
9
|
+
# You may obtain a copy of the License at
|
10
|
+
#
|
11
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
#
|
13
|
+
# Unless required by applicable law or agreed to in writing, software
|
14
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
16
|
+
# implied.
|
17
|
+
# See the License for the specific language governing permissions and
|
18
|
+
# limitations under the License.
|
19
|
+
#
|
20
|
+
# This example illustrates how to use OAuth authentication method.
|
21
|
+
#
|
22
|
+
# Tags: CampaignService.get
|
23
|
+
|
24
|
+
require 'rubygems'
|
25
|
+
gem 'google-adwords-api'
|
26
|
+
require 'adwords_api'
|
27
|
+
|
28
|
+
API_VERSION = :v201101
|
29
|
+
MAX_RETRIES = 3
|
30
|
+
|
31
|
+
def oauth_handling()
|
32
|
+
# AdwordsApi::Api will read a config file from ENV['HOME']/adwords_api.yml
|
33
|
+
# when called without parameters.
|
34
|
+
adwords = AdwordsApi::Api.new
|
35
|
+
|
36
|
+
# To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
|
37
|
+
# the configuration file or provide your own logger:
|
38
|
+
# adwords.logger = Logger.new('adwords_xml.log')
|
39
|
+
|
40
|
+
campaign_srv = adwords.service(:CampaignService, API_VERSION)
|
41
|
+
|
42
|
+
# Get all the campaigns for this account; empty selector.
|
43
|
+
selector = {
|
44
|
+
:fields => ['Id', 'Name', 'Status'],
|
45
|
+
:ordering => [{:field => 'Name', :sort_order => 'ASCENDING'}]
|
46
|
+
}
|
47
|
+
|
48
|
+
retry_count = 0
|
49
|
+
|
50
|
+
begin
|
51
|
+
response = campaign_srv.get(selector)
|
52
|
+
rescue AdsCommon::Errors::OAuthVerificationRequired => e
|
53
|
+
if retry_count < MAX_RETRIES
|
54
|
+
puts "Hit Auth error, please navigate to URL:\n\t%s" % e.oauth_url
|
55
|
+
print 'log in and type the verification code: '
|
56
|
+
verification_code = gets.chomp
|
57
|
+
adwords.credential_handler.set_credential(
|
58
|
+
:oauth_verification_code, verification_code)
|
59
|
+
retry_count += 1
|
60
|
+
retry
|
61
|
+
else
|
62
|
+
raise AdsCommon::Errors::AuthError, 'Failed to authenticate.'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
if response and response[:entries]
|
67
|
+
campaigns = response[:entries]
|
68
|
+
campaigns.each do |campaign|
|
69
|
+
puts "Campaign name is \"#{campaign[:name]}\", id is #{campaign[:id]} " +
|
70
|
+
"and status is \"#{campaign[:status]}\"."
|
71
|
+
end
|
72
|
+
else
|
73
|
+
puts "No campaigns were found."
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
if __FILE__ == $0
|
78
|
+
begin
|
79
|
+
oauth_handling()
|
80
|
+
|
81
|
+
# Connection error. Likely transitory.
|
82
|
+
rescue Errno::ECONNRESET, SOAP::HTTPStreamError, SocketError => e
|
83
|
+
puts 'Connection Error: %s' % e
|
84
|
+
puts 'Source: %s' % e.backtrace.first
|
85
|
+
|
86
|
+
# API Error.
|
87
|
+
rescue AdwordsApi::Errors::ApiException => e
|
88
|
+
puts 'API Exception caught.'
|
89
|
+
puts 'Message: %s' % e.message
|
90
|
+
puts 'Code: %d' % e.code if e.code
|
91
|
+
puts 'Trigger: %s' % e.trigger if e.trigger
|
92
|
+
puts 'Errors:'
|
93
|
+
if e.errors
|
94
|
+
e.errors.each_with_index do |error, index|
|
95
|
+
puts ' %d. Error type is %s. Fields:' % [index + 1, error[:xsi_type]]
|
96
|
+
error.each_pair do |field, value|
|
97
|
+
if field != :xsi_type
|
98
|
+
puts ' %s: %s' % [field, value]
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
data/lib/adwords_api.rb
CHANGED
@@ -22,22 +22,21 @@
|
|
22
22
|
|
23
23
|
require 'rubygems'
|
24
24
|
gem 'soap4r', '=1.5.8'
|
25
|
-
gem 'google-ads-common', '~>0.
|
25
|
+
gem 'google-ads-common', '~>0.5.0'
|
26
26
|
require 'thread'
|
27
27
|
require 'uri'
|
28
|
-
require 'ads_common/soap4r_patches'
|
29
28
|
require 'ads_common/api'
|
30
|
-
require 'ads_common/config'
|
31
29
|
require 'ads_common/auth/client_login_handler'
|
32
|
-
require 'ads_common/soap4r_headers/nested_header_handler'
|
33
|
-
require 'ads_common/soap4r_headers/single_header_handler'
|
34
|
-
require 'ads_common/soap4r_logger'
|
35
30
|
require 'adwords_api/auth/v13_login_handler'
|
36
31
|
require 'adwords_api/errors'
|
37
32
|
require 'adwords_api/api_config'
|
38
33
|
require 'adwords_api/extensions'
|
39
|
-
require 'adwords_api/soap4r_response_handler'
|
40
34
|
require 'adwords_api/credential_handler'
|
35
|
+
require 'adwords_api/nested_header_handler'
|
36
|
+
require 'adwords_api/single_header_handler'
|
37
|
+
require 'adwords_api/soap4r/soap4r_logger'
|
38
|
+
require 'adwords_api/soap4r/soap4r_patches'
|
39
|
+
require 'adwords_api/soap4r/soap4r_response_handler'
|
41
40
|
require 'adwords_api/utils'
|
42
41
|
|
43
42
|
# Main namespace for all the client library's modules and classes.
|
@@ -55,11 +54,6 @@ module AdwordsApi
|
|
55
54
|
# Number of units spent in total, via this API object
|
56
55
|
attr_accessor :total_units
|
57
56
|
|
58
|
-
# Accessor for client login handler, so that we can access the token.
|
59
|
-
attr_accessor :client_login_handler
|
60
|
-
|
61
|
-
public
|
62
|
-
|
63
57
|
# Getter for the API service configurations
|
64
58
|
def api_config
|
65
59
|
AdwordsApi::ApiConfig
|
@@ -68,7 +62,7 @@ module AdwordsApi
|
|
68
62
|
# Auxiliary method to create a new Soap4rResponseHandler, of the type we
|
69
63
|
# want to use for AdWords logging
|
70
64
|
def create_callback_handler
|
71
|
-
AdwordsApi::Soap4rResponseHandler.new(self)
|
65
|
+
AdwordsApi::Soap4r::Soap4rResponseHandler.new(self)
|
72
66
|
end
|
73
67
|
|
74
68
|
# Retrieve single NestedHeaderHandler for v20xx and one SingleHeaderHandler
|
@@ -79,27 +73,33 @@ module AdwordsApi
|
|
79
73
|
# handle authentication
|
80
74
|
# - header_list: the list of headers to be handled
|
81
75
|
# - version: intended API version
|
82
|
-
# -
|
76
|
+
# - namespace: namespace to use as default for body
|
83
77
|
#
|
84
78
|
# Returns:
|
85
79
|
# - a list of SOAP header handlers; one per provided header
|
86
80
|
#
|
87
|
-
def soap_header_handlers(auth_handler, header_list, version,
|
81
|
+
def soap_header_handlers(auth_handler, header_list, version, namespace)
|
88
82
|
if version == :v13
|
89
|
-
header_handlers =
|
90
|
-
|
91
|
-
|
92
|
-
@credential_handler, auth_handler, header, nil, version)
|
83
|
+
header_handlers = header_list.map do |header|
|
84
|
+
AdwordsApi::SingleHeaderHandler.new(@credential_handler, auth_handler,
|
85
|
+
header, nil, version)
|
93
86
|
end
|
94
87
|
return header_handlers
|
95
88
|
else
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
89
|
+
auth_method = @config.read('authentication.method',
|
90
|
+
'ClientLogin').to_s.upcase.to_sym
|
91
|
+
handlers = case auth_method
|
92
|
+
when :CLIENTLOGIN
|
93
|
+
ns = api_config.headers_config[:HEADER_NAMESPACE_PREAMBLE] +
|
94
|
+
version.to_s
|
95
|
+
[AdwordsApi::NestedHeaderHandler.new(@credential_handler,
|
96
|
+
auth_handler, api_config.headers_config[:REQUEST_HEADER],
|
97
|
+
namespace, ns, version)]
|
98
|
+
when :OAUTH
|
99
|
+
raise NotImplementedError, 'OAuth authentication method is not ' +
|
100
|
+
'supported for Soap4r backend.'
|
101
|
+
end
|
102
|
+
return handlers
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
@@ -107,12 +107,34 @@ module AdwordsApi
|
|
107
107
|
def initialize(provided_config = nil)
|
108
108
|
super(provided_config)
|
109
109
|
@credential_handler = AdwordsApi::CredentialHandler.new(@config)
|
110
|
-
@drivers =
|
110
|
+
@drivers = {}
|
111
111
|
@total_units = 0
|
112
112
|
@last_units = 0
|
113
113
|
@mutex = Mutex.new
|
114
114
|
end
|
115
115
|
|
116
|
+
# Accessor for client login handler, so that we can access the token.
|
117
|
+
# This is a temporary solution for v13 and for v2009+ until full OAuth
|
118
|
+
# support is available.
|
119
|
+
def client_login_handler()
|
120
|
+
if @client_login_handler.nil?
|
121
|
+
auth_method_str = @config.read('authentication.method', 'ClientLogin')
|
122
|
+
auth_method = auth_method_str.to_s.upcase.to_sym
|
123
|
+
environment = @config.read('service.environment')
|
124
|
+
if auth_method == :CLIENTLOGIN
|
125
|
+
# We use client login, so we can reuse general AuthHandler.
|
126
|
+
@client_login_handler = get_auth_handler(environment, nil)
|
127
|
+
else
|
128
|
+
# We are using OAuth or something else and need to generate a handler.
|
129
|
+
auth_server = api_config.auth_server(environment)
|
130
|
+
@client_login_handler = AdsCommon::Auth::ClientLoginHandler.new(
|
131
|
+
@config, auth_server,
|
132
|
+
api_config.headers_config[:LOGIN_SERVICE_NAME])
|
133
|
+
end
|
134
|
+
end
|
135
|
+
return @client_login_handler
|
136
|
+
end
|
137
|
+
|
116
138
|
# Helper method to provide a simple way of doing an MCC-level operation
|
117
139
|
# without the need to change credentials. Executes a block of code as an
|
118
140
|
# MCC-level operation and/or returns the current status of the property.
|
@@ -219,28 +241,29 @@ module AdwordsApi
|
|
219
241
|
|
220
242
|
private
|
221
243
|
|
244
|
+
# Overrides AdsCommon::Api.get_auth_handler to allow version-specific
|
245
|
+
# handlers.
|
246
|
+
def get_auth_handler(environment, version = nil)
|
247
|
+
if @auth_handler.nil?
|
248
|
+
@auth_handler = create_auth_handler(environment, version)
|
249
|
+
end
|
250
|
+
return @auth_handler
|
251
|
+
end
|
252
|
+
|
222
253
|
# Creates an appropriate authentication handler for each service (reuses the
|
223
254
|
# ClientLogin one to avoid generating multiple tokens unnecessarily).
|
224
255
|
#
|
225
256
|
# Args:
|
226
|
-
# - version: intended API version
|
227
257
|
# - environment: the current working environment (production, sandbox, etc.)
|
258
|
+
# - version: intended API version
|
228
259
|
#
|
229
260
|
# Returns:
|
230
261
|
# - auth handler
|
231
262
|
#
|
232
|
-
def create_auth_handler(environment, version)
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
if @client_login_handler.nil?
|
237
|
-
auth_server = api_config.auth_server(environment)
|
238
|
-
@client_login_handler =
|
239
|
-
AdsCommon::Auth::ClientLoginHandler.new(config, auth_server,
|
240
|
-
api_config.headers_config[:LOGIN_SERVICE_NAME])
|
241
|
-
end
|
242
|
-
return @client_login_handler
|
243
|
-
end
|
263
|
+
def create_auth_handler(environment, version = nil)
|
264
|
+
return (version == :v13) ?
|
265
|
+
AdwordsApi::Auth::V13LoginHandler.new :
|
266
|
+
super(environment)
|
244
267
|
end
|
245
268
|
|
246
269
|
# Handle loading of a single service.
|
@@ -271,12 +294,12 @@ module AdwordsApi
|
|
271
294
|
wrapper_class = api_config.wrapper_name(version, service)
|
272
295
|
wrapper = eval("#{wrapper_class}.new(driver, self)")
|
273
296
|
|
274
|
-
auth_handler =
|
297
|
+
auth_handler = get_auth_handler(environment, version)
|
275
298
|
header_list =
|
276
299
|
auth_handler.header_list(@credential_handler.credentials(version))
|
277
300
|
|
278
301
|
soap_handlers = soap_header_handlers(auth_handler, header_list, version,
|
279
|
-
wrapper)
|
302
|
+
wrapper.namespace)
|
280
303
|
|
281
304
|
soap_handlers.each do |handler|
|
282
305
|
driver.headerhandler << handler
|
@@ -285,7 +308,8 @@ module AdwordsApi
|
|
285
308
|
# Add response handler to this driver for API unit usage processing.
|
286
309
|
driver.callbackhandler = create_callback_handler
|
287
310
|
# Plug the wiredump to our XML logger.
|
288
|
-
driver.wiredump_dev =
|
311
|
+
driver.wiredump_dev =
|
312
|
+
AdwordsApi::Soap4r::Soap4rLogger.new(@logger, Logger::DEBUG)
|
289
313
|
driver.options['protocol.http.ssl_config.verify_mode'] = nil
|
290
314
|
proxy = config.read('connection.proxy')
|
291
315
|
driver.options['protocol.http.proxy'] = proxy if proxy
|