电子期刊最新目次彩信推送服务的设计与实现
张蓓, 张成昱, 窦天芳
清华大学图书馆 北京 100084
摘要

为使广大读者及时获得电子资源最新信息、快速把握学术研究动态,清华大学图书馆设计开发电子期刊最新目次彩信推送服务。该服务调用电子期刊导航系统的Web Service接口进行信息同步,采用定时发送和未发送文章数阈值相结合的策略,实现以彩信形式向成功订阅的读者发送订阅期刊最新目次信息的功能。

关键词: 电子期刊; 目次; 彩信服务
中图分类号:G250
Design and Implementation of MMS Push Service for Electronic Journals' Latest Table of Contents
Zhang Bei, Zhang Chengyu, Dou Tianfang
Tsinghua University Library, Beijing 100084, China
Abstract

In order to make patrons get the latest information of electronic resources timely and grasp the trend of academic research quickly, Tsinghua University Library designs and develops the MMS push service for electronic journals' latest table of contents. It synchronizes the information by calling the Web service interfaces from the electronic journal navigation system. It also implements the functionality of sending the latest table of contents information of electronic journals to subscribed patrons via MMS based on the combined strategy of fix-date and threshold of unsent articles.

Keyword: Electronic journals; Table of contents; MMS service
1 引 言

电子期刊作为高校图书馆文献资源的重要组成部分,其目次信息能够快速反映出学术研究发展的状态和趋势,对于学术研究人员有着重要的信息参考价值[ 1]。近年来,一些高品质电子期刊平台纷纷以RSS Feeds的形式提供最新目次信息,但是数据散落在不同平台上,不便于读者使用,为此,清华大学图书馆对多源数据进行收割、整理,通过电子期刊导航系统向读者发布。而在手机日渐普及的形势下,清华大学图书馆认为应该充分利用移动互联网环境,为读者开辟更为及时、有效的信息获取途径。因此,本馆在高校图书馆当中率先采用彩信方式,推出电子期刊最新目次推送服务,方便广大读者快速把握所关注学科领域的最新动态。

2 设计方案
2.1 设计思路

手机随时随身的特性,使其成为读者与图书馆之间进行移动交互和资源获取的工具[ 2]。将手机扩展成读者获取最新学术研究动态的平台会使信息获取/推送更加方便、及时。目前进行信息推送的手机服务方式主要有短信和彩信两种。与短信相比,彩信的信息容量更大、传播内容形式更丰富[ 3]。面对电子期刊目次这样更新频繁、数据量大的学术信息,彩信是更适合的推送途径。

就目次信息的来源而言,清华大学图书馆在建设电子期刊导航系统的过程中,已经批量获取到多源RSS Feeds,建立起以文章数据为核心的资源池,并开发相应的Web Service接口供第三方应用[ 4]。由此,笔者确立了“利用图书馆现有的电子期刊导航系统及相关接口,基于彩信实现电子期刊最新目次推送服务”的设计思路。

2.2 服务流程及架构

服务架构包括三个环节,如图1所示:

图1 电子期刊最新目次彩信推送服务架构

(1)期刊目次信息同步:调用RSS收割服务器的Web Service接口,定时将可订阅期刊的最新目次信息同步到本地,作为彩信推送服务的基础数据。

(2)期刊订阅:提供基于Web的订阅界面和审核界面,读者根据自身需求在可供服务的期刊列表中选择、订阅;由于彩信的发送受到运营商白名单策略的限制、电子资源也有严格的访问权限要求,因此针对读者的订阅申请,管理员需要审核。

(3)彩信推送:将审核通过的读者订阅信息和期刊目次信息组合,生成待发彩信,定时调用信息机的彩信接口,推送信息。

3 具体实现

电子期刊最新目次彩信推送服务功能的实现包括三个模块:期刊目次信息同步模块、期刊订阅模块和彩信推送模块。

3.1 期刊目次信息同步模块

目次信息是彩信推送服务的基础数据。电子期刊导航系统将运行稳定、受关注度高的资源制作成可供服务的电子期刊列表,其信息通过提供Web Service接口,开放给彩信推送服务使用。

(1)Web Service接口调用

由于各种期刊的更新频率不同、资源上线时间不固定,信息同步模块每天都会针对可供服务的电子期刊列表,定时调用Web Service接口获取全部的最新期刊目次信息,更新至本地数据库。每种期刊的信息同步,需要两步HTTP请求:

①根据ISSN获取期刊基本信息,包括期刊名称、学科分类、收录情况,以及获取文章信息所必需的jid等,例如URL为“http://SERVER:PORT/cgi-bin/jrss.cgi?action=journal&issn=1000-0054”。利用Dom4j解析返回的XML,同时下载期刊封面图片,为彩信推送进行图片准备。

②请求利用之前返回的jid值,获取文章信息。例如URL为“http://SERVER:PORT/cgi-bin/jrss.cgi?action=peekdata&jid=958480260748”,返回结果如下:

< journaldata >

< action name="peekdata" />

< peekdata >

< journalitem >

< title >藻细胞浓度的虚拟采样检测方法

< link >http://acad3.cnki.net/...

……

……

其中每个< journalitem >节点代表一条期刊文章记录,包含文章标题、作者、原始记录链接等信息。解析XML数据后更新数据库,为彩信推送准备基础文本内容。期刊目次信息的同步均采取追加和更新的策略,即如果期刊或文章在数据库中不存在,则新增记录;如果已存在(根据主键判断)则更新所有非主键字段。

(2)并行数据同步

目前共有132种电子期刊可供订阅,如果基于串行方式调用Web Service接口遍历期刊,需要20-30分钟才能完成所有的信息同步。为了提高工作效率,采用多线程技术实现并行数据同步。JDK 6.0中Concurrent包为多线程编程提供了非常有效的工具类[ 5]。本文使用ThreadPoolExecutor类实现简单的线程池并行同步最新目次信息。关键代码如下:

// 创建线程池

BlockingQueue< Runnable > queue = new LinkedBlockingQueue< Runnable >(capacity);

ThreadPoolExecutor executor = new ThreadPoolExecutor(workers, workers, 10000, TimeUnit.MILLISECONDS, queue);

// 遍历所有期刊,为每一种期刊向线程池中提交一个新任务

for (final String issn: DbHelper.getISSNList()) {

executor.execute(new Runnable() {

@Override

public void run() {

// 解析期刊基本信息

Journal j = JournalHelper.parseJournal(issn);

// 更新期刊基本信息数据库记录

DbHelper.updateJournal(j);

// 下载期刊封面图片

JournalHelper.downloadCoverImage(j);

// 解析期刊文章信息

List< JournalItem > items = JournalHelper.parseJournalItems(j.getJid());

// 更新期刊文章信息数据库记录

DbHelper.updateJournalItems(items);

}

});

}

executor.shutdown();

通过引入并行数据同步策略,整个期刊目次信息同步任务可以控制在5分钟之内完成,同时线程池的容量可配置,为今后灵活控制提供了方便。

3.2 期刊订阅模块

期刊订阅模块采用JSP语言,为读者和管理员提供基于Web的用户界面,完成订阅申请和审核操作,具体流程如图2所示。

图2 期刊订阅流程

读者查看可供服务的期刊列表,参考期刊的学科分类、收录情况等信息,选择个人感兴趣的期刊,登记手机号码后提交订阅申请。考虑彩信容量、服务成本等因素,目前每个读者可同时订阅三种电子期刊,后续可视使用情况进行修改。

彩信推送将调用中国移动信息机提供的接口完成,中国移动对于发送彩信设有白名单策略,同时电子资源的访问控制也非常严格,因此期刊订阅模块实现了系统管理员审核订阅申请的步骤。如果批准申请,管理员会将读者登记的手机号码加入信息机的白名单,使读者成为真正的订阅用户。订阅申请的审核只在第一次订阅期刊时进行,审核通过后读者可以随时修改订阅的期刊列表,无需再次审核。当然,如果在审核通过后修改手机号码,则视为一次新的订阅申请,其申请状态将被重置为未批准状态,订阅要在管理员重新审核批准之后才能生效。

3.3 彩信推送模块

读者的订阅申请被批准后,系统会定时整合其订阅的几种期刊目次信息,通过彩信推送模块发送。

(1)彩信的发送策略

如果定时发送彩信,其发送成本容易控制,但是往往信息推送不够及时。例如固定每月15日发送彩信,而某种期刊恰好在15日后产生更新,那么读者需要等待近1个月才能收到该刊的最新目次。如果不固定彩信发送时间,一旦发现某种期刊有新增文章就向订阅该期刊的读者发送彩信,那么读者可以最大限度地实时获得最新信息,但是无形中会大大增加彩信发送成本;同时根据调研,电子期刊上线的时间比较分散,一期新刊的文章经常是在一段时间内陆续加入到RSS收割服务器中。在这种情况下,一旦有更新即发送彩信也会给读者带来一些困扰。

考虑到目前可供服务的132种电子期刊多为半月刊和月刊,一期新刊的文章数通常集中在20-30篇之间,而每位读者订阅1-3种期刊不等,本服务引入阈值概念,提出了发送彩信的策略。首先在每月固定时间发送一次彩信,其他时间点对读者订阅期刊的新文章总数进行监控,如果新文章的数量超出阈值,则发送彩信。这种策略可以兼顾彩信发送的成本和及时性。这里选择每月的15日为固定发送日期,其他日期如果新文章数超过20,则发送彩信通知读者,阈值函数如下:

Threshold(day)=

(2)目次信息推送

该模块每天遍历所有订阅用户未发送的文章信息,如果新文章数超出当天的发送阈值,则准备待发彩信相关文件,将该用户的手机号码加入彩信发送任务列表。在获得当日彩信发送任务列表之后,依次处理每个发送任务,调用信息机的接口发送彩信,并在数据库中分别记录本次为该用户发送几种期刊的最大文章ID。彩信推送模块的基本流程如图3所示:

图3 彩信推送流程

关于待发彩信的准备,需要生成符合信息机发送要求的模板文件,以及对应的期刊封面图片和目次信息文本。其中模板文件格式如下:

< smil >

< head >< layout >……

< body >

< par dur="10000ms" >

< img src=" 1000-0054.jpg" region="Image" />

< text src=" 1000-0054.txt" region="all" />

……

< layout >定义彩信布局,< body >定义彩信内容,其中每个< par >节点代表一帧彩信,< img >和< text >分别引用一种期刊的封面图片和目次信息文本。

之前的信息同步模块已经将期刊封面下载到本地。准备待发彩信时,只需要将读者订阅的几种期刊分别与相应的文章标题、原始记录链接组合起来,保存成文本文件,供彩信发送接口调用。具体调用形式如下:

// 初始化彩信发送客户端

MmsAPIClient client = new MmsAPIClient();

/* mobile为手机号码;“电子期刊最新目次信息”为彩信标题;path依次传递模板文件、封面图片和目次信息文本的路径(用分号隔开);ture表示接收发送状态报告*/

client.sendMms(mobile, "电子期刊最新目次信息", path, true);

最终读者会定时接收到的彩信如图4所示:

彩信除了为读者发送订阅期刊的最新文章标题之外,还会将文章的原始记录链接作为发送内容。目前多数手机都具备彩信详情提取功能,读者可以将感兴趣的文章链接提取出来,发送至电子邮箱,或者在无线网络条件允许且不考虑流量费的情况下直接访问,获得详细内容。

4 结 语

电子期刊具有重要的情报信息价值,清华大学图书馆基于自身在多源电子资源整合方面的基础,推出电子期刊最新目次彩信推送服务,在提升服务主动性方面进行了有益的尝试。由于是免费服务,目前通过订阅审核,仅对校内读者提供服务。读者一次订阅可以便捷获取多种期刊的目次信息,快速把握关注学科的发展动向,因此服务一经推出,就得到师生关注。在今后的工作中,将不断扩充电子资源的服务对象和内容,努力让更多的读者使用这项服务。

The authors have declared that no competing interests exist.

作者已声明无竞争性利益关系。

参考文献
[1] 王乃芹. 试论电子期刊的特点及其在高校的综合利用[J]. 兰台世界, 2011(10): 30-31. [本文引用:1]
[2] 宋恩梅, 袁琳. 移动的书海: 国内移动图书馆现状及发展趋势[J]. 中国图书馆学报, 2010, 36(5): 34-48. [本文引用:1]
[3] 付建材. 彩信新闻服务平台的设计[J]. 数字通信, 2010(4): 89-92. [本文引用:1]
[4] 窦天芳, 姜爱蓉, 张成昱, . Web环境下多源数据的集成服务——以清华大学新期刊导航为例[J]. 大学图书馆学报, 2010, 28(3): 80-84. [本文引用:1]
[5] The Java Tutorial: Concurrency [EB/OL]. [2011-07-25]. http://download.oracle.com/javase/tutorial/essential/concurrency/. [本文引用:1]