概览¶
该项目的目的为给 MoEar 服务提供接口的定义及常用工具方法的实现。
故该项目本身结构极其简单,下面分别从 接口定义 和 常用工具 两方面进行说明。
接口定义¶
为了增强 MoEar 的可扩展性,在实现时,基于 OpenStack 项目中的 stevedore 包, 实现了扩展两个扩展插件机制,分别用于实现 爬虫 与 打包 功能的扩展。
MoEar 在运行时会根据相应逻辑,加载相应的爬虫、打包实现,从而实现松耦合、可扩展。 同时我也分别实现了一个爬虫与一个打包工具,用以使 MoEar 可以正常完成整个业务流程, 亦可作为一个例子,给有能力的小伙伴儿提供一个 DIY 的参考例程。
接口定义在 base.py
文件中,共提供两种接口,分别为
- 爬虫接口:
SpiderBase
,用于定义一个扩展文章爬虫需要实现的所有方法 - 打包接口:
PackageBase
,用于定义一个扩展打包工具需要实现的所有方法
爬虫接口¶
爬虫插件的业务流程为,当 MoEar 服务启动时,会遍历所有 setup.py 中
entry_points
含有 moear.spider
入口的 Python 包,并调用其
SpiderBase.register()
方法,将返回字典持久化到 DB 中。
MoEar 服务会根据具体 Spider 注册时配置中提供的爬取策略(爬取时间、随机延迟范围等)
创建计划任务,待任务触发时,调用相应 Spider 插件的 SpiderBase.crawl()
方法,
执行爬取操作,并等待结果返回后,将其持久化到 DB 中。
获取到爬取结果数据后, MoEar 会在执行打包任务前,
将从 DB 中获取相应文章数据 & 元数据,生成同 SpiderBase.crawl()
返回的相同格式的数据结构作为入参,调用 SpiderBase.format()
方法,
注解
具体数据结构,内容,格式,配置项信息,将在稍后参考例程中作详细阐述。
打包接口¶
打包插件的业务流程很简单,目前只提供了一个业务方法定义 PackageBase.generate()
。
该方法将完成对传入数据结构的处理,如将文章内容中的 img
下载到本地,文章内容保存到文件,
并最终打包成相应设备支持的电子书格式,如:mobi
, epub
等。稍后我将实现 Kindle
上最常用的 mobi
格式打包插件,用以作为参考例程。
MoEar 对打包插件的获取流程为,会遍历所有 setup.py 中
entry_points
含有 moear.package
入口的 Python 包。
注意
此接口的调用环境与上述 SpiderBase.crawl()
SpiderBase.format()
相同,会在基于 Celery 的分布式消息队列的独立进程中调用被调用
注解
具体数据结构,内容,格式,配置项信息,将在稍后参考例程中作详细阐述。