R - запрос API для Euromonitor - PullRequest
0 голосов
/ 12 марта 2019

Учитывая спецификацию API ...

POST https://api.euromonitor.com/authentication/connect/token HTTP/1.1

Host: api.euromonitor.com

Content-Type: application/x-www-form-urlencoded

Ocp-Apim-Subscription-Key: xxxyyyzzz

grant_type=string&username=xxx@acme.com&password=yyyzzz

... как включить параметры ключа подписки и grant_type в программу R для запроса данных?

Я предполагаю, что отправляю запрос Post, но все, что я пробовал до сих пор (например, ниже), приводит к ошибке 400 Bad Request.

url <- "https://api.euromonitor.com/authentication/connect/token HTTP/1.1"

body_list <- list(subs_key="xxxyyyzzz", 
                  grant_type="string&username=xxx@acme.com&password=yyyzzz")

r <- POST(url, body=body_list, encode="form", verbose())

UPDATE:

При более внимательном чтении документации Euromonitor выясняется, что grant_type находится в теле, а остальные параметры - в заголовке. Я изменил свою программу так:

url <- "https://api.euromonitor.com/authentication/connect/token HTTP/1.1"
r <- POST(url, add_headers(.headers=c("Host"="api.euromonitor.com",
                           "Content-Type"="application/x-www-form-urlencoded",
                           "Ocp-Apim-Subscription-Key"="xxxyyyzzz")),
      body="grant_type=password&username=xxx@acme.com&password=yyyzzz", verbose())

Но я все еще получаю ошибку 400 Bad Request:

-> POST /authentication/connect/token HTTP/1.1 HTTP/1.1
-> Host: api.euromonitor.com
-> User-Agent: libcurl/7.59.0 r-curl/3.2 httr/1.4.0
-> Accept-Encoding: gzip, deflate
-> Accept: application/json, text/xml, application/xml, */*
-> Content-Type: application/x-www-form-urlencoded
-> Ocp-Apim-Subscription-Key: xxxyyyzzz
-> Content-Length: 69
-> 
>> grant_type=password&username=xxx@acme.com&password=yyyzzz

<- HTTP/1.1 400 Bad Request
<- Content-Type: text/html; charset=us-ascii
<- Date: Tue, 12 Mar 2019 02:55:39 GMT
<- Connection: close
<- Content-Length: 311

1 Ответ

0 голосов
/ 15 марта 2019

Для записи вы хотите сделать это:

url <- "https://api.euromonitor.com/authentication/connect/token"
response <- POST(url, add_headers(.headers=c("Ocp-Apim-Subscription-Key"="xxxyyyzzz",
                                  "Content-Type"="application/x-www-form-urlencoded")),
      body="grant_type=password&username=xxx@acme.com&password=yyyzzz")
token <- content(response, "text")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...