2013-07-29 61 views
2

我想通过从matlab中发送DOI(数字对象标识符)到http://www.crossref.org来检索bibtex数据(用于构建参考书目)。通过从matlab中发送DOI来从crossref中检索bibtex数据:从ruby中翻译

交叉引用API说明是这样的:根据this

curl -LH "Accept: text/bibliography; style=bibtex" http://dx.doi.org/10.1038/nrd842 

here另一个例子表明,在ruby如下:

open("http://dx.doi.org/10.1038/nrd842","Accept" => "text/bibliography; style=bibtex"){|f| f.each {|line| print line}} 

虽然我听说的红宝石石头我想这样做在MATLAB和不知道如何翻译的红宝石消息或解释交叉引用命令。

以下是我迄今发送DOI给交叉引用和检索XML数据(可变retdat),而不是中文提供,格式为:

clear 
clc 

doi = '10.1038/nrd842'; 

URL_PATTERN = 'http://dx.doi.org/%s'; 
fetchurl = sprintf(URL_PATTERN,doi); 

numinputs = 1; 

www = java.net.URL(fetchurl); 

is = www.openStream; 

%Read stream of data 
isr = java.io.InputStreamReader(is); 
br = java.io.BufferedReader(isr); 

%Parse return data 
retdat = []; 
next_line = toCharArray(br.readLine)'; %First line contains headings, determine length 

%Loop through data 

while ischar(next_line) 
    retdat = [retdat, 13, next_line]; 
    tmp = br.readLine; 
    try 
    next_line = toCharArray(tmp)'; 
    if strcmp(next_line,'M END') 
     next_line = []; 
     break 
    end 
    catch 
    break; 
    end 
end 


%Cleanup java objects 
br.close; 
isr.close; 
is.close; 

帮助翻译红宝石声明的东西MATLAB可以使用发布的脚本发送来建立与crossref的通信将不胜感激。

编辑:

附加约束条件包括代码(后面至少到R14)的向后兼容性:>(另外,没有用红宝石,由于解决了上述问题,但不是“MATLAB”。解决办法见here对于如何通过system('ruby script.rb')调用从MATLAB的红宝石。

+0

取代事情的来龙去脉为什么原始的Java,而不是['urlread'](http://www.mathworks.com/help/matlab/ref /urlread.html)? – horchler

+0

这就是历史:代码是从另一个应用程序借来的。 –

+0

用于设置请求标头和其他细节,[见本](http://undocumentedmatlab.com/blog/expanding-urlreads-capabilities/)。 – horchler

回答

0

从user2034006答案勾画解决方案的路径。 当urlread被修改下面的脚本工作的:

URL_PATTERN = 'http://dx.doi.org/%s'; 
doi = '10.1038/nrd842'; 
fetchurl = sprintf(URL_PATTERN,doi); 
method = 'post'; 
params= {}; 
[string,status] = urlread(fetchurl,method,params); 

urlread的修改是不相同user2034006的建议。当urlread

urlConnection.setRequestProperty('Content-Type','application/x-www-form-urlencoded'); 

urlConnection.setRequestProperty('Accept','text/bibliography; style=bibtex'); 
1

您可以轻松编辑urlread你所需要的。我不会发布我的修改urlread功能代码因版权。

在urlread,(我在C:\ Program Files \ MATLAB \ R2012一\工具箱\ MATLAB \ iofun \ urlread.m),作为最低优雅的解决方案: “%来自于连接读取数据”

之前,我补充说:

urlConnection.setRequestProperty('Accept','text/bibliography; style=bibtex'); 
+0

请根据您的建议查看我的答案。非常感谢您的帮助!! –