使用 R 调用 Web 服务:发送数据并在 R 中返回结果 table
Using R to call a Web Service: Send data and get the result table back in R
http://snomedct.t3as.org/ 这是一个 Web 服务,将分析英语临床文本,并报告可以检测到的任何概念。
例如-我头痛。它将头痛识别为症状。
现在我想做的是通过 R 将句子发送到 Web 服务,并将 table 从网页返回到 R 以供进一步分析。
如果我们以他们为例curl
command-line:
curl -s --request POST \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "The patient had a stroke." \
http://snomedct.t3as.org/snomed-coder-web/rest/v1.0/snomedctCodes
可以很容易地翻译成 httr
。
-s
的意思是 "silent"(没有进度条或错误消息)所以我们真的不需要翻译它。
Any -H
表示在请求中添加一个header。这个特殊的 Content-Type
header 可以用 encode
参数更好地处理 httr::POST
.
--data-urlencode
参数表示 URL 对该字符串进行编码并将其放入请求的 body
。
最后,URL是要调用的资源。
library(httr)
result <- POST("http://snomedct.t3as.org/snomed-coder-web/rest/v1.0/snomedctCodes",
body="The patient had a stroke.",
encode="form")
由于您不经常这样做,您可以用 with_verbose()
包装 POST
调用以查看发生了什么(在 httr
文档中查找)。
在此之后技术上应该做很多细微差别(比如使用 stop_for_status()
、warn_for_status()
甚至只是 status_code()
检查 HTTP 状态代码,但为了简单起见,让我们假设调用有效(这是他们的示例,所以它确实有效并且 return 是一个 200
HTTP 状态代码,这是一件好事)。
默认情况下,该 Web 服务是 returning JSON,因此我们需要将其转换为 R object。当 httr
做 built-in 解析时,我喜欢使用 jsonlite
包来处理结果:
dat <- jsonlite::fromJSON(content(result, as="text"), flatten=TRUE)
fromJSON
函数采用一些参数,旨在帮助将 JSON 塑造成合理的 R 数据结构(许多 APIs return 可怕 JSON and/or XML)。此 API 属于 "horrible" 类别。 dat
中的数据非常粗糙,进一步解码将是一个单独的 SO 问题。
http://snomedct.t3as.org/ 这是一个 Web 服务,将分析英语临床文本,并报告可以检测到的任何概念。
例如-我头痛。它将头痛识别为症状。
现在我想做的是通过 R 将句子发送到 Web 服务,并将 table 从网页返回到 R 以供进一步分析。
如果我们以他们为例curl
command-line:
curl -s --request POST \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "The patient had a stroke." \
http://snomedct.t3as.org/snomed-coder-web/rest/v1.0/snomedctCodes
可以很容易地翻译成 httr
。
-s
的意思是 "silent"(没有进度条或错误消息)所以我们真的不需要翻译它。
Any -H
表示在请求中添加一个header。这个特殊的 Content-Type
header 可以用 encode
参数更好地处理 httr::POST
.
--data-urlencode
参数表示 URL 对该字符串进行编码并将其放入请求的 body
。
最后,URL是要调用的资源。
library(httr)
result <- POST("http://snomedct.t3as.org/snomed-coder-web/rest/v1.0/snomedctCodes",
body="The patient had a stroke.",
encode="form")
由于您不经常这样做,您可以用 with_verbose()
包装 POST
调用以查看发生了什么(在 httr
文档中查找)。
在此之后技术上应该做很多细微差别(比如使用 stop_for_status()
、warn_for_status()
甚至只是 status_code()
检查 HTTP 状态代码,但为了简单起见,让我们假设调用有效(这是他们的示例,所以它确实有效并且 return 是一个 200
HTTP 状态代码,这是一件好事)。
默认情况下,该 Web 服务是 returning JSON,因此我们需要将其转换为 R object。当 httr
做 built-in 解析时,我喜欢使用 jsonlite
包来处理结果:
dat <- jsonlite::fromJSON(content(result, as="text"), flatten=TRUE)
fromJSON
函数采用一些参数,旨在帮助将 JSON 塑造成合理的 R 数据结构(许多 APIs return 可怕 JSON and/or XML)。此 API 属于 "horrible" 类别。 dat
中的数据非常粗糙,进一步解码将是一个单独的 SO 问题。