通过`httr :: POST`连接到ITIS SOLR API

时间:2016-09-14 16:46:04

标签: r post solr get httr

我正试图从ITIS SOLR API中提取一些记录。

我的查询将由一系列物种二项式组成(例如, Gulo 因此,gulo )通常会超出URL的字符限制 使用httr::GET使其不切实际(不可能?)。我认为, httr::POST没有这个限制,所以我正在尝试 传递我的疑问。

尽管httr有几个小时,但我在实现这一飞跃方面遇到了麻烦 文件和各种讨论 (e.g.)关于正确的 通过POST传递的身体形态。

非常感谢任何帮助...

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] ""

1 个答案:

答案 0 :(得分:2)

这里的solrium维护者。您是否尝试过使用ritis套餐? https://github.com/ropensci/ritis它具有ITIS SOLR服务以及其他端点的fxns。

您可以使用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的最大字符长度,您应该收到414错误https://tools.ietf.org/html/rfc7231

还可以通过taxize访问ITIS - 但我怀疑这对URL的帮助太长了。

如果您熟悉SQL,最好的选择可能就是获取ITIS SQL转储http://www.itis.gov/downloads/index.html。如果你想要一个R接口,我维护taxizedb,旨在使其易于下载,在本地加载到SQL引擎,然后使用dplyr进行查询。如果您对此pkg有任何疑问,请与我们联系。