通過z39.50協定用YAZ軟體擷取Marc資料(JAVA版)
目前網上沒有找到相關正式可用的例子,于是自己花了一星期去看文檔和前人寫的例子(都是10多年前的文章和資源),分享給大家,希望後來的和我一樣的菜鳥能用到
- 配置環境:安裝yaz軟體。官網:https://www.indexdata.com/resources/software/yaz/下載下傳對應的版本後無腦安裝就可以了。
- 建立java項目,導入jar包,安裝好的YAZ目錄下有一個java檔案項,裡面有jar包。
-
編寫類就可以了。
1.建立連接配接對象:需要位址和端口
2.設定連接配接的一些參數:密碼,使用者名,資料庫名,查詢方式
3.定義查詢語句
4.連接配接(查詢語句)
5.接收結果
6.取出内容
7.關閉連接配接
public List<String> CNmarc(String host,int port,String username,
String password,String datebase){
Connection c=null; //聲明連接配接
Query q=null; //聲明查詢
int n=0; // 聲明嘗試次數
List<String> list =new ArrayList<String>(); // 傳回的集合
try {
c=new Connection(host, port);
//possibly set some options 可能設定一些選項
c.option("elementSetName","F"); //設定簡單或者複雜資料查詢: B or F -- 簡單 or 複雜
c.setDatabaseName(datebase);
c.setUsername(username);
c.setPassword(password);
c.setSyntax("Unimarc");//資料格式
c.connect(); //establishes connection 建立連接配接
//查詢語句
StringBuilder queryBuilder = new StringBuilder();
queryBuilder.append("@attr 1=7 ");//isbn 号 帶不帶 - 都可以(自己測試的結果)
//978-7-5463-4045-6 西遊記的 //9787508690254 行為設計學的
queryBuilder.append("\"" +"9787508690254"+ "\"");
Query query =new PrefixQuery(queryBuilder.toString());//建立查詢類型和語句填充
ResultSet set=c.search(query);//查詢,并接收查詢結果集
/*測試時: 單取第一條
byte[] b=set.getRecord(0).getContent();//取第一條結果集
String st1 =new String(b,"gbk");//以gbk編碼格式展示
// String st2=set.getRecord(0).render();//取出結果集第一條并斷句展示(但是格式預設是gbk(或者擷取的預設編碼),無法再轉碼,如果你的程式是utf-8或者其他編碼格式,會出現亂碼)
System.out.println("共:"+set.getHitCount()+"條");
System.out.println("結果:"+st1);
*/
for(int i =0; i<set.getHitCount();i++){
byte[] b=set.getRecord(i).getContent();
String st1;
try {
st1 = new String(b,"gbk");
list.add(st1);
} catch (UnsupportedEncodingException e) {
//編碼轉化失敗
}
}
}catch (ZoomException e) {
//handle any protocol- or network-level errors
//連接配接時有時會逾時異常,解決辦法:再次調用,并計數,超次數傳回 空集合
if(n<5) {
n=n+1;//計數一次
CNmarc(host,port,username,password,datebase);
}else {
return list;
}
} finally {
c.close(); //close the socket 關閉連接配接
}
return list;
不會可以下載下傳我的例子看(例子也差不多,類就是這個類),沒有币的可以私聊我,qq:1157673954
分享一下文檔:
資料參考:
http://zoom.z3950.org/api/zoom-1.4.html zoom文檔
https://www.indexdata.com/resources/software/yaz/ YAZ官網
https://software.indexdata.com/yaz4j/site/apidocs/index.html jar文檔
https://software.indexdata.com/yaz/doc/ YAZ文檔
(外國兄弟文檔寫的真的爛…我tm讀了一星期都沒看懂什麼玩意)