最近写了个小工具,通过抓取RSS生成适合Kindle展示的Mobi格式的文件,并发送到Kindle 个人图书馆,也算是继续“自动化”之旅。
代码前前后后写了个把月,趁着放假期间,决定把它搞定。使用方法什么的就不多说了,项目开源到Github上去了,上面有使用说明。
这篇文章简单得聊聊项目本身以及总结的一些问题。
项目简介
首先来看看项目的组织结构图:
大致分为三大部分:
- core:核心部分,定义了RSS相关的基本数据抽象(base)以及所有流程的接口抽象(contract)
- component:组件(可选),两个组件,一个是对mobi文件进行strip处理,以很好得控制最终文件的大小,另一个是邮件发送
- impl:对core以及component的实现。
其他几个部分:util中定义了一些帮助方法,Service是程序的入口,也是各个流程接口方法的衔接与组合调用,resources(不包含在上图中)定义了一大堆各种配置。用Java写程序就是这样,你懂的。
core
base包不必多说,一个RSS源大概可以分解为三个对象:一个Feed包含了N个Entry,每个Entry都包含了文本内容(desc)以及若干个Image。
说说核心流程的抽象:(按照流程顺序说明,不按照图中接口顺序)
AbstractConfigManager
是一个抽象类,维护了项目最核心的配置文件(resources/rtms.properties),并对其中的配置完整性进行检查。
IFeedLinkProvider
要抓取RSS,必须要有RSS Source(RSS URL)。该接口作为Feed link 的 provider 定义了一个方法来获取所有需要抓取的链接:
/**
* get parsing rss links
*
* @return the String array of all li