我想查询v2。
下面的答案表明,REST v2尚未由Criteo实现,因此我使用了v1。他们的网站上说,v1很快就会被废弃。
API v1被描述为这里。
API v1的Swagger是这里
我真正想使用的REST v2是这里
以下是我的代码:
#! /usr/bin/ruby
require 'net/http'
require 'net/https'
require 'uri'
require 'jwt'
require 'date'
require 'json'
CLIENT_ID = 'mapi-XXX'
CLIENT_SECRET = 'YYY'
end_date = Date.today
start_date = Date.today - Date.today.mday + 1
# first get a valid token
uri = URI('https://api.criteo.com/marketing/oauth2/token')
headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json' }
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(uri.path, headers)
request.set_form_data( 'client_id' => CLIENT_ID, 'client_secret' => CLIENT_SECRET, 'grant_type' => 'client_credentials' )
response = https.request(request)
access_token = JSON.parse(response.body)['access_token']
puts access_token
uri = URI('https://api.criteo.com/marketing/v1/portfolio')
headers = { 'Accept': 'application/json', 'Authorization': "Bearer #{access_token}" }
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(uri.path, headers)
response = https.request(request)
puts response.body
uri = URI('https://api.criteo.com/marketing/v1/campaigns?campaignStatus=Running')
headers = { 'Accept': 'application/json', 'Authorization': "Bearer #{access_token}" }
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(uri.path, headers)
response = https.request(request)
puts response.body
json = JSON.parse(response.body)
campaigns = json.map { |campaign| campaign['campaignId'] }
# get statistics
puts start_date # => "2018-12-01"
puts end_date # => "2018-12-17"
uri = URI.parse('https://api.criteo.com/marketing/v1/statistics')
headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json', 'Authorization': "Bearer #{access_token}" }
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(uri.path, headers)
request.set_form_data( 'reportType' => 'CampiagnPerformance', 'ignoreXDevice' => true, 'startDate' => "#{start_date}", 'endDate' => "#{end_date}", 'dimensions' => ['CampaignId'], 'metrics' => ['Clicks'], 'format' => 'Json', 'currency' => 'USD', 'timezone' => 'GMT')
#request.body = payload.to_json
puts request.body
response = https.request(request)
puts response.body发布于 2018-12-14 16:03:31
看起来您需要在您的headers中添加以下内容
'Authorization': 'Bearer VALID_JWT_TOKEN_BASE64'而且,他们似乎还没有将他们的portfolio API端点迁移到v2。我能够解析他们的旧v1端点(根据他们的文件):
curl -X GET --header 'Accept: application/json' --header 'Authorization: Bearer [token]' https://api.criteo.com/marketing/v1/portfolio至少给了我一个未经授权的回应。尝试将uri更新为:
uri = URI('https://api.criteo.com/marketing/v1/portfolio')https://stackoverflow.com/questions/53746087
复制相似问题