图书馆微信公众平台的建设与研究
罗涛
东南大学图书馆 南京 210096
通讯作者:罗涛, ORCID: 0000-0002-2835-8579, E-mail:lt_zj@seu.edu.cn
摘要

【目的】通过微信公众平台的建设, 使读者能够便捷地获取图书馆的信息和服务, 提高图书馆的受关注度。【应用背景】随着微信公众平台影响力的不断扩大, 图书馆利用其开展移动服务成为一种趋势。【方法】图书馆本地服务器利用微信公众平台提供的消息交互接口获取读者发送的消息, 对消息验证后进行分类处理并将结果返回给读者。【结果】读者通过微信向图书馆公众号发送特定格式的消息就能进行本馆资讯、个人借阅信息、FAQ、书目以及文献等内容的查询。【结论】本应用作为图书馆移动服务的新模式, 既可以吸引读者的关注也可以加强读者与图书馆之间的互动交流。

关键词: 图书馆; 微信; 微信公众平台; 开发模式
中图分类号:G250
Construction and Research of Library WeChat Public Platform
Luo Tao
Southeast University Library, Nanjing 210096, China
Abstract

[Objective] Through the construction of WeChat public platform, the readers can easily access the library information and service, which can improve the library’s attention.[Context] With the expansion of public influences of WeChat platform, the library using it as mobile services becomes a trend.[Methods] The local server uses the message interface of WeChat public platform to get message from readers, then validates and classifies the message, finally the results return to readers.[Results] By sending specific format of the message to the WeChat public platform through WeChat, readers can access the library information, personal borrowing book information, FAQ, information of catalogue and literature.[Conclusions] As a new mode of library mobile service, this application attracts the attention of readers and strengthens the communication between readers and the library.

Keyword: Libaray; WeChat; WeChat public platform; Development mode
1 引言

微信是腾讯公司推出的一款以互联网和移动网为基础的手机通信软件, 它以信息交流为目的, 通过手机、电脑等工具传递语音、文字、图片、视频等资讯[1], 截至2013年11月微信注册用户已经突破6亿[2]。2012年8月腾讯公司新增微信公众平台模块, 个人和企业都可以利用其打造一个微信公众号, 用户通过关注微信公众号能够获得相关推送消息, 方便阅读和信息获取[3]。目前, 微信公众账号数量已超过200万。随着微信公共平台影响力的不断扩大, 越来越多的图书馆利用微信公共平台开展相关服务。

为了调查图书馆微信公众号的使用情况, 笔者以985高校的图书馆为对象, 通过关注和使用各图书馆微信公众号, 从公众号的类型和服务内容两个方面进行了分析研究。从类型来看, 绝大部分的图书馆都选择注册为订阅号, 只有上海交通大学图书馆和华中科技大学图书馆等少数几家图书馆注册为服务号。从服务的内容来看, 一部分图书馆主要是利用公众平台推送一些本馆的信息资讯, 例如北京大学图书馆和中国人民大学图书馆等; 另一部分图书馆除了推送信息外, 还提供图书检索、借阅信息查询、新闻查询、讲座预约、图书荐购和期刊导航等交互和查询功能, 例如清华大学图书馆[4]、厦门大学图书馆和南京大学图书馆等。东南大学图书馆也进行了微信公众平台的建设, 希望以此来锁定读者的需求, 让读者主动“ 上门” 关注, 提高读者对图书馆移动服务的依赖性和认同度。

2 建设方案
2.1 模式选择

微信公众平台有两种模式: 编辑模式和开发模式。编辑模式可以实现文字、语音、图片、图文消息的自动回复和关键词自动回复。开发模式除了具有编辑模式的几乎所有功能外, 还提供了API接口, 开发者可以根据需要在自身的服务器上开发和接入相关应用, 如自定义菜单、获取订阅者、对接相关业务系统等。对于图书馆来说选择开发模式进行公众平台的建设, 可以向读者提供更多、更全面、更便捷的移动服务内容, 例如可接入图书馆 OPAC 系统、读者管理系统、特色数据库, 甚至阅览座位管理系统等应用。因此, 东南大学图书馆公众平台选择开发模式进行建设。

2.2 运行机制

在开发模式下, 图书馆员首先要登录到公众平台进行消息接口的配置, 配置成功后, 公众平台与本地服务器之间就能够正常通信。图书馆微信公众平台的运行机制如图1所示, 读者通过移动终端登录到微信客户端, 向图书馆微信公众账号发送一条消息, 消息会首先到达微信服务器并由其转发到微信公众平台, 公众平台会先向图书馆本地服务器发送一条认证信息, 本地服务器处理后会返回认证结果, 如果认证成功, 公众平台会将读者发送的消息推送到本地服务器, 本地服务器接收消息后会判断消息的类型并根据消息内容进行相应的处理, 处理过程中有时还需要调用本地或远程数据库, 最后将结果发送给公众平台, 经由微信服务器最终返回给读者[5]

图1 图书馆微信公众平台运行机制

2.3 功能分析

从公众平台的运行机制来看, 本地服务器端的开发是建设的重点, 具体可分为三个方面:

(1) 建立微信公众平台和本地服务器之间的通信管道, 也就是将公众平台的消息接口与本地服务器Web应用接口进行绑定;

(2) 对于消息的处理, 只有符合特定格式的消息才能被正确识别, 当本地服务器接收到读者发送的信息后, 会首先对消息进行验证判断然后再进行分类处理;

(3) 数据库的维护, 系统中的数据库包括本地数据库和远程数据库两部分, 维护的重点在本地数据库, 包括读者信息的管理、本地数据的维护以及日志信息管理等。

通过分析最终将系统的功能划分成“ 接口认证” 、“ 消息解析” 和“ 数据管理” 三个模块, 功能架构如图2所示:

图2 图书馆微信公众平台功能架构

从公众平台的服务内容来看, 通过对读者需求的调研以及根据东南大学图书馆自身的情况, 平台主要提供本馆资讯(包括本馆新闻、资源动态、本馆讲座和新书通报)的查询、个人借阅信息的查询、FAQ查询、书目检索、文献检索和读者留言等方面的服务。

3 具体实现

本地服务器端的Web服务利用ASP.NET平台采用C#语言开发。开发工具使用Visual Studio 2010, 数据库使用SQL Server 2005。

3.1 接口认证

接口认证的步骤: 在微信公众平台上配置Web应用接口的URL地址和用作生成签名的Token值, 微信公众平台为了验证URL的有效性会发送GET请求到填写的URL上。GET请求会携带4个参数signature、timestamp、nonce和echostr, 其中signature参数是微信加密签名, 它结合了已配置的Token值和请求中的timestamp参数、nonce参数。本地服务器端通过检验signature对请求进行校验, 校验成功则原样返回echostr参数内容, 认证成功, 否则认证失败[6]

关键代码:

//分别获取GET请求中的signature、timestamp、nonce和
echostr值

String signature = HttpContext.Current.Request.
QueryString["signature"];

……

//对Token、timestamp、nonce三个参数进行字典序排序

String[] ArrTmp = { Token, timestamp, nonce };

Array.Sort(ArrTmp);

String tmpStr = String.Join("", ArrTmp);

//对字符串进行SHA1加密 tmpStr = FormsAuthentication.HashPasswordForStoring
InConfigFile (tmpStr, "SHA1");

//将加密后的字符串与signature的值进行比较

if (tmpStr == signature)

{

//如果值相同则返回echoStr参数的值, 认证成功

HttpContext.Current.Response.Write(echoStr);

}

3.2 消息解析

微信公众平台会将读者发送的消息、消息的类型、读者的微信号和图书馆公众账号等内容封装成XML格式的数据包[7]通过消息接口发送给本地服务器; 本地服务器的Web应用接口在接收到数据后会对数据包进行解封装操作并从中提取出封装前的各项信息, 其中最重要的是读者发送的消息; 对于消息首先要判断其合法性, 如果合法则进一步判断消息的类型, 如果不合法则返回合法的消息列表提示读者; 根据消息的类型进行分类处理, 将处理结果等相关信息封装成XML格式的数据包发送给微信公众平台, 最终由微信服务器转发给读者。

关键代码:

//加载收到的XML格式的数据包

XmlDocument doc = new XmlDocument();

doc.LoadXml(postStr);

//提取封装前的信息

XmlElement rootElement = doc.DocumentElement;

string MsgType = rootElement.SelectSingleNode
("MsgType").InnerText;

string Content = rootElement.SelectSingleNode
("Content").InnerText;

……

//判断消息类型并对消息进行处理

order mGet = new order(); //自定义消息处理类

int flag = mGet.Reg(Content); //判断消息合法性并返回
类型编号

if (flag > 0){str=mGet.msg(Content, flag); }//根据消息类型
分类处理

else { str = "我听不懂你说的话!\r\n" +
mGet. CommandList; }//不合法消息的处理

//将返回的消息等内容封装成XML格式的数据包发送
给微信公众平台

responseContent = FormatTextXML(FromUserName,
ToUserName, str);

HttpContext.Current.Response.Write(responseContent);

(1) 消息验证

只有合法的消息才能被本地服务器端的消息解析程序所识别, 消息的合法性采用正则表达式进行验证, 例如“ 本馆讲座” 的消息格式为“ bgjz[条数]” , 对应的正则表达式为: ^bgjz([1-9]{0, 1}|[1-9][0-9])$。读者如需获取“ 本馆讲座” 的内容只需发送消息“ bgjz” , 如果只需最新的5条内容则可发送消息“ bgjz5” 。如果消息的格式与正则表达式匹配成功就是合法消息, 否则返回错误提示。

(2) 消息分类

根据服务的内容可将消息分为“ 资讯” 、“ 查询” 和“ 导航” 三种类型。资讯类消息用于获取图书馆的最新资讯信息; 查询类消息用于“ 个人借阅信息” 以及“ 图书馆FAQ” 的查询; 导航类消息用于“ 书目检索” 和“ 文献检索” 的WAP网站地址导航。

(3) 消息处理

①资讯类消息

资讯类消息用于获取本馆新闻、资源动态、讲座信息和新书通报等内容。这些内容都存储在图书馆门户网站的数据库中, 由于这部分内容更新的频率较高, 为了保证这些数据的实时性, 本地服务器端采用远程接口调用的方式来获取这部分数据。首先在门户网站的服务器端创建一个Web Service类型的API接口, 本地服务端根据对读者请求的分析产生一条SQL语句, 并以该语句为参数调用API接口中的方法, 获取返回的数据并进行格式化处理, 最终以资讯列表的形式返回给读者。

关键代码:

//初始化Web Service服务

Service ts = new Service();

//调用API接口函数获取资讯信息

DataTable dt=ts.GetData(sql);

//从数据中提取相关信息

string sTitle = dt.Rows[0]["title"].ToString();

string sPubdate = dt.Rows[0]["pubdate"].ToString();

string sUrl = dt.Rows[0]["url"].ToString();

……

实现效果如图3所示:

图3 资讯类消息演示

②查询类消息

个人借阅信息的查询: 读者在查询前需要进行身份认证, 为了避免每次查询都要进行认证操作, 读者可以选择将个人的身份信息与自己的微信号进行绑定, 绑定消息的格式为“ bind: 一卡通号@@密码” 。绑定成功的读者发送查询消息“ jyxx” 时无需再进行身份认证, 本地服务器端会自动识别出其微信号, 并根据绑定的一卡通号远程调用图书馆OPAC系统的接口去查询该读者的借阅详情。如果读者想解除绑定, 只需发送格式为“ unbind” 的解绑消息。

图书馆FAQ的查询: 读者发送一条格式为“ faq: 问题” 的消息就能查询图书馆的常见问题。本地服务器端会提取出消息中的问题到本地数据库去检索答案。由于读者表述问题的方式有很多种, 为了保证查询的质量和效率, 需要对问题进行语义分析, 并从中提取出有效的关键词, 通过对关键词的检索获取相关问题的答案。这种处理方式比一般的模糊查找在效率和准确率两方面都有了很大的提高。为了保证语义分析的质量, 系统利用中国科学院计算技术研究所研制的汉语分词系统ICTCLAS[8]提供的开放源码进行二次开发。本地服务器端通过引用基于C#语言的ICTCLAS动态链接库, 直接调用其中的分词处理函数将读者的问题拆分成若干个关键词, 最后再根据关键词到数据库去查找答案。具体的流程: 对收到的消息进行判断, 如果合法则将“ 问题” 从消息中提取出来。首先将“ 问题” 与数据库FAQ表中的Title字段做一次精确匹配, 如果成功直接返回Answer字段中的内容, 如果匹配失败则对“ 问题” 进行语义分析。按照字典规则对问题进行拆分, 例如将“ 图书馆开放时间” 拆分成“ 图书馆” 、“ 开放” 和“ 时间” 三个关键词, 将拆分后的关键词分别与数据库中的Title字段进行匹配, 如果匹配成功将表中该条记录的Flag字段加1, 匹配失败不做任何处理。所有关键词匹配完成后, 按Flag字段对记录进行排序, 返回Flag字段值最大的记录中的Answer字段内容。

查询类消息的实现效果如图4所示:

图4 查询类消息演示

③导航类消息

“ 书目检索” 和“ 文献检索” 是读者经常使用的功能, 但由于检索词的类型很多, 如果通过消息直接检索, 消息的格式会很复杂且不便于读者的输入, 并且检索的结果通常比较多, 也不适合在微信上显示。因此, 接收到读者的检索请求后将导航到图书馆WAP网站的对应检索页面, 再由读者进行具体的检索操作。

3.3 数据管理

图书馆微信公众平台的数据来源有两个部分: 本地数据库和远程数据库。本地数据库主要存储用户信息、图书馆FAQ和日志信息等。用户信息包括读者的一卡通号和微信号; 图书馆FAQ的内容选择存储在本地数据库, 是考虑到在查询时需要进行多次的数据匹配, 调用本地数据库的数据能够保证查询的速度; 日志信息包括读者的登录信息和各种类型消息的使用情况, 以便分析读者的使用习惯和关注焦点。远程数据库主要由门户网站数据库、业务系统数据库和WAP网站数据库组成, 一般通过API接口和远程抓取等方式获取其中的数据。

4 使用效果及问题分析

图书馆微信公众平台处于试运行阶段, 读者积极参加使用并反馈了大量的信息, 目前关注人数已超过1 000人, 消息数量达到1 700多条。通过对反馈信息的分析, 读者的总体评价良好, 反馈的信息主要有三个方面:

(1) 公众平台的建设为及时获取图书馆的信息和服务提供了极大的方便, 通过微信与图书馆互动也是一个非常好的体验;

(2) 消息格式不容易记忆, 使用起来也不太方便, 建议采用菜单的形式;

(3) 服务的内容相对单一, 希望加以充实。

对于读者提出的问题, 笔者认真进行了分析, 并积极寻找解决方法。图书馆微信公众平台申请的是订阅号, 默认没有自定义菜单的权限, 但可通过“ 微信认证” 来获取自定义菜单接口权限, 以更直观的菜单形式提供给读者使用。服务内容这方面, 由于公众平台的建设处于起步阶段, 服务内容会根据读者的需求不断增加。此外, 公众平台也会与更多的图书馆的业务系统进行对接, 比如座位管理系统、讲座预约系统等。

5 结语

随着微信影响力的不断扩大以及使用微信的读者数量不断增加, 图书馆利用微信开展移动服务已经成为一个趋势。在对图书馆利用微信公众平台开展服务的情况进行调研的基础上, 本文提出了一种图书馆微信公众平台的建设方案。详细介绍了微信公众平台的设计和建设过程, 对其中的关键技术进行深入的阐述, 对读者反馈的问题进行了分析, 并提出相应的解决方法, 这也为下一阶段的研究指明了方向。

参考文献
[1] 肖金华, 黄丽红. 基于微信的图书馆信息服务模式研究[J]. 现代情报, 2013, 33(6): 55-57.
Xiao Jinhua, Huang Lihong. Research on Information Service Mode of the Library Based on WeChat[J]. Journal of Modern Information, 2013, 33(6): 55-57. [本文引用:1]
[2] 百度百科. 微信[EB/OL]. [2014-05-12]. http: //baike. baidu. com/view/5117297. htm.
Baidu Encyclopedia. WeChat [EB/ OL]. [2014-05-12]. http://baike.baidu.com/view/5117297.htm. [本文引用:1]
[3] 韦敏革. 基于微信公共平台的图书馆创新服务研究[J]. 山东图书馆学刊, 2013(5): 46-49.
Wei Min’ge. Research on the Innovation of Library Service Based on WeChat Public Platform[J]. The Library Journal of Shand ong, 2013(5): 46-49. [本文引用:1]
[4] 张蓓, 窦天芳, 张成昱, . 开发模式下图书馆微信公众平台服务的设计与实现[J]. 现代图书情报技术, 2014(1): 87-91.
Zhang Bei, Dou Tianfang, Zhang Chengyu, et al. Design and Implementation of Library WeChat Public Platform Service in Development Mode[J]. New Technology of Library and Information Service, 2014(1): 87-91. [本文引用:1] [CJCR: 1.073]
[5] 张德申, 秦红亮. 微信公众平台开发——订阅号功能开发研究[J]. 电子技术与软件工程, 2013(19): 66-68.
Zhang Deshen, Qin Hongliang. WeChat Public Platform Development ——Subscription Function Research[J]. Electronic Technology & Software Engineering, 2013(19): 66-68. [本文引用:1]
[6] 腾讯公司. 验证消息真实性-微信公众平台开发者文档[EB/OL]. [2014-06-19]. http: //mp. weixin. qq. com/wiki/index. php?title=%e9%aa%8c%e8%af%81%e6%b6%88%e6%81%af%e7%9c%9f%e5%ae%9e%e6%80%a7.
Tencent. Validation Message Authenticity-WeChat Public Platform Developer Documentation [EB/OL]. [2014-06-19]. http://mp.weixin.qq.com/wiki/index.php?title=%e9%aa%8c%e8%af%81%e6%b6%88%e6%81%af%e7%9c%9f%e5%ae%9e%e6%80%a7. [本文引用:1]
[7] 腾讯公司. 接收普通消息-微信公众平台开发者文档[EB/ OL]. [2014-06-19]. http: //mp. weixin. qq. com/wiki/index. php?title=%e6%8e%a5%e6%94%b6%e6%99%ae%e9%80%9a%e6%b6%88%e6%81%af.
Tencent. Receive Regular News-WeChat Public Platform Developer Documentation [EB/OL]. [2014- 06-19]. http://mp.weixin.qq.com/wiki/index.php?title=%e6%8e%a5%e6%94%b6%e6%99%ae%e9%80%9a%e6%b6%88%e6%81%af. [本文引用:1]
[8] 李文江, 陈诗琴. 基于Lucene. net全文检索在文档管理中的应用[J]. 现代图书情报技术, 2010(11): 84-89.
Li Wenjiang, Chen Shiqin. Full-text Retrieval Based on Lucene. net Application in Document Management[J]. New Technology of Library and Information Service, 2010(11): 84-89. [本文引用:1] [CJCR: 1.073]