使用R调用Web服务:发送数据并将结果表返回到R中

use*_*837 -2 web-services r rcurl asp.net-web-api httr

http://snomedct.t3as.org/这是一个Web服务,可以分析英文临床文本,并报告任何可以检测到的概念.
对于例如 - 我有头痛.它会将头痛识别为症状.

现在我想做的是通过R将句子发送到Web服务,并将表格从网页返回到R进行进一步分析.

hrb*_*str 5

如果我们采用他们的示例curl命令行:

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
Run Code Online (Sandbox Code Playgroud)

这可以httr很容易地翻译成.

-s意思是"沉默"(无进度表或错误信息),所以我们真的没有把这种.

任何-H向请求添加标头的方法.Content-Type使用encode参数to 可以更好地处理此特定标头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")
Run Code Online (Sandbox Code Playgroud)

由于您不经常这样做,您可以打包POST电话with_verbose()以查看正在发生的事情(在httr文档中查找).

在此之后技术上应该有很多细微差别(比如检查HTTP状态代码stop_for_status(),warn_for_status()或者甚至只是status_code(),但为了简单起见,我们假设调用有效(这是他们的示例,因此它确实有效并返回200HTTP状态代码)这是一件好事).

默认情况下,该Web服务返回JSON,因此我们需要将其转换为R对象.虽然httr内置解析,我喜欢使用jsonlite包来处理结果:

dat <- jsonlite::fromJSON(content(result, as="text"),  flatten=TRUE)
Run Code Online (Sandbox Code Playgroud)

fromJSON函数采用一些参数,旨在帮助将JSON形成合理的R数据结构(许多API返回可怕的JSON和/或XML).这个API适合"恐怖"类别.数据dat非常粗糙,进一步解码它将是一个单独的SO问题.