通过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读了一星期都没看懂什么玩意)