bing_ads_api 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +57 -0
- data/lib/ads_common_for_bing_ads.rb +49 -0
- data/lib/ads_common_for_bing_ads/api_config.rb +41 -0
- data/lib/ads_common_for_bing_ads/auth/client_login_handler.rb +168 -0
- data/lib/ads_common_for_bing_ads/build/savon_registry.rb +15 -0
- data/lib/ads_common_for_bing_ads/parameters_validator.rb +36 -0
- data/lib/ads_common_for_bing_ads/savon_headers_base_header_handler.rb +9 -0
- data/lib/ads_common_for_bing_ads/savon_service.rb +141 -0
- data/lib/bing_ads_api.rb +175 -0
- data/lib/bing_ads_api/api_config.rb +162 -0
- data/lib/bing_ads_api/client_login_header_handler.rb +21 -0
- data/lib/bing_ads_api/credential_handler.rb +91 -0
- data/lib/bing_ads_api/errors.rb +564 -0
- data/lib/bing_ads_api/report_header_handler.rb +46 -0
- data/lib/bing_ads_api/report_utils.rb +202 -0
- data/lib/bing_ads_api/v7/administration_service.rb +37 -0
- data/lib/bing_ads_api/v7/administration_service_registry.rb +30 -0
- data/lib/bing_ads_api/v7/campaign_management_service.rb +398 -0
- data/lib/bing_ads_api/v7/campaign_management_service_registry.rb +30 -0
- data/lib/bing_ads_api/v7/customer_billing_service.rb +58 -0
- data/lib/bing_ads_api/v7/customer_billing_service_registry.rb +30 -0
- data/lib/bing_ads_api/v7/customer_management_service.rb +98 -0
- data/lib/bing_ads_api/v7/customer_management_service_registry.rb +30 -0
- data/lib/bing_ads_api/v7/notification_service.rb +38 -0
- data/lib/bing_ads_api/v7/notification_service_registry.rb +30 -0
- data/lib/bing_ads_api/v7/reporting_service.rb +38 -0
- data/lib/bing_ads_api/v7/reporting_service_registry.rb +30 -0
- data/lib/bing_ads_api/v8/ad_intelligence_service.rb +86 -0
- data/lib/bing_ads_api/v8/ad_intelligence_service_registry.rb +30 -0
- data/lib/bing_ads_api/v8/administration_service.rb +38 -0
- data/lib/bing_ads_api/v8/administration_service_registry.rb +30 -0
- data/lib/bing_ads_api/v8/bulk_service.rb +42 -0
- data/lib/bing_ads_api/v8/bulk_service_registry.rb +30 -0
- data/lib/bing_ads_api/v8/campaign_management_service.rb +390 -0
- data/lib/bing_ads_api/v8/campaign_management_service_registry.rb +30 -0
- data/lib/bing_ads_api/v8/customer_billing_service.rb +62 -0
- data/lib/bing_ads_api/v8/customer_billing_service_registry.rb +30 -0
- data/lib/bing_ads_api/v8/customer_management_service.rb +162 -0
- data/lib/bing_ads_api/v8/customer_management_service_registry.rb +30 -0
- data/lib/bing_ads_api/v8/notification_service.rb +38 -0
- data/lib/bing_ads_api/v8/notification_service_registry.rb +30 -0
- data/lib/bing_ads_api/v8/optimizer_service.rb +46 -0
- data/lib/bing_ads_api/v8/optimizer_service_registry.rb +30 -0
- data/lib/bing_ads_api/v8/reporting_service.rb +38 -0
- data/lib/bing_ads_api/v8/reporting_service_registry.rb +30 -0
- data/lib/bing_ads_api/version.rb +5 -0
- data/rakefile.rb +54 -0
- metadata +156 -0
data/lib/bing_ads_api.rb
ADDED
@@ -0,0 +1,175 @@
|
|
1
|
+
require 'savon'
|
2
|
+
require 'httpi'
|
3
|
+
require 'active_support/inflector'
|
4
|
+
|
5
|
+
require 'ads_common_for_bing_ads'
|
6
|
+
require 'ads_common_for_bing_ads/api_config'
|
7
|
+
require 'ads_common_for_bing_ads/parameters_validator'
|
8
|
+
require 'ads_common_for_bing_ads/auth/client_login_handler'
|
9
|
+
require 'ads_common_for_bing_ads/savon_service'
|
10
|
+
require 'ads_common_for_bing_ads/savon_headers_base_header_handler'
|
11
|
+
require 'bing_ads_api/api_config'
|
12
|
+
require 'bing_ads_api/client_login_header_handler'
|
13
|
+
require 'bing_ads_api/credential_handler'
|
14
|
+
require 'bing_ads_api/errors'
|
15
|
+
require 'bing_ads_api/report_utils'
|
16
|
+
|
17
|
+
module BingAdsApi
|
18
|
+
|
19
|
+
# Wrapper class that serves as the main point of access for all the API usage.
|
20
|
+
#
|
21
|
+
# Holds all the services, as well as login credentials.
|
22
|
+
#
|
23
|
+
class Api < AdsCommonForBingAds::Api
|
24
|
+
|
25
|
+
# Constructor for API.
|
26
|
+
def initialize(provided_config = nil)
|
27
|
+
super(provided_config)
|
28
|
+
@credential_handler = BingAdsApi::CredentialHandler.new(@config)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Getter for the API service configurations
|
32
|
+
def api_config()
|
33
|
+
BingAdsApi::ApiConfig
|
34
|
+
end
|
35
|
+
|
36
|
+
# Retrieve correct soap_header_handler.
|
37
|
+
#
|
38
|
+
# Args:
|
39
|
+
# - auth_handler: instance of an AdsCommonForBingAds::Auth::BaseHandler subclass to
|
40
|
+
# handle authentication
|
41
|
+
# - version: intended API version
|
42
|
+
# - header_ns: header namespace
|
43
|
+
# - default_ns: default namespace
|
44
|
+
#
|
45
|
+
# Returns:
|
46
|
+
# - SOAP header handler
|
47
|
+
#
|
48
|
+
def soap_header_handler(auth_handler, version, header_ns, default_ns)
|
49
|
+
auth_method = @config.read('authentication.method', :CLIENTLOGIN)
|
50
|
+
handler_class = case auth_method
|
51
|
+
when :CLIENTLOGIN then BingAdsApi::ClientLoginHeaderHandler
|
52
|
+
when :OAUTH, :OAUTH2 then AdsCommonForBingAds::SavonHeaders::OAuthHeaderHandler
|
53
|
+
end
|
54
|
+
return handler_class.new(@credential_handler, auth_handler, header_ns, default_ns, version)
|
55
|
+
end
|
56
|
+
|
57
|
+
# Helper method to provide a simple way of doing an MCC-level operation
|
58
|
+
# without the need to change credentials. Executes a block of code as an
|
59
|
+
# MCC-level operation and/or returns the current status of the property.
|
60
|
+
#
|
61
|
+
# Args:
|
62
|
+
# - accepts a block, which it will execute as an MCC-level operation
|
63
|
+
#
|
64
|
+
# Returns:
|
65
|
+
# - block execution result, if block given
|
66
|
+
# - boolean indicating whether MCC-level operations are currently
|
67
|
+
# enabled or disabled, if no block provided
|
68
|
+
#
|
69
|
+
def use_mcc(&block)
|
70
|
+
return (block_given?) ?
|
71
|
+
run_with_temporary_flag(:@use_mcc, true, block) :
|
72
|
+
@credential_handler.use_mcc
|
73
|
+
end
|
74
|
+
|
75
|
+
# Helper method to provide a simple way of doing an MCC-level operation
|
76
|
+
# without the need to change credentials. Sets the value of the property
|
77
|
+
# that controls whether MCC-level operations are enabled or disabled.
|
78
|
+
#
|
79
|
+
# Args:
|
80
|
+
# - value: the new value for the property (boolean)
|
81
|
+
#
|
82
|
+
def use_mcc=(value)
|
83
|
+
@credential_handler.use_mcc = value
|
84
|
+
end
|
85
|
+
|
86
|
+
# Helper method to provide a simple way of doing a validate-only operation
|
87
|
+
# without the need to change credentials. Executes a block of code as an
|
88
|
+
# validate-only operation and/or returns the current status of the property.
|
89
|
+
#
|
90
|
+
# Args:
|
91
|
+
# - accepts a block, which it will execute as a validate-only operation
|
92
|
+
#
|
93
|
+
# Returns:
|
94
|
+
# - block execution result, if block given
|
95
|
+
# - boolean indicating whether validate-only operations are currently
|
96
|
+
# enabled or disabled, if no block provided
|
97
|
+
#
|
98
|
+
def validate_only(&block)
|
99
|
+
return (block_given?) ?
|
100
|
+
run_with_temporary_flag(:@validate_only, true, block) :
|
101
|
+
@credential_handler.validate_only
|
102
|
+
end
|
103
|
+
|
104
|
+
# Helper method to provide a simple way of performing validate-only
|
105
|
+
# operations. Sets the value of the property
|
106
|
+
# that controls whether validate-only operations are enabled or disabled.
|
107
|
+
#
|
108
|
+
# Args:
|
109
|
+
# - value: the new value for the property (boolean)
|
110
|
+
#
|
111
|
+
def validate_only=(value)
|
112
|
+
@credential_handler.validate_only = value
|
113
|
+
end
|
114
|
+
|
115
|
+
# Helper method to provide a simple way of performing requests with support
|
116
|
+
# for partial failures. Executes a block of code with partial failures
|
117
|
+
# enabled and/or returns the current status of the property.
|
118
|
+
#
|
119
|
+
# Args:
|
120
|
+
# - accepts a block, which it will execute as a partial failure operation
|
121
|
+
#
|
122
|
+
# Returns:
|
123
|
+
# - block execution result, if block given
|
124
|
+
# - boolean indicating whether partial failure operations are currently
|
125
|
+
# enabled or disabled, if no block provided
|
126
|
+
#
|
127
|
+
def partial_failure(&block)
|
128
|
+
return (block_given?) ?
|
129
|
+
run_with_temporary_flag(:@partial_failure, true, block) :
|
130
|
+
@credential_handler.partial_failure
|
131
|
+
end
|
132
|
+
|
133
|
+
# Helper method to provide a simple way of performing requests with support
|
134
|
+
# for partial failures.
|
135
|
+
#
|
136
|
+
# Args:
|
137
|
+
# - value: the new value for the property (boolean)
|
138
|
+
#
|
139
|
+
def partial_failure=(value)
|
140
|
+
@credential_handler.partial_failure = value
|
141
|
+
end
|
142
|
+
|
143
|
+
# Returns an instance of ReportUtils object with all utilities relevant to
|
144
|
+
# the reporting.
|
145
|
+
#
|
146
|
+
# Args:
|
147
|
+
# - version: version of the API to use (optional).
|
148
|
+
#
|
149
|
+
def report_utils(version = nil)
|
150
|
+
version = api_config.default_version if version.nil?
|
151
|
+
# Check if version exists.
|
152
|
+
if !api_config.versions.include?(version)
|
153
|
+
raise AdsCommonForBingAds::Errors::Error, "Unknown version '%s'" % version
|
154
|
+
end
|
155
|
+
return BingAdsApi::ReportUtils.new(self, version)
|
156
|
+
end
|
157
|
+
|
158
|
+
private
|
159
|
+
|
160
|
+
# Executes block with a temporary flag set to a given value. Returns block
|
161
|
+
# result.
|
162
|
+
def run_with_temporary_flag(flag_name, flag_value, block)
|
163
|
+
previous = @credential_handler.instance_variable_get(flag_name)
|
164
|
+
@credential_handler.instance_variable_set(flag_name, flag_value)
|
165
|
+
begin
|
166
|
+
return block.call
|
167
|
+
ensure
|
168
|
+
@credential_handler.instance_variable_set(flag_name, previous)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
|
174
|
+
|
175
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# Helper methods for loading and managing the available services in the Bing Ads API.
|
3
|
+
|
4
|
+
require 'bing_ads_api/version'
|
5
|
+
|
6
|
+
module BingAdsApi
|
7
|
+
|
8
|
+
# Contains helper methods for loading and managing the available services.
|
9
|
+
module ApiConfig
|
10
|
+
|
11
|
+
# Inherit from AdsCommonForBingAds::ApiConfig
|
12
|
+
class << ApiConfig
|
13
|
+
include AdsCommonForBingAds::ApiConfig
|
14
|
+
end
|
15
|
+
|
16
|
+
# Set defaults
|
17
|
+
DEFAULT_VERSION = :v8
|
18
|
+
DEFAULT_ENVIRONMENT = :PRODUCTION
|
19
|
+
LATEST_VERSION = :v8
|
20
|
+
|
21
|
+
# Set other constants
|
22
|
+
API_NAME = 'BingAdsApi'
|
23
|
+
DEFAULT_CONFIG_FILENAME = 'bing_ads_api.yml'
|
24
|
+
|
25
|
+
# Configure the services available to each version
|
26
|
+
@@service_config = {
|
27
|
+
:v7 => [
|
28
|
+
:AdministrationService,
|
29
|
+
:CampaignManagementService,
|
30
|
+
:CustomerBillingService,
|
31
|
+
:CustomerManagementService,
|
32
|
+
:NotificationService,
|
33
|
+
:ReportingService
|
34
|
+
],
|
35
|
+
:v8 => [
|
36
|
+
:AdIntelligenceService,
|
37
|
+
:AdministrationService,
|
38
|
+
:BulkService,
|
39
|
+
:CampaignManagementService,
|
40
|
+
:CustomerBillingService,
|
41
|
+
:CustomerManagementService,
|
42
|
+
:NotificationService,
|
43
|
+
:OptimizerService,
|
44
|
+
:ReportingService
|
45
|
+
]
|
46
|
+
}
|
47
|
+
|
48
|
+
# Configure the different environments, with the base URL for each one
|
49
|
+
@@environment_config = {
|
50
|
+
:PRODUCTION => {
|
51
|
+
:oauth_scope => '',
|
52
|
+
:header_ns => 'https://adcenter.microsoft.com/api/adcenter/',
|
53
|
+
:v7 => '',
|
54
|
+
:v8 => ''
|
55
|
+
},
|
56
|
+
:SANDBOX => {
|
57
|
+
:oauth_scope => '',
|
58
|
+
:header_ns => 'https://adcenter.microsoft.com/api/adcenter/',
|
59
|
+
:v7 => '',
|
60
|
+
:v8 => ''
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
# Configure the subdirectories for each version / service pair.
|
65
|
+
# A missing pair means that only the base URL is used.
|
66
|
+
@@subdir_config = {}
|
67
|
+
|
68
|
+
@@address_config = {
|
69
|
+
:v8 => {
|
70
|
+
:AdIntelligenceService => {:PRODUCTION => "https://adcenterapi.microsoft.com/Api/Advertiser/v8/CampaignManagement/AdIntelligenceService.svc?wsdl", :SANDBOX => ""},
|
71
|
+
:AdministrationService => {:PRODUCTION => "https://adcenterapi.microsoft.com/Api/Advertiser/v8/Administration/AdministrationService.svc?wsdl", :SANDBOX => ""},
|
72
|
+
:BulkService => {:PRODUCTION => "https://adcenterapi.microsoft.com/Api/Advertiser/v8/CampaignManagement/BulkService.svc?wsdl", :SANDBOX => ""},
|
73
|
+
:CampaignManagementService => {:PRODUCTION => "https://adcenterapi.microsoft.com/Api/Advertiser/v8/CampaignManagement/CampaignManagementService.svc?wsdl", :SANDBOX => ""},
|
74
|
+
:CustomerBillingService => {:PRODUCTION => "https://sharedservices.adcenterapi.microsoft.com/Api/Billing/v8/CustomerBillingService.svc?wsdl", :SANDBOX => ""},
|
75
|
+
:CustomerManagementService => {:PRODUCTION => "https://sharedservices.adcenterapi.microsoft.com/Api/CustomerManagement/v8/CustomerManagementService.svc?wsdl", :SANDBOX => ""},
|
76
|
+
:NotificationService => {:PRODUCTION => "https://sharedservices.adcenterapi.microsoft.com/Api/Notification/v8/NotificationService.svc?wsdl", :SANDBOX => ""},
|
77
|
+
:OptimizerService => {:PRODUCTION => "https://adcenterapi.microsoft.com/Api/Advertiser/v8/Optimizer/OptimizerService.svc?wsdl", :SANDBOX => ""},
|
78
|
+
:ReportingService => {:PRODUCTION => "https://adcenterapi.microsoft.com/Api/Advertiser/v8/Reporting/ReportingService.svc?wsdl", :SANDBOX => ""}
|
79
|
+
},
|
80
|
+
:v7 => {
|
81
|
+
:AdministrationService => {:PRODUCTION => "https://adcenterapi.microsoft.com/Api/Advertiser/v7/Administration/AdministrationService.svc?wsdl", :SANDBOX => "https://sandboxapi.adcenter.microsoft.com/Api/Advertiser/v7/Administration/AdministrationService.svc?wsdl"},
|
82
|
+
:CampaignManagementService => {:PRODUCTION => "https://adcenterapi.microsoft.com/Api/Advertiser/v7/CampaignManagement/CampaignManagementService.svc?wsdl", :SANDBOX => "https://sandboxapi.adcenter.microsoft.com/Api/Advertiser/v7/CampaignManagement/CampaignManagementService.svc?wsdl"},
|
83
|
+
:CustomerBillingService => {:PRODUCTION => "https://sharedservices.adcenterapi.microsoft.com/Api/Billing/v7/CustomerBillingService.svc?wsdl", :SANDBOX => "https://sharedservices-sbx.adcenterapi.microsoft.com/Api/Billing/v7/CustomerBillingService.svc?wsdl"},
|
84
|
+
:CustomerManagementService => {:PRODUCTION => "https://sharedservices.adcenterapi.microsoft.com/Api/CustomerManagement/v7/CustomerManagementService.svc?wsdl", :SANDBOX => "https://sharedservices-sbx.adcenterapi.microsoft.com/Api/CustomerManagement/v7/CustomerManagementService.svc?wsdl"},
|
85
|
+
:NotificationService => {:PRODUCTION => "https://sharedservices.adcenterapi.microsoft.com/Api/Notification/v8/NotificationService.svc?wsdl", :SANDBOX => ""},
|
86
|
+
:ReportingService => {:PRODUCTION => "https://adcenterapi.microsoft.com/Api/Advertiser/v7/Reporting/ReportingService.svc?wsdl", :SANDBOX => "https://sandboxapi.adcenter.microsoft.com/Api/Advertiser/v7/Reporting/ReportingService.svc?wsdl"}
|
87
|
+
}
|
88
|
+
}
|
89
|
+
|
90
|
+
# Auth constants for ClientLogin method.
|
91
|
+
#TODO: remove client_login_config
|
92
|
+
@@client_login_config = {
|
93
|
+
:AUTH_SERVER => 'https://www.microsoft.com',
|
94
|
+
:LOGIN_SERVICE_NAME => 'adcenter'
|
95
|
+
}
|
96
|
+
|
97
|
+
public
|
98
|
+
|
99
|
+
# Getters for constants and module variables.
|
100
|
+
def self.default_version
|
101
|
+
DEFAULT_VERSION
|
102
|
+
end
|
103
|
+
|
104
|
+
def self.default_environment
|
105
|
+
DEFAULT_ENVIRONMENT
|
106
|
+
end
|
107
|
+
|
108
|
+
def self.latest_version
|
109
|
+
LATEST_VERSION
|
110
|
+
end
|
111
|
+
|
112
|
+
def self.api_name
|
113
|
+
API_NAME
|
114
|
+
end
|
115
|
+
|
116
|
+
def self.service_config
|
117
|
+
@@service_config
|
118
|
+
end
|
119
|
+
|
120
|
+
def self.environment_config(environment, key)
|
121
|
+
return @@environment_config.include?(environment) ?
|
122
|
+
@@environment_config[environment][key] : nil
|
123
|
+
end
|
124
|
+
|
125
|
+
def self.address_config
|
126
|
+
@@address_config
|
127
|
+
end
|
128
|
+
|
129
|
+
def self.subdir_config
|
130
|
+
@@subdir_config
|
131
|
+
end
|
132
|
+
|
133
|
+
def self.client_login_config(key)
|
134
|
+
return @@client_login_config[key]
|
135
|
+
end
|
136
|
+
|
137
|
+
def self.default_config_filename
|
138
|
+
DEFAULT_CONFIG_FILENAME
|
139
|
+
end
|
140
|
+
|
141
|
+
def self.headers_config
|
142
|
+
@@headers_config
|
143
|
+
end
|
144
|
+
|
145
|
+
# Get the download URL for Ad Hoc reports.
|
146
|
+
#
|
147
|
+
# Args:
|
148
|
+
# - environment: the service environment to be used
|
149
|
+
# - version: the API version (as a symbol)
|
150
|
+
#
|
151
|
+
# Returns:
|
152
|
+
# - The endpoint URL (as a string)
|
153
|
+
#
|
154
|
+
def self.adhoc_report_download_url(environment, version)
|
155
|
+
base = get_wsdl_base(environment, version)
|
156
|
+
if base
|
157
|
+
base += 'reportdownload/%s' % version.to_s
|
158
|
+
end
|
159
|
+
return base
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Handles SOAP headers and namespaces definition for ClientLogin type header.
|
2
|
+
|
3
|
+
module BingAdsApi
|
4
|
+
class ClientLoginHeaderHandler < AdsCommonForBingAds::SavonHeaders::BaseHeaderHandler
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
# Generates Bing Ads API specific request header with ClientLogin data.
|
9
|
+
def generate_request_header()
|
10
|
+
request_header = super()
|
11
|
+
#puts "--------------- generate_request_header >> request_header >>\n#{request_header}"
|
12
|
+
credentials = @credential_handler.credentials
|
13
|
+
#puts "--------------- generate_request_header >> credentials >>\n#{credentials}"
|
14
|
+
#request_header['authToken'] = @auth_handler.get_token(credentials)
|
15
|
+
credentials.each {|k,v| request_header[prepend_namespace(k.to_s.camelize)] = v}
|
16
|
+
request_header.select!{|k,_| ['ApplicationToken', 'CustomerAccountId', 'CustomerId', 'DeveloperToken', 'UserName', 'Password'].map{|h| prepend_namespace(h)}.include?(k.to_s)}
|
17
|
+
#puts "--------------- generate_request_header >> request_header final >>\n#{request_header}"
|
18
|
+
return request_header
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'bing_ads_api/api_config'
|
2
|
+
|
3
|
+
module BingAdsApi
|
4
|
+
class CredentialHandler < AdsCommonForBingAds::CredentialHandler
|
5
|
+
# Whether we're making MCC-level requests.
|
6
|
+
attr_accessor :use_mcc
|
7
|
+
# Whether we're making validate-only requests.
|
8
|
+
attr_accessor :validate_only
|
9
|
+
# Whether we're making partial failure requests.
|
10
|
+
attr_accessor :partial_failure
|
11
|
+
|
12
|
+
def initialize(config)
|
13
|
+
super(config)
|
14
|
+
@use_mcc = false
|
15
|
+
@validate_only = false
|
16
|
+
@partial_failure = false
|
17
|
+
end
|
18
|
+
|
19
|
+
# Create the list of credentials to be used by the auth handler for header
|
20
|
+
# generation.
|
21
|
+
def credentials(credentials_override = nil)
|
22
|
+
result = super(credentials_override)
|
23
|
+
#puts "credentials result=\n#{result}"
|
24
|
+
validate_headers_for_server(result)
|
25
|
+
|
26
|
+
extra_headers = {
|
27
|
+
'userAgent' => generate_user_agent(),
|
28
|
+
'developerToken' => result[:developer_token]
|
29
|
+
}
|
30
|
+
if !@use_mcc and result[:client_customer_id]
|
31
|
+
extra_headers['clientCustomerId'] = result[:client_customer_id]
|
32
|
+
end
|
33
|
+
extra_headers['validateOnly'] = 'true' if @validate_only
|
34
|
+
extra_headers['partialFailure'] = 'true' if @partial_failure
|
35
|
+
result[:extra_headers] = extra_headers
|
36
|
+
#puts "credentials result2=\n#{result}"
|
37
|
+
return result
|
38
|
+
end
|
39
|
+
|
40
|
+
# Generates string to use as user agent in headers.
|
41
|
+
def generate_user_agent(extra_ids = [])
|
42
|
+
agent_app = @config.read('authentication.user_agent')
|
43
|
+
extra_ids << ['AwApi-Ruby/%s' % BingAdsApi::ApiConfig::CLIENT_LIB_VERSION]
|
44
|
+
super(extra_ids, agent_app)
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
# Validates that the right credentials are being used for the chosen
|
50
|
+
# environment.
|
51
|
+
#
|
52
|
+
# Raises:
|
53
|
+
# - AdsCommonForBingAds::Error::EnvironmentMismatchError if sandbox credentials are
|
54
|
+
# being used for production or vice-versa.
|
55
|
+
# - BingAdsApi::Errors:BadCredentialsError if supplied credentials are not
|
56
|
+
# valid.
|
57
|
+
#
|
58
|
+
def validate_headers_for_server(credentials)
|
59
|
+
if credentials[:client_email]
|
60
|
+
raise BingAdsApi::Errors::BadCredentialsError, 'Deprecated header ' +
|
61
|
+
'clientEmail is no longer supported, please use clientCustomerId'
|
62
|
+
end
|
63
|
+
|
64
|
+
client_customer_id = credentials[:client_customer_id]
|
65
|
+
if client_customer_id and
|
66
|
+
!(client_customer_id.is_a?(Integer) or
|
67
|
+
(client_customer_id =~ /^\d+(-\d+-\d+)?$/))
|
68
|
+
raise BingAdsApi::Errors::BadCredentialsError,
|
69
|
+
'Invalid client customer ID: %s' % client_customer_id.to_s
|
70
|
+
end
|
71
|
+
|
72
|
+
token = credentials[:developer_token]
|
73
|
+
#sandbox_token = (token =~ /[a-zA-Z0-9]{12,}/)
|
74
|
+
#environment = @config.read('service.environment')
|
75
|
+
#case environment
|
76
|
+
# when :PRODUCTION
|
77
|
+
# if sandbox_token
|
78
|
+
# raise AdsCommonForBingAds::Errors::EnvironmentMismatchError,
|
79
|
+
# 'Attempting to connect to production with sandbox credentials.'
|
80
|
+
# end
|
81
|
+
# when :SANDBOX
|
82
|
+
# if (!sandbox_token)
|
83
|
+
# raise AdsCommonForBingAds::Errors::EnvironmentMismatchError,
|
84
|
+
# 'Attempting to connect to the sandbox with malformatted ' +
|
85
|
+
# 'credentials. Please check http://msdn.microsoft.com/en-US/library/aa983013 for details.'
|
86
|
+
# end
|
87
|
+
#end
|
88
|
+
return nil
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|