2

DOI (Digital Object Identifier) をmatlab 内からhttp://www.crossref.orgに送信して、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 rocks を聞いたことがありますが、これを matlab で実行したいと考えており、ruby メッセージを翻訳する方法や crossref コマンドを解釈する方法がわかりません。

以下は、これまでのところ doi を crossref に送信し、bibtexretdatではなく xml ( variable ) でデータを取得するために持っているものです。

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 が送信できるものに変換するのに役立ちます。

編集:

追加の制約には、コードの下位互換性 (少なくとも R14 まで戻る) が含まれます:>(。また、問題は解決しますが「matlab」ソリューションではないため、ruby を使用しませsystem('ruby script.rb').

4

2 に答える 2

1

必要に応じて urlread を簡単に編集できます。著作権のため、変更した urlread 関数コードは投稿しません。

urlread では (私の場合は C:\Program Files\MATLAB\R2012a\toolbox\matlab\iofun\urlread.m にあります)、最も洗練されていない解決策として:

「% Read the data from the connection.」の直前。追加した:

urlConnection.setRequestProperty('Accept','text/bibliography; style=bibtex');
于 2013-07-30T22:34:35.007 に答える
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');
于 2013-07-31T10:46:21.907 に答える