iT邦幫忙

DAY 27
2

回應鐵人賽的文章變鐵人系列 第 27

[Reply] 用 Ruby 透過 Z39.50 從國圖查詢圖書資料

上一篇 是用YAZ軟體工具來查詢資料,
本篇則從程式的方式來抓取 Z39.50 的資料。
在ruby環境下可安裝 Zoom 的套件,
ruby 的 1.8.x版本可順利安裝,
但 1.9.x 版本似乎無法順利安裝。

執行查詢看看會是怎樣:

$ irb -rzoom
>> rset = ''
=> ""
>> ZOOM::Connection.open('192.83.186.170:210/INNOPAC') do |conn|
?>   rset = conn.search("@attr 1=4 國際觀的第一本書")
>> end
=> nil
>> rset.size
=> 6

以書名查,可獲得一陣列,
也就是查到有六筆:
看看第一筆的內容是什麼?

>> p rset[0]
01127cam2 2200385   4500
001 001968364
005 20090806115603.0
008                                    chi
010 0  $a 9789861341163 $b 平裝 $d NT$360
020    $a tw $b 97013120
042    $a nbic
042    $a nbi9808aa01
050    $a 001968364
100    $a 20080828d2008    k  y0chiy08      e.
101 0  $a chi.
102    $a tw.
105    $a a   z   000yy.
200 1  $a 國際觀的第一本書 $e 看世界的方法 $f 劉必榮著
205    $a 初版
210    $a [臺北市] $c 先覺出版 $c 叩應公司經銷 $d 2008.09.
215 0  $a 318面 $c 圖, 地圖 $d 21公分
225 2  $a 社會觀察 $v 28.
260 1  $a 2008.
320    $a 含索引
410  0 $1 2001  $a 社會觀察 $v 28.
517 1  $a 看世界的方法 $z chi.
606    $a 國際政治 $2 cst.
606    $a 國際經濟 $2 cst.
606    $a 國際關係 $2 cst.
681    $a 578 $b 8756.
700  1 $a 劉 $b 必榮
801  0 $a tw $b CIP $c 20080709 $g CCR.
801  1 $a tw $b CIP $c 20080709 $g CCR.
801  2 $a tw $b 國圖 $c 20090806 $g CCR.
805    $a NCL $d 578 $e 8756 $c 003764360 $t CCL $w n $x n $z 681.

這就是所謂的MARC、機讀編目格式,
如何去讀取各欄的值呢?

可以透過 rset[0].xml 把marc轉為XML的格式,
然後再用可以parse XML的工具就可抓取所需的欄位。

require 'hpricot'
doc = Hpricot::XML(rset[0].xml)
# 抓取 ISBN
doc.at("[@tag='010']//[@code='a']").innerText
# 抓取 書名
doc.at("[@tag='200']//[@code='a']").innerText

MARC格式對程式處理而言,
似乎比較麻煩,
而轉成XML格式,雖多一道手續,
但從現有的工具存取,
卻相對地更容易些。

系列文章


上一篇
[Reply] 用YAZ 透過Z39.50 從國圖查詢圖書資料
下一篇
[Reply] ZFS 簡單入門教學(一)
系列文
回應鐵人賽的文章變鐵人30

尚未有邦友留言

立即登入留言