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

时间:2015-09-03 19:00:27

标签: r web-services asp.net-web-api rcurl httr

here这是一个Web服务,可以分析英文临床文本,并报告任何可以检测到的概念。
例如 - 我头疼。它会将头痛识别为症状。

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

1 个答案:

答案 0 :(得分: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

可以很容易地翻译成httr

-s表示"沉默" (没有进度表或错误信息)所以我们真的不必翻译它。

任何-H表示向请求添加标头。使用Content-Type参数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")

由于您不定期执行此操作,因此您可以使用POST打包with_verbose()来查看正在进行的操作(在httr中查找文档)。

在此之后技术上应该有很多细微差别(比如使用stop_for_status()warn_for_status()或甚至status_code()来检查HTTP状态代码,但为了简单起见,请使用&#39 ; s假设调用有效(这个是他们的例子,所以它确实有效,并返回一个{Good}的200 HTTP状态代码。

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

dat <- jsonlite::fromJSON(content(result, as="text"),  flatten=TRUE)

fromJSON函数采用一些参数来帮助将JSON形成合理的R数据结构(许多API返回可怕的JSON和/或XML)。这个API适合'#34;可怕的&#34;类别。 dat中的数据非常粗糙,对它的进一步解码将是一个单独的SO问题。