我想通过从matlab中向http://www.crossref.org发送DOI(数字对象标识符)来检索bibtex数据(用于构建参考书目)。
crossref API建议如下:
curl -LH "Accept: text/bibliography; style=bibtex" http://dx.doi.org/10.1038/nrd842
基于this来源。
here中的另一个示例在ruby
中建议了以下内容:
open("http://dx.doi.org/10.1038/nrd842","Accept" => "text/bibliography; style=bibtex"){|f| f.each {|line| print line}}
虽然我听过ruby rocks,但我想在matlab中这样做,并且不知道如何翻译ruby消息或解释crossref命令。
以下是我到目前为止发送doi以交叉反射并检索xml中的数据(变量retdat
),但不是bibtex格式:
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;
帮助将ruby语句转换为matlab可以使用脚本发送的内容,例如发布的脚本以建立与crossref的通信将非常感激。
修改
其他约束包括代码的向后兼容性(至少回到R14):>(。另外,不使用ruby,因为它解决了问题,但不是“matlab”解决方案,请参阅here如何通过system('ruby script.rb')
从matlab调用ruby。
答案 0 :(得分:1)
您可以根据需要轻松编辑urlread。由于版权问题,我不会发布修改后的urlread功能代码。
在urlread中,(我的是在C:\ Program Files \ MATLAB \ R2012a \ toolbox \ matlab \ iofun \ urlread.m),作为最不优雅的解决方案:
在“%从连接中读取数据”之前。我补充说:
urlConnection.setRequestProperty('Accept','text/bibliography; style=bibtex');
答案 1 :(得分: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的建议不同。行
urlConnection.setRequestProperty('Content-Type','application/x-www-form-urlencoded');
urlread
中的替换为
urlConnection.setRequestProperty('Accept','text/bibliography; style=bibtex');