通过从matlab发送DOI从crossref中检索bibtex数据:从ruby转换

时间:2013-07-29 19:37:58

标签: ruby matlab bibtex doi

我想通过从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。

2 个答案:

答案 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');