朱玉强
微信公众平台拥有庞大的用户群,成为图书馆移动服务的重要载体。至2019年4月13日,微信公众号中带“图书馆”字样的有3218个,其中550个通过了微信官方认证[1]。42所“双一流”高校图书馆均开通了微信公众号,服务包括本馆信息、借阅查询、阅读推广、资源推广、续借预约、信息素养教育、学科支撑及专利信息等。本文围绕微信公众平台编写文献传递机器人,用户仅需向公众号发送一条消息就可在移动或PC端获取电子文献全文并阅读,方便用户使用并可提高图书馆电子资源利用率。
国内外对图书馆移动服务的研究主要集中于移动服务类型、提供途径、营销手段及质量监控等。郭亚军等[2]调查美国143家城市公共图书馆,发现97%的图书馆提供移动网站或APP,服务于参考咨询、位置导航等。王颖纯等[3]考查WAP、APP、微信公众平台和微博在我国31家省级公共图书馆应用情况,发现被调查图书馆都开通了微信公众平台,开通APP的有27家、微博24家、WAP14家,除微博外主要开展“个人图书馆”移动服务。张晓青[4]考查国内“985工程”高校图书馆,发现存在门户网站没有采用自适应网页设计、WAP与APP同质化、没有基于微信的移动门户等问题。何丹丹等[5]利用CiteSpace挖掘我国图书馆移动服务领域研究热点,将其归纳为信息技术研究、应用服务创新研究和服务质量研究。
目前文献传递业务面临巨大挑战。陆尧等[6]发现OCLC文献传递服务量自2011年至2015年呈下降趋势。梁南燕等[7]、罗钧等[8]、徐飞等[9]分别撰文提到CASHL、CALIS和BALIS文献传递量下滑已成不争事实。面对挑战,CASHL、国家科技图书文献中心、CALIS分别于2016年1月、4月和6月相继开通微信平台提供文献传递移动服务,服务继承了PC时代只面向文献机构、不应对读者个人请求的传统。
陈建红[10]发现高校图书馆对电子资源推广不力,造成大学生对电子资源不了解,更谈不上利用。常定姁[11]指出当前电子资源亟待推广,介绍了武汉大学图书馆利用微信公众平台开展电子资源推广活动案例。吕玉龙[12]介绍了上海理工大学图书馆利用PHP技术自行开发文献传递系统和馆际互借管理系统实例,弥补CALIS、CASHL和NSTL三大文献传递系统只对图书馆开放、不直接面向读者的不足,并允许用户免费申请图书馆已购买电子资源。齐晓峰[13]介绍了华东理工大学图书馆利用网盘构建稀缺文献数据库展开文献检索与传递服务。欧阳剑等[14]采用自动代理机制实现移动终端对电子资源的检索与文献传递。
相对以往文献中的PC或移动端开发实践以及商业化远程访问系统,本文允许用户通过使用微信发送一条消息的简单操作即可获取文献全文,文献传递员只需登录微信公众平台并运行机器人程序,双方操作更便捷。机器人除可获取本机构资源,还可扩展到通过文献传递员远程访问可获取的机构外资源,用户无需关注机构与机构之间传递详情,充分体现了移动服务的便利性与易获取性。
系统总体目标为:用户通过微信提交文献请求,PC端文献传递机器人自动获取相关文献并将其发送至用户邮箱,用户可在移动或PC端接收并阅读文献,推进图书馆电子资源移动服务。系统不搭建第三方服务器,不动用微信高级接口,利用微信公众平台开展近乎全自动的工作。
用户使用微信向公众号发送所需文献的标题等消息,编写PC端文献传递机器人,周期性检测微信公众平台有无新消息,根据有无特征字判断新消息是否为文献传递请求。有效性检测包括:用户是否合法;用户有否超出当日请求限制,等等。对有效请求,程序通过操作网页文档对象提示用户“已接单”。自动回复中包含操作员信息,可作为多终端协同作业特征符,便于任务有效性识别、分发、结单、日志分析与统计等。“接单”后程序优先检索本地磁盘,如找不到用户请求的文献,自动构建检索策略从电子资源库下载该文献;检测文献质量,将达标文献发送至用户邮箱;记录工作日志并将下载文献归档。程序空闲时随机自动操作网页以防因长时间无操作被踢除登录状态。程序可满足不同文献传递员偏好,如除特定字串外允许操作员自定义自动回复与邮件内容等,在推进电子资源移动化服务同时助力个性化学科服务建设等。
系统由微信用户端、微信公众平台、PC端文献传递机器人三层结构组成,见图1。PC端机器人收割用户发向微信公众平台的消息,根据消息类型分类部署,进入“用户认证”模块或“文献传递”模块,按需进行环境设置、接入扩展接口等。
图1 系统模块
主要流程如图2所示。舍弃消息池中不含特征字的非相关消息;对相关消息,优先执行“用户认证”模块;对合法用户和有效文献请求,优先检索本地资源,若本地缺藏再检索网络数据库并自动下载文献,发送给用户。
图2 技术流程
程序建立专用数据库以甄别消息来源及有效性等,实现用户认证。不调用微信高级接口前提下,用户fakeID相对公众号具全局唯一性,列为数据库核心参数。提取类似“https://mp.weixin.qq.com/cgi-bin/singlesendpage?tofakeid=otmpOuOqOhuGkTvm0YpVWyjmn884&t=message/send&action=index&quickReplyId=442628135...”消息链接,其中“otmpOuOqOhuGkTvm0 YpVWyjmn884”即为用户fakeID。用户申请认证时向公众号发送类似“文献传递绑定|生命科学学院|胡东海”的格式化文本,程序对接图书管理系统,判断申请是否来自图书馆合法用户,是则写入“文献传递”数据库,用户数据见表1。
表1 文献传递用户数据表
模块从微信公众平台获取用户消息,根据消息及请求有效性进行分类部署。获取消息通过操作网页文档对象实现。枚举并筛选网页源码中“href”值包含“https://mp.weixin.qq.com/cgibin/singlesendpage?tofakeid=”的“a”标签,跳转后枚举并筛选id前缀为“wxMsg”的“div”标签,读取其innerText值即可。分类部署时,顺序判断消息是否含“处理中”特征字,有则返回;判断消息是否含“请求传递”特征字,有且申请合法时自动回复“处理中”特征字,执行文献传递并返回;如文本含“申请绑定”特征字,执行用户认证模块。对不带“文献传递”特征字的普通消息不予理会。提取消息核心算法如下:
提取用户提交的文献信息,如本地磁盘有此文献,直接发给用户,否则自动构建检索策略,访问电子资源库下载文献并发给用户。
在电子资源库执行检索策略并筛选结果仍通过操作网页文档对象实现,此不赘述。下载文献时,通过解析网页Request Headers等元素可获取真实、静态的下载链接。考虑到电子资源库、资源发现系统类型繁多,本文采用模拟真人点击Windows标准窗口组件操作思路,即监测到下载会话框出现时自动设置存储位置、单击“保存”按钮等。常规操作方法为使用Windows API函数SendMessage向文本框或按钮发消息,改变文本框初始值或按钮按下与释放状态。本文引入第三方下载器Internet Download Manager接管浏览器下载模块,固定了下载会话框的窗口标题、默认下载位置、按钮文本等,此时使用脚本语言AutoHotKey编写代码比常规方法更方便,核心代码如下:
WinWaitActive,下载文件信息 ahk_exe IDMan.exe
ControlClick,开始下载(&S),下载文件信息 ahk_exe IDMan.exe,,Left,1,NA
下载完成后使用Adobe Reader打开文档,阅读器窗口标题应包含文献题名,否则或因网络原因导致文档下载失败,藉此可粗略检查下载作业质量。
对运行环境进行评测和设置,可提升程序兼容性和扩展性。当影响网页文档操作或Windows标准控件操作的进程存在时,提示用户,提供改写配置文件或Windows注册表等解决方案。自动操作网页文档对象的前提是被操作网页载入完毕,否则可能出现待操作对象为空、自动操作指令被阻塞等问题,允许操作员根据电脑配置及网络状况设置网页就绪等待超时、重试刷新间隔及次数、网络意外断开时是否以合成语音或mp3音乐报警等。允许操作员进行更多个性化设置并预留接口,如本机构缺藏文献时询问用户有无意愿向外机构付费申请等。
程序可稳定运行于32位、64位Windows 7和Windows 10操作系统,连续运行7×24小时无故障且功能确切。内测期间收到用户消息936条,文献传递满足率100%。用户可在PC或移动端(Android/iOS)下载邮箱中的PDF格式文献并阅读。
936条消息中与文献传递相关的有875条,由397人发出。取消息首次成功率97.44%,容错重做成功率100%,失败原因主要为网络故障导致打开网页超时。875条消息中有406条申请“绑定用户”,其中9条为同一微信账号重复发送;有469条申请“文献传递”,其中含同一账号重复请求或申请多笔文献。
处理绑定请求平均耗时3.17秒。处理文献请求平均耗时62.39秒,首次成功率97.6%,容错重做成功率100%。失败原因有:(1)优先检索中国知网时用户并发数已满,导致网页就绪超时;(2)网络丢包导致网页就绪超时;(3)等待下载对话框超时;(4)远程访问系统丢失Cookie,导致无法访问;(5)文献下载总量超出远程访问限制大小;(6)邮件服务器反垃圾系统拒绝发信。出错任务平均重做3次成功,最多重做5次。程序运行于64位Windows7操作系统的界面如图3所示。
由上可见,程序功能确切,自动化程度高,操作员仅需简单设置即可由程序全自动操作。程序不搭建第三方服务器,在节省硬件、公众号认证等投资同时,对操作员计算机操作能力要求很低。测试时30位文献传递员通过单击“帮助”按钮查看说明即会使用,无需集中培训。用户提交认证、请求文献只需向微信公众号各发送一条格式化文本,同样无需集中培训。程序“接单回复”机制可有效避免单机或多机协作时有可能产生的重复劳动,可根据实际情况开启、暂停或停止相关功能,日志系统方便文献传递主管排查错漏、对操作员考核评价等。
图3 文献传递机器人程序主界面
微信是图书馆创新工作思路、开展移动服务的重要工具。本文围绕微信公众平台编制程序,全天候近乎全自动地为用户提供文献传递服务,为学科馆员实践和读者服务工作提供新思路和新方法。实践表明,即使不调用微信高级接口也可以方便高效地开发协作型应用。程序不绑定私有域名,只需调整少许代码即可应用于不同图书馆或文献传递机构,具推广性。但是,因程序只供文献传递员简单操作,界面简陋,部分外围设置未窗口化;因程序部分使用模拟按键操作,无法多线程作业,处理速度不尽人意,工作电脑亦不能同时开展其他工作;因无服务器支持,用户数据库需手工同步等,这些都尚待完善。