我不是SOAP和WSDL的专家,但我有Perl代码,我想将其移植到R。
Perl代码如下(来自https://www.pharmgkb.org/resources/downloads_and_web_services.jsp):
use SOAP::Lite;
import SOAP::Data 'type';
sub main {
my $argcount = scalar (@ARGV);
if ($argcount != 1) {
print "usage: diseases.pl <PharmGKB accession id>\n";
exit -1;
}
# make a web services call to server
my $call = SOAP::Lite
-> readable (1)
-> uri('PharmGKBItem')
-> proxy('http://www.pharmgkb.org/services/PharmGKBItem')
-> searchDisease($ARGV[0]);
if ($call->fault) {
print $call->faultcode . ": " . $call->faultstring . "\n";
} else {
my $result = $call->result;
阅读有关rsoap和SSOAP包的内容,但没有得到任何好消息。 我需要的是完全支持,例如调用服务并提供库来解析输出。我更喜欢一些库而不是原始编码。我对XML包很好,对RCurl不太好。我认为R中没有好的和当前的(积极维护的)支持这是正确的吗?
答案 0 :(得分:4)
查看OmegaHat上的SSOAP包。它兼容S和R.它甚至还有一个genSOAPClientInterface
函数,用于在WSDL中生成可用的操作作为R函数,并为WSDL中描述的所有数据类型生成相关的S4类。它利用XML和RCurl(两者都是由同一作者创建的)。他提供directory full of examples并且非常有用PDF documentation。
在使用我的WSDL时我遇到了一些问题(并且仍在使用修改后的代码使其工作),但是如果遇到问题,该软件包的作者对bug报告非常有帮助和响应。< / p>
答案 1 :(得分:0)
我尝试使用SSOAP包,但它似乎已经过时了解问题,包括破坏其他包的依赖性,命名空间冲突和无限递归。它也与Cran一起从它依赖的XMLSchmea包中删除。
我已经将SOAP UI与RCurl结合使用,这是更成功的方法。 RCurl示例可能会在另一篇文章中找到:https://stackoverflow.com/a/34516458/5189780。
SOAP UI是一个非常容易使用的工具,用于测试和探索SOAP Web服务。它为SOAP请求提供XML代码。可以在R代码中复制和使用此XML以形成RCurl请求的主体。
答案 2 :(得分:0)
omegahat.org
不再有效,但是omegahat.net
是有效的,并且软件SSOAP可用于下载。但是,无法使用R版本3.6.2安装该软件包。