RubyでPORTAから書誌データを取ってくる

 Ruby を使って、国立国会図書館PORTA から書誌データを取得してみます。今回は ISBN の指定による検索を行いたいので、Z39.50 インターフェースを利用します*1
 まず、Ruby のライブラリである zoomisbn-tools をインストールします。

$ sudo gem install zoom
$ sudo gem install isbn-tools

 次に以下の内容のスクリプトを作り、適当な名前で保存します(とりあえず porta.rb とします)。なお、このスクリプトは"How to Find Free MARC Records with Ruby"に掲載されているものを、ほぼそのまま使わせていただいています。

#!/usr/bin/ruby -w
 
# This script was originally written by William Denton 
# http://www.miskatonic.org/library/zmarc.html
 
require 'rubygems'
require 'zoom'
require 'isbn/tools'
 
if ARGV.length == 0
  puts "Please specify an ISBN"
  exit 0
end
 
isbn = ARGV[0]
isbn = isbn.gsub(/[^0-9X]/, '')

unless ISBN_Tools.is_valid?(isbn)
  puts "This is not a valid ISBN"
  exit 0
end
 
# NDL蔵書目録(zomoku)を対象にする
# その他のデータベース名はPORTAの仕様書を参照
server = ['api.porta.ndl.go.jp', 210, 'zomoku']
 
def z3950query (isbn, host, port, db)
  begin
    ZOOM::Connection.open(host, port) do |conn|
      conn.database_name = db
 
      # PORTAでのZ39.50のデータ返戻形式はSUTRSのみ
      # サーバによってはMARCXMLなどが指定できる
      conn.preferred_record_syntax = 'SUTRS'
 
      # USE(検索項目)アトリビュート(Type-1)の値に7(ISBN)を指定
      # 検索項目の対応表はPORTAの仕様書を参照
      rset = conn.search("@attr 1=7 #{isbn}")
      return rset[0]
    end
  rescue Exception => e
    # puts e # Uncomment to see any server errors
    return nil
  end
end
 
puts "#{server[0]} ..."
 
result = z3950query(isbn, server[0], server[1], server[2])
 
# PORTA上の書誌データのISBNが10桁の場合、10桁で入力しないと
# ヒットしない。13桁の場合も同様
# このため、検索結果が空だった場合、10桁で入力されたISBNを13桁に、
# 13桁で入力されたISBNを10桁に変換してもう一度検索する
if result.nil?
  if isbn.length == 10
    isbn = ISBN_Tools.isbn10_to_isbn13(isbn)
  elsif isbn.length == 13
    isbn = ISBN_Tools.isbn13_to_isbn10(isbn)
  end
  result = z3950query(isbn, server[0], server[1], server[2])
end    
 
unless result.nil?
  puts result
  exit 1
end
 
puts "Sorry, nothing found"
exit 0

 このスクリプトを ISBN を引数にして実行すると、以下のような出力が得られます。あとはこれを好きなように整形します。

$ ruby ./porta.rb 9784820403302
api.porta.ndl.go.jp ...
【title】:書誌レコードの機能要件 IFLA書誌レコード機能要件研究グループ最終報告(IFLA目録部会常任委員会承認) 和中幹雄,古川肇,永田治樹訳
【titleTranscription】:ショシ レコード ノ キノウ ヨウケン IFLA ショシ レコード キノウ ヨウケン ケンキュウ グループ サイシュウ ホウコク IFLA モクロク ブカイ ジョウニン イインカイ ショウニン
【alternative】:Functional requirements for bibliographic records:final report.
【creator】(dcndl:NDLNH):和中‖幹雄(1948−)
【creator】(dcndl:NDLNH):古川‖肇(図書館学)
【creator】(dcndl:NDLNH):永田‖治樹(1944−)
【creator】(dcndl:NDLNH):国際図書館連盟
【creatorTranscription】(dcndl:NDLNH):ワナカ,ミキオ(1948−)
【creatorTranscription】(dcndl:NDLNH):フルカワ,ハジメ(図書館学)
【creatorTranscription】(dcndl:NDLNH):ナガタ,ハルキ(1944−)
【creatorTranscription】(dcndl:NDLNH):コクサイ トショカン レンメイ
【subject】(dcndl:NDLNH):目録法
【subject】(dcndl:NDC):014.3
【subject】(dcndl:NDLC):UL631
【subjectTranscription】(dcndl:NDLNH):モクロクホウ
【description】:121p 30cm
【publisher】:日本図書館協会
【issued】:2004.3
【issued】(dcterms:W3CDTF):2004
【identifier】(dcterms:URI):http://api.porta.ndl.go.jp/ndlopac/cgi-bin/ndlopac/ndl-book?kywd=20565544
【identifier】(dcndl:ISBN):4-8204-0330-3
【identifier】(dcndl:JPNO):20565544
【identifier】(dcndl_porta:NDLCN):UL631−H9
【language】(dcterms:ISO639-2):JPN
【dpid】:zomoku
【repository_no】:R000000001
【item_no】:I000562723

*1:OpenSearchでもISBN指定での検索をできるようにしてほしいなあ。

欲求バトン

G.C.W.さんから受け取りました。こんな開店休業状態のこの日記をおぼえていてくださって、ありがとうございます。

今やりたいこと

(1)勤務先で機関リポジトリを立ち上げる
(2)自家製図書館システムの開発
(3)再度ダブリンに行って、ギネスビールとウイスキーをさんざん飲みまくる

(1)は超短期的な目標、(2)はここしばらくの果たせていない夢。

今欲しいもの

(1)勤務先の新サーバー
(2)PowerMac G5 Quad
(3)HDVのカメラ
(4)TOEFL230点
(5)もう少し広い部屋

新サーバーはだいぶ前に注文したのに、まだ届かない。もう待ちくたびれた…。

現実的に考えて今買ってもよいもの

(1)Windows Server 2003
(2)Flash Studio 8
(3)Edius Pro 3
(4)Final Cut Studio
(5)Adobe Creative Suite

どれも仕事用ではなく勉強用。大学勤務でアカデミック版が買えるのはうれしい限り。

現実的に考えて欲しいし買えるけど買って無いもの

(1)新しいテレビ
(2)DVDレコーダー
(3)エアコン
(4)冷蔵庫
(5)洗濯機

どうせ家では寝るだけだしな。

今欲しいもので高くて買えそうにないもの

(1)OCLC FirstSearch
(2)Business Source Premier
(3)Flash Media Server
(4)ファイバーチャネルスイッチ
(5)車

データベースって高えよなあ…。

タダで手に入れたいもの

(1)実験用の古いコンピュータ(10台くらい)
(2)定期(自宅〜勤務先に加えて、秋葉原〜神保町〜新宿〜六本木〜三田〜湘南台間)

恋人からもらいたいもの

本。小説がいいな。

恋人にあげたいもの

PHS(定額プラン前提)。

バトンを回す人

いくまさん、夏ごろに「飲まないか」と言って以来だけど、元気しているでしょうか。

図書館機構

要するに京大の図書館だが、「機構」というのが新鮮な響きだ。中身はxoops

新サービスに熱心なのは大大学の図書館ばっかりに見えるのは俺だけか。
小規模館は意志決定の早さを生かせないのか。