R语言 如何通过POST检索EPPO数据库信息?

bqf10yzr  于 2022-12-27  发布在  其他
关注(0)|答案(3)|浏览(167)

我可以从GET请求检索EPPO DB信息。我正在寻求帮助以从POST请求检索信息。Example code and other info in the linked Rmarkdown HTMP output
正如建议的那样,我已经浏览了https://httr.r-lib.org/站点。
有趣。我沿着链接到https://httr.r-lib.org/articles/api-packages.html,然后到https://cdn.zapier.com/storage/learn_ebooks/e06a35cfcf092ec6dd22670383d9fd12.pdf。我假设POST()函数的参数应该(或多或少)如下所示,但响应总是404

url = "https://data.eppo.int/api/rest/1.0/"
config = list(authtoken=my_authtoken)
body = list(intext = "Fraxinus anomala|Tobacco ringspot virus|invalide name|Sequoiadendron giganteum")
encode = "json"
#handle = ???

reprex package(v0.3.0)于2021年4月26日创建如何找到丢失的部分?

ttygqcqt

ttygqcqt1#

这是有点棘手:
1.您需要使用https://data.eppo.int/documentation/rest中服务名称的正确URL,例如使用 * 从EPPOCodes列表中搜索首选名称 *:

url = "https://data.eppo.int/api/rest/1.0/tools/codes2prefnames"

1.授权应传递给以下机构:

body = list(authtoken = "yourtoken", intext = "BEMITA")

因此,如果要检查两个eppocode的名称:XYLEFA和BEMITA代码应类似于:

httr::POST(
  url = "https://data.eppo.int/api/rest/1.0/tools/codes2prefnames",
  body = list(authtoken = "yourtoken", intext = "BEMITA|XYLEFA") 
)

尽管如此,我还是建议你使用pestr包,但是,为了找到eppocodes,它使用了SQLite数据库,而不是EPPO REST API,因为数据库本身并不大(大约40MB),这应该不是一个问题。

bfrts1fy

bfrts1fy2#

我在DataCamp课程中找到了一个简单的方法:
“要查找API服务的R客户端,请搜索'CRAN '”
我发现了'pestr'包,使伟大的访问Eppo数据库.
我自己仍然不知道如何使用POST()函数。这方面的任何提示都是热烈欢迎的。

oknwwptz

oknwwptz3#

这里有一个解决方案来循环名字来获取EPPO代码。

# vector of species names
host_name <- c("Fraxinus anomala", "Tobacco ringspot virus", "invalide name", 
"Sequoiadendron giganteum") 

EPPO_key <- "enter personal key"

# EPPO url 
path_eppo_code <- "https://data.eppo.int/api/rest/1.0/tools/names2codes"

# epty list 
my_list <- list() 

for (i in host_name) {

# POST request on eppo database
response <- httr::POST(path_eppo_code, body=list(authtoken=EPPO_key, 
intext=i))

# get EPPO code
pest_eppo_code <- strsplit(httr::content(response)[[1]], ";")[[1]][2]
 
# add to list
my_list[[i]] <- pest_eppo_code  
}

# list to data frame 
data <- plyr::ldply(my_list)

相关问题