我想通过从 matlab 中向http://www.crossref.org发送 DOI(数字对象标识符)来检索 bibtex 数据(用于构建参考书目) 。
crossref API 建议如下:
curl -LH "Accept: text/bibliography; style=bibtex" http://dx.doi.org/10.1038/nrd842
基于此来源。
此处的另一个示例建议以下内容ruby
:
open("http://dx.doi.org/10.1038/nrd842","Accept" => "text/bibliography; style=bibtex"){|f| f.each {|line| print line}}
虽然我听说过 ruby rock,但我想在 matlab 中执行此操作,但不知道如何翻译 ruby 消息或解释 crossref 命令。
以下是我到目前为止发送一个 doi 到 crossref 并检索 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”解决方案,请参阅此处了解如何通过 matlab 调用 ruby system('ruby script.rb')
.