bing_ads_api 0.0.5
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/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
|