Как запросить Criteo REST API v2 в Ruby? - PullRequest
0 голосов
/ 12 декабря 2018

Я хочу запросить Criteo REST API v2.

Ответ ниже указывает на то, что API REST v2 еще не был реализован Criteo, поэтому я использовал v1.Их веб-сайт сообщает, что версия v1 скоро будет устаревшей.

API v1 описан здесь

Swagger для API v1 здесь

REST API 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

1 Ответ

0 голосов
/ 14 декабря 2018

Похоже, вам нужно добавить следующее к вашему 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...