如何查询Ruby中的Criteo REST API v2?
How to query the Criteo REST API v2 in Ruby?
我想查询 Criteo REST API v2。
下面的答案表明 REST API v2 尚未由 Criteo 实施,因此我使用了 v1。他们的网站说 v1 将很快被弃用。
APIv1描述here
API v1 的 Swagger 是 here
我真正想使用的 REST API v2 是 here
这是我此时的代码:
#! /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
您似乎需要将以下内容添加到您的 headers
:
'Authorization': 'Bearer VALID_JWT_TOKEN_BASE64'
此外,他们似乎还没有将 portfolio
API 端点迁移到 v2。我能够解析他们的旧 v1 端点 (based on their documentation):
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')
我想查询 Criteo REST API v2。
下面的答案表明 REST API v2 尚未由 Criteo 实施,因此我使用了 v1。他们的网站说 v1 将很快被弃用。
APIv1描述here
API v1 的 Swagger 是 here
我真正想使用的 REST API v2 是 here
这是我此时的代码:
#! /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
您似乎需要将以下内容添加到您的 headers
:
'Authorization': 'Bearer VALID_JWT_TOKEN_BASE64'
此外,他们似乎还没有将 portfolio
API 端点迁移到 v2。我能够解析他们的旧 v1 端点 (based on their documentation):
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')