пакет android - вложенный класс R.attr, использующий ключ API

Я пытаюсь имитировать запрос CURL, используя пакет HTTR в R. Это для избирательного API propbulica.

propublica.github.io/campaign-finance-api-docs/

Запрос командной строки задокументирован следующим образом:

curl "https://api.propublica.org/campaign-finance/v1/2016/president/totals.json" -H "X-API-Key: PROPUBLICA_API_KEY"

Моя имитация этого при использовании R выглядит следующим образом:

require(httr)
api_key <- "my key"
path <- "https://api.propublica.org/campaign-finance/v1/2016/president/totals.json"
data <- GET(path, add_headers("X-API-Key", .headers = api_key))
content(data)

Это возвращает «запрещено».

Дерек Уиллис из ProPublica говорит мне, что мой ключ действителен.


person user3207971    schedule 14.04.2016    source источник
comment
Вы также можете посмотреть, покрывает ли это пакет Rpublica на CRAN.   -  person Thomas    schedule 16.04.2016


Ответы (2)


Я сделал пакет curlconverter, чтобы помочь с такими вещами:

library(curlconverter)

cmd <- 'curl "https://api.propublica.org/campaign-finance/v1/2016/president/totals.json" -H "X-API-Key: PROPUBLICA_API_KEY"'

parsed_cmd <- straighten(cmd)

str(parsed_cmd)
## List of 1
##  $ :List of 5
##   ..$ url      : chr "https://api.propublica.org/campaign-finance/v1/2016/president/totals.json"
##   ..$ method   : chr "get"
##   ..$ headers  :List of 1
##   .. ..$ X-API-Key: chr "PROPUBLICA_API_KEY"
##   ..$ url_parts:List of 9
##   .. ..$ scheme  : chr "https"
##   .. ..$ hostname: chr "api.propublica.org"
##   .. ..$ port    : NULL
##   .. ..$ path    : chr "campaign-finance/v1/2016/president/totals.json"
##   .. ..$ query   : NULL
##   .. ..$ params  : NULL
##   .. ..$ fragment: NULL
##   .. ..$ username: NULL
##   .. ..$ password: NULL
##   .. ..- attr(*, "class")= chr [1:2] "url" "list"
##   ..$ orig_curl: chr "curl \"https://api.propublica.org/campaign-finance/v1/2016/president/totals.json\" -H \"X-API-Key: PROPUBLICA_API_KEY\""
##   ..- attr(*, "class")= chr [1:2] "cc_obj" "list"
##  - attr(*, "class")= chr [1:2] "cc_container" "list"

actual_function <- make_req(parsed_cmd)[[1]] # returns a list as it's vectorized

сделать звонок - это должно «просто работать»

# actual_function()  # not going to work here since it's not a real api key

посмотреть что внутри:

actual_function
## function () 
## httr::VERB(verb = "GET", url = "https://api.propublica.org/campaign-finance/v1/2016/president/totals.json",
##     httr::add_headers(`X-API-Key` = "PROPUBLICA_API_KEY"))
## <environment: 0x7f8d90aeee98>

Он предназначен для работы со строками «Копировать как cURL» из окон инструментов разработчика браузера.

person hrbrmstr    schedule 14.04.2016
comment
Это круто! Я боролся с RCurl, httr и т. д. и искал именно это. - person DWal; 14.04.2016
comment
Он в значительной степени ориентирован на обработку URL-адресов Copy as cURL, но если требуется большее обобщение, просто отправьте PR :-) - person hrbrmstr; 14.04.2016
comment
Большое спасибо @hrbrmstr. Это помогло. Самый блестящий. Прошу propublica добавить это в свою документацию. - person user3207971; 15.04.2016
comment
за исключением того, что уже есть пакет R для работы с API ProPublica :-) cran. rstudio.com/web/packages/RPublica/RPublica.pdf - person hrbrmstr; 15.04.2016
comment
пакет curlconverter недоступен (для R версии 3.4.2) - person mbunch; 01.03.2018
comment
Он находится на GitHub — devtools::install_github(hrbrmstr/curlconverter) - person JerryN; 10.05.2019

GET(path, config = list(token = api_key))

Это предполагает, что «мой ключ» является средой токена oauth. Нужно знать больше об API, чтобы быть уверенным. См. примеры github в httr для генерации ключей и рукопожатий API.

person Carl Boneri    schedule 14.04.2016