2016-04-14 20 views
1

RのHTTRパッケージを使用してCURLリクエストを模倣しようとしています。これはpropbulicaの選挙API向けです。次のようにR httrパッケージ - apiキーを使用

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

コマンドライン要求は文書化されて次のようにRを使用してこの

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

私の模倣である。

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のDerek Willisは、自分のキーが有効であると伝えます。

+0

CRPのRpublicaパッケージがこれをカバーしているかどうかを確認することもできます。 – Thomas

答えて

4

私は事のちょうどこの種のを支援するために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としてコピー」文字列を使用するように設計されています。

+0

これは素晴らしいです!私はRCurl、httrなどと対戦し、この正確なことを探しています。 – DWal

+0

それは_heavily_ "Copy as cURL" URLを扱うようになっていますが、より一般化が必要な場合は、単にPRを書きましょう:-) – hrbrmstr

+0

ありがとう@hrbrmstr。これがトリックでした。最も輝かしい。 propublicaに文書にこれを追加するよう依頼する。 – user3207971

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

これは、「my key」がoauthトークン環境であると仮定しています。確実にAPIについてもっと知る必要があります。キーの生成とAPIのハンドシェイクについては、httrのgithubの例を参照してください。

関連する問題