Restインターフェース例
curlの例
HEM化合物の構造データファイルをmmCIFフォーマットで取得する際にUNIX系システムで使用されるcurlコマンドの例を示します。
$ curl -F "id=HEM" -F "format=mmcif" https://pdbj.org/rest/downloadCOMPfile > HEM.cif.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4703 101 4463 120 240 22121 1189 --:--:-- --:--:-- --:--:-- 207k $ zcat HEM.cif.gz | head data_HEM # _chem_comp.id HEM _chem_comp.name "PROTOPORPHYRIN IX CONTAINING FE" _chem_comp.type NON-POLYMER _chem_comp.pdbx_type HETAIN _chem_comp.formula "C34 H32 Fe N4 O4" _chem_comp.mon_nstd_parent_comp_id ? _chem_comp.pdbx_synonyms HEME _chem_comp.pdbx_formal_charge 0
Pythonの例
次の例は詳細検索で、クライアント側のインターフェース内に 同等のページがあります。 このスクリプトは、2014年1月1日以降に公開された、分解能が1.8Å以下のすべてのX線エントリーを検索します。 検索クエリは、pdbid、構造のタイトル、分解能を取得し、最後に分解能で結果を並べ替えます。
import urllib, json
url = "https://pdbj.org/rest/newweb/search/pdb"
params = "rdate_after=2014-01-01&method=1&res_max=1.8&sortBy=8"
json_data = urllib.request.urlopen(url+"?"+params).read()
data = json.loads(json_data)
total = data["total"]
results = data["results"]
print("Total number of results:", total)
print("Printing the first 10 results:")
for i in range(10): print(results[i][0], results[i][1], results[i][13])
上記のコードでは、クエリの結果を取得し(9行目)、JSONデコーダを使用して結果を読み込みます(10行目)。 JSONデコーダーによってデータが読み込まれた後、データはPythonのネイティブオブジェクトとしてアクセス可能になります(19行目と20行目などを参照)。 最後に、スクリプトは結果の総数と最初の10件の結果を(画面に)出力します。
Perlの例
以下の例は、ステータス検索で、クライアント側のインターフェース内にも 同等のページがあります。 このスクリプトは、2021年1月1日以前に登録されたすべての未公開エントリー(HPUB)を検索します。 このクエリは、すべての列(pdbid、author_list、title、status_code、author_release_sequence、date_hold_coordinates、initial_deposition_date) を取得し、最後に登録の古い順に結果を並べ替えます。
use LWP::Simple;
use JSON qw(decode_json);
$url = "https://pdbj.org/rest/newweb/search/status";
$params = "status_code=HPUB&ddate_before=2021-01-01&sortBy=4";
$json_data = get($url . "?" . $params);
$data = decode_json($json_data);
$total = $data->{"total"};
my @results = @{$data->{"results"}};
print "Total number of results: " . $total . "\n";
print "Printing the first 10 results:\n";
foreach my $r (@results[0..10]) {
foreach my $i (@$r) {
print $i . ",";
}
print "\n";
}
上記のコードでは、クエリの結果を取得し(7行目)、JSONデコーダを使って結果を読み込んでいます(8行目)。 JSONデコーダでデータが読み込まれた後、データはPerlのネイティブ・オブジェクトとしてアクセスできるようになります(13行目と14行目を参照)。 最後に、スクリプトは結果の総数と最初の10件の結果を(画面に)出力します。
上記のコードには、CPANリポジトリ経由でインストール可能なjsonパーサー(JSON)が必要です。
Rの例
次の例はmine 2 sql検索で、クライアント側のインターフェイスにも 同等のページ があります。さらに、PDBjのchemieサービスでも関連PDBエントリータブに全く同じクエリを使用しています。 このスクリプトは、指定された化合物ID(ここでは「K」)に関連する全てのPDBエントリーを検索します。 この検索では、 brief_summaryテーブルのカラム(pdbid, struct_title, deposit_author, citation_title_pri, citation_journal_pri, citation_year_pri, citation_volume_pri, db_pubmed, db_doi, deposition_date, release_date, modification_date, exptl_method, resolution, pdbx_descriptor) の一部を取得しています。
library(RCurl)
library(rjson)
url <- "https://pdbj.org/rest/newweb/search/sql"
params <- "q=select%20distinct%20on%20(chem_comp.pdbid)%20brief_summary.pdbid%2C%20struct_title%2C%20deposit_author%2C%20citation_title_pri%2C%20citation_journal_pri%2C%20citation_year_pri%2C%20citation_volume_pri%2C%20db_pubmed%2C%20db_doi%2C%20deposition_date%2C%20release_date%2C%20modification_date%2C%20exptl_method%2C%20resolution%2C%20pdbx_descriptor%20from%20brief_summary%20inner%20join%20chem_comp%20on%20chem_comp.pdbid%20%3D%20brief_summary.pdbid%20where%20chem_comp.id%3D%27K%27"
json_data <- getURLContent(paste(url,params, sep="?"))
data <- fromJSON(json_data)
total <- data["total"]
results <- data["results"][[1]]
print(paste("total number of results:", total))
print("Printing the first 10 results:")
for (r in head(results, 10)) {
print(paste(r[[1]], r[[2]], sep=" - "))
}
上記のコードでは、クエリの結果を取得し(7行目)、JSONデコーダを使用して結果をロードします(8行目)。 JSONデコーダによってデータが読み込まれた後、データはRのネイティブ・オブジェクトとしてアクセス可能になります(13行目と14行目などを参照)。 最後に、スクリプトは結果の総数と最初の10件の結果を(画面に)出力します。
上記のコードには、jsonパーサー(rjson)とHTTP取得モジュール(RCurl)が必要で、どちらもCRANリポジトリからダウンロードできます。