2016-09-14 2 views
0

ITIS SOLR APIからいくつかのレコードを取得しようとしています。`httr :: POST`を使用してITIS SOLR APIに接続

私のクエリは、このように 、それは非現実的(不可能?)httr::GETを使用するようになって、多くの場合、URLの文字制限を超えてストレッチします種の二項(例えば、Gulo gulo)の文字列で構成されます。私が理解しているように、 httr::POSTにはこの制限がありません。それで、私は に私の質問を渡しています。

私はPOSTを経由して渡すようにhttr ドキュメントのいくつかの時間と体の適切な フォームに関する様々な議論 (e.g.)にもかかわらず、トラブルその飛躍を作っを抱えています。

すべてのヘルプははるかに高く評価されて...ここsolriumの

library(httr) 
library(solrium) 

spp_binom <- c("Sphyrapicus varius", "Odocoileus virginianus") 
args <- list(wt = 'json') 
body <- list(q = paste0('nameWOInd:(', paste(shQuote(spp_binom), collapse = " "), ')')) 
body2 <- list(nameWOInd = paste(shQuote(spp_binom), collapse = " ")) 

# GET works 
tt <- GET("http://services.itis.gov/", 
      query = c(body, args)) 
tt <- structure(content(tt, as = "text", encoding = "UTF-8"), 
       class = "sr_search", wt = 'json') 
solrium:::solr_parse(tt, parsetype = "df", concat = ",")[, c(1,3,6,12)] 

## Source: local data frame [2 x 4] 
## 
##  tsn    nameWOInd usage rank 
## <chr>     <chr> <chr> <chr> 
## 1 178202  Sphyrapicus varius valid Species 
## 2 180699 Odocoileus virginianus valid Species 

# POST doesn't 
tt <- POST(url="http://services.itis.gov/", encode = "json", 
      body = body) # same w/content_type_json() 
solrium:::get_response(tt) 

## [1] "" 

tt <- POST(url="http://services.itis.gov/", encode = "json", 
      body = body2) # same w/content_type_json() 
solrium:::get_response(tt) 

## [1] "" 

答えて

2

メンテナ。 ritisパッケージをまだ試してみましたか? https://github.com/ropensci/ritis ITIS SOLRサービスと他のエンドポイントには、fxnsがあります。私はあなたがまだそれとURLが長すぎるエラーに遭遇するだろうと想像けど

あなたはritis::itis_search

spp <- c("Sphyrapicus varius", "Odocoileus virginianus") 
query <- paste0(paste0("nameWInd:", sub("\\s", "\\\\%20", spp)), collapse = " OR ") 
itis_search(q = query, callopts = verbose()) 

# A tibble: 2 × 28 
    tsn    nameWInd    nameWOInd  unit1  unit2 usage credibilityRating 
    <chr>     <chr>     <chr>  <chr>  <chr> <chr>    <chr> 
1 178202  Sphyrapicus varius  Sphyrapicus varius Sphyrapicus  varius valid TWG standards met 
2 180699 Odocoileus virginianus Odocoileus virginianus Odocoileus virginianus valid TWG standards met 
# ... with 21 more variables: taxonAuthor <chr>, kingdom <chr>, parentTSN <chr>, rankID <chr>, rank <chr>, 
# hierarchySoFar <chr>, hierarchySoFarWRanks <chr>, hierarchyTSN <chr>, synonyms <chr>, 
# synonymTSNs <chr>, expert <chr>, publication <chr>, otherSource <chr>, vernacular <chr>, 
# jurisdiction <chr>, geographicDivision <chr>, createDate <chr>, updateDate <chr>, 
# hierarchicalSort <chr>, `_version_` <dbl>, comment <chr> 

を使用することができます。

ITISにいくつかのPOSTリクエストを試みましたが、POSTリクエストをブロックしていないようですが、さまざまな手配をしたボディを送信すると動作しないようです。私はITISで連絡先を持っているので、彼らはPOST要求をどのように扱うか、そしてあなたが望むことをする方法があるかどうか尋ねることができます。

URLの長さの点では、私たちは回避できないものです。そこURLの最大文字長は、単純だし、あなたがありますhttps://tools.ietf.org/html/rfc7231

taxize経由ITISへのアクセスが414エラーを取得する必要があります - しかし、私はそれはURLが長すぎることに役立ちます疑います。

SQLに精通している場合は、ITIS SQLのダンプhttp://www.itis.gov/downloads/index.htmlを取得するのが最適なオプションです。あなたはR・インタフェースをしたい場合、私は、ローカルSQLエンジンにロード、ダウンロードすることが容易にすることを目指しtaxizedbを維持し、その後、クエリを実行するためにdplyrを使用しています。このpkgに関するご質問がある場合はお知らせください。

+0

おかげ@sckott。私は 'ritis'を試みました。素晴らしいパッケージです。 :)あなたが知っているように、 'ritis :: itis_​​search'は' solrium :: solr_search'を呼び出します。これはGETと414エラーに直ちに戻ります。これがローカルでの使用のみを目的としていた場合、SQLダンプが最も簡単なルートになります。 ITISがPOSTリクエストについて語っていることを聞いていただければ幸いです。一方、私は文字列(この例では 'spp')を規則準拠のURL長を保証する長さに単純に切り詰めて、' lapply'で複数の 'solr_search'呼び出しに渡しました。 – manimal

+0

私はあなたに知らせます私が見つけたもの – sckott

関連する問題