我正试图从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] ""
答案 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有任何疑问,请与我们联系。