CALIS馆际互借系统文献预处理程序设计
2015-05-12朱玉强山东师范大学图书馆山东济南250014
朱玉强(山东师范大学图书馆,山东济南250014)
CALIS馆际互借系统文献预处理程序设计
朱玉强
(山东师范大学图书馆,山东济南250014)
[摘要]针对馆际互借员需要对用户向CALIS系统提交的文献请求进行大量重复性预处理操作的现状,设计并实现基于网页文档对象的辅助程序,全自动检索、获取并向用户推送免费资源,执行“本馆运送”操作,以提升馆际互借员操作体验,有效节省图书馆经费。
[关键词]CALIS馆际互借网页文档对象跨域访问
[分类号]TP393
1 引言
CALIS管理中心于2004年6月21日启动“馆际互借/文献传递服务网”,开展返还式“馆际互借”及非返还式“文献传递”服务[1]。以山东师范大学图书馆为例,除CALIS提供馆际互借补贴外,该馆还通过图书馆经费向读者追加补贴,用户几乎全免费获取非返还式电子全文。读者通过CALIS免费获取文献后,往往不愿再去检索本地馆藏,有需求时直接向CALIS系统提交。为节省本馆经费,馆际互借员有必要对读者申请预先处理,对本地有馆藏或可通过免费途径得到的文献,直接执行“本馆运送”操作。笔者通过CALIS馆际互借官方QQ群调研,上述现象普通存在。故此通过操作网页文档对象等途径编制程序,全自动预处理馆际互借请求,可有效节省图书馆经费,提升馆际互借员操作体验。
2需求及技术思路
CALIS馆际互借系统依托网页实现功能,故程序围绕对网页元素的自动操作展开。温晓明[2]使用Python语言,通过向图书馆OPAC服务器提交POST请求的方式模拟人工操作网页,检测图书馆电子资源可用性;胡卫等[3]编制软件,向HTTP服务器发送POST请求,取回服务器响应后的网页源文件,模拟人工搜索、下载地震相关资料;张金等[4]为解决网页表单数据重复填写等问题,通过分析Web页面结构,提出一种Web元素智能识别方法,实现自动化操作;陈江勇等[5]使用测试工具Selenium提供的API对Web界面元素所持有事件进行封装,达到自动操作网页元素、对Web应用程序进行自动测试的目的;任昌[6]介绍了综合运用DOM树路径、DOM压缩树路径以及参考点等方式进行网页对象定位;张宗科[7]对于不能使用网络蜘蛛下载的网页,通过模拟按键等方式模拟人工打开、保存、关闭网页系列操作,减轻人工重复劳动;杨延航等[8]介绍了使用ASP.NET实现向网页上传文件的方法。上述文献或囿于应用环境,均未涉及异域数据集成环境中(下简称“跨域”)对网页元素的操作。陈腊梅等[9]提出了使用XMLHTTP代理外加JSON技术解决AJAX跨域访问和展现数据的问题,解决方案相对复杂。CALIS馆际互借系统网页虽未采用复杂的框架及跨域元素,但难免被嵌套使用。笔者除利用微软提供的针对IE浏览器的二次开发接口操作网页元素外,还利用Win32 API函数实现了跨域网页元素的枚举和操作,总体工作流程如图1所示。
图1 总体工作流程
3关键方法与技术
3.1取网页文档对象、定位目标网页元素
程序工作于Internet Explorer或用户指定的IE内核浏览器。取浏览器句柄,筛选类名为“Internet Explorer_Server”(下简称“IES”)子句柄;操作IES,取网页文档对象;操作网页文档对象,实现模拟真人点击或填表等。算法描述如下:
输入:Internet Explorer或IE内核浏览器。
输出:可精确定位的目标网页元素。
Step1:运行浏览器,使用FindWindow或EnumWindows取顶级窗口句柄hwnd;使用FindWindowEx或EnumChild⁃Windows取hwnd中ClassName为“Internet Explorer_Server”的子句柄hwnd_IES。
Step2:取hwnd_IES网页文档对象。易语言中核心代码为:
①Message=RegisterWindowMessageA(“WM_HT⁃ML_GETOBJECT”);
②SendMessageTimeout(hwnd_IES,Message,0,0,2,1000,ResourceNO);
③ObjectFromLresult(ResourceNO,{ 32,197,111,98,30,164,207,17,167,49,0,160,201,8,38,55 },0,网页文档对象)。
Step3:取网页文档对象中具体元素并操作。以“CALIS山东省文献信息服务中心”馆际互借员登录界面[10]为例,“账号”文本框源码为“”,自动填写用户名“zhuyq”可用以下代码:
元素=网页文档对象.对象型方法(“getElementBy⁃Id”,“userid”)
元素.写属性(“value”,“zhuyq”)
如元素无“id”和“name”,可使用“getElementsByTag⁃Name”取同类Tag元素集合,再据元素特殊属性如矩形大小、坐标等筛选。如网页含框架,还需搜索框架。对于跨域框架,如类似“”则相对复杂,可调用IServiceProvider接口实现网页元素的定位和操作[11],算法如图2所示。
图2 跨域框架操作
3.2格式化用户提交的文献请求
自动登录后,取“新收到读者申请”列表,逐一跳转列表各链接,在“事务信息”详情页,提取用户邮箱、文献类型、出版物名称、文章题目等信息,进而决定后续自动操作方法及目标,流程如图3所示。
图3 格式化用户提交的文献请求
3.3自动检索馆藏资源并下载
结合山东师范大学图书馆实际,对用户提交请求,纸本资料以检索馆藏OPAC为主;电子资源以检索“读秀”为主;另据语种、学科分类,选相关专题数据库做辅助检索。如OPAC显示馆藏有纸本资源,采集网页源码,使用正则表达式筛选馆藏地及索取号信息,供后续推送结果;如馆藏有电子资源,自动下载全文,供后续推送。算法上,除操作网页文档对象,同时调用HTTP下载协议以及诸如SendMessage、PostMessage等Windows API。笔者就此曾专门撰文[12],另外自动检索驻济协作馆联合目录、各馆资源发现系统亦与此类似,不再赘述。
3.4自动检索互联网免费资源并下载
互联网资源浩如烟海,结合本校用户文献请求范围及笔者工作实践,划定www.socolar.com、百度文库、Google学术搜索、新浪爱问、道客巴巴作为互联网免费资源检索范围。此类资源站中,有些检索到全文可直接下载;有些需登录,甚至要求账号达到一定积分值方可下载。对前者,采用3.3所述方法即可;对后者,笔者针对不同网站特点制作了账号自动申请、自动分享软件,采用ADSL断网重连自动换IP的方法规避验证码限制,借以获取积分,提升账号下载流量。
3.5自动推送结果并自动结算
综合各自动操作结果,核查最终有否纸本或电子资料可提供给用户。如有,利用SMTP协议向3.2中采集的用户邮箱发送邮件,推送纸本资源馆藏地、索取号或电子文档全文,之后可自动执行“本馆运送”操作;如没有则记录,供后续转人工操作。
图4 CALIS“本馆运送”操作界面
CALIS馆际互借系统执行“本馆运送”共4个步骤:①单击图4所示下拉框“本馆运送”项;②在弹出窗口单击“提交”按钮;③单击弹出信息框确认按钮,执行提交;④关闭成功提示信息框,其中第1步相对复杂。通过网页SPY工具探知同一页面各下拉框“id”均为空,“name”均为“send”,可如下操作:
输入:含类似“
输出:可精确定位的SELECT元素、打开“本馆运送”网页供操作。
Step1:取网页文档对象。
Step2:取“SELECT”元素对象集:对象集=网页文档对象.对象型方法(“getElementsByTagName”,“SELECT”)。
Step3:枚举对象集所有元素,如返回的“onchange”属性包含“s_openwindow”,取其中数字编码如“5098046”,则此SELECT元素对应的即为申请号为5098046的文献请求。
Step4:操作筛选到的SELECT元素。核心代码为:元素.写属性(“selectedIndex”,2)。
4应用效果评估
程序界面如图5所示。将程序分别运行于WinXP SP3、WIN7 SP1(32位、64位)、WIN8(32位、64位)操作系统以及Internet Explorer v6.0-v10.0浏览器环境中,常驻内存7×24小时测试,软件未发生崩溃。测试期间,总计25台电脑、4200小时内对用户提交的1000条馆际互借请求(真实请求319条,另有为测试向系统提交的681条仿真请求)进行了处理,共计筛选出可执行“本馆运送”的请求873条,向用户推送索取号354次,向用户邮箱投递电子文档439篇(次),自动执行“本馆运送”操作867次。经人工复核,成功率91.4%。
图5 程序主界面
图6显示自动下载到免费全文后,向用户邮箱投递电子全文附件,邮件正文除说明情况外,还可以对用户进行简单培训。
图6 向用户邮箱投递电子全文附件
程序自动对处理失败的条目进行详细记录并提供可能的错误原因,供馆际互借员后续分析、处理,如图7所示。
图7 错误日志
5 结语
笔者通过操作网页文档对象,模拟网页元素填表、点击、下载等操作,设计并实现了基于CALIS馆际互借系统的文献请求预处理程序。该程序可降低馆际互借成本,减少馆际互借员操作,将操作员从重复性工作中解放出来,提高工作效率。目前该程序无法使用多线程开展工作,速度较慢,效率较低,对恶劣网络环境容错能力较差,有待进一步优化。
参考文献:
[1]李军凯.CALIS馆际互借与文献传递网的现状与发展[J].图书馆杂志,2005(10):30-33.
[2]温晓明.基于Python的电子资源可用性检测方案[J].中华医学图书情报杂志,2013(1):68-71.
[3]胡卫,等.自动任意下载网页上的地震目录资料[J].地震地磁观测与研究,2005(6):105-110.
[4]张金,刘小飞.Web网页控件的智能识别及其自动化操作[J].计算机系统应用,2009(4):163-166.
[5]陈江勇,等.Web自动化测试框架的设计与实现[J].福建师范大学学报:自然科学版,2013(4):39-45.
[6]任昌.基于多特征融合的网页对象自动定位技术研究[D].太原:中北大学,2011.
[7]张宗科.自动下载批量网页的一种模拟人工实现方法[J].电脑编程技巧与维护,2013(12):96-98.
[8]杨延航,裴树军.在网页中实现文件上传方法的分析与研究[J].信息技术,2004(6):76-77,81.
[9]陈腊梅,等.AJAX跨域访问的研究与应用[J].计算机工程与设计,2008(22):5680-5684.
[10]山东大学图书馆.CALIS山东省文献信息服务中心[EB/ OL].(2013-11-20)[2013-12-22].http://uas.sd.calis.edu. cn:8090.
[11]浊酒一壶.易语言跨域操作网页/易语言汉语编程官方论坛[EB/OL].(2012-08-25)[2013-12-22].http://bbs. eyuyan.com/read.php?tid=317997.
[12]朱玉强.图书馆电子资源可否浏览及下载监测程序设计[J].现代图书情报技术,2013(11):86-90.
朱玉强男,1978年生。硕士,副研究馆员。研究方向:现代图书情报技术。
收稿日期:(2014-09-04;责编:张欣。)