2013-07-29 67 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

請根據您的建議查看我的答案。非常感謝您的幫助!! –