CrossrefのAPIを使って,doiから文献情報を取得してみた by PHP

doiから文献情報を自動的に取得する必要があって,PHPからCrossrefのAPIに接続してみましたので,(たぶん熟練者にはツッコミどころ満載の)自分メモ.

手前味噌ですが,自分の論文「10.3897/BDJ.4.e10539」を例に.

//doi
$doi="10.3897/BDJ.4.e10539";

//crossrefのapiのURL
$url = "https://api.crossref.org/works/".$doi;
 
//cURLで情報にアクセス
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res =  curl_exec($ch);
    
//文献情報をjson_decodeで配列化.個人的に,よくある変数名xxx_arrayはxxx_aにしています.
$res_a=json_decode($res,true);

例えば,発表年「2016」は

$year = $res_a["message"]["issued"]["date-parts"][0][0];

また,タイトル「A dataset of fishes in and around Inle…..」は

$title=$res_a["message"]["title"][0];

ソース「Biodiversity Data Journal 4:e10539」は

$source=$res_a["message"]["container-title"][0]." ".$res_a["message"]["volume"].":".$pages=$res_a["message"]["page"];

著者については,複数著者なのでforeachで処理

foreach($res_a["message"]["author"] AS $eachAuthor_a){
 $familyName=$eachAuthor_a["family"]; //ファミリーネーム
 $firstName=$eachAuthor_a["given"]; //ファーストネーム
 ......処理....
}

著者で気になったのは,middle nameの値が見当たらなかったこと.あと,corresponding author と first author が違う場合,corresponding author が配列の最初に来るので順番が狂う,という点でした.

crossrefのapi以外にも,文献情報を取得するapiは いろいろあるかもしれません.