moear-api-common¶
概览¶
该项目的目的为给 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 的分布式消息队列的独立进程中调用被调用
注解
具体数据结构,内容,格式,配置项信息,将在稍后参考例程中作详细阐述。
接口定义¶
-
class
moear_api_common.base.
SpiderBase
(*args, **kwargs)[源代码]¶ Bases:
object
爬虫基类
用以作为抽象类定义爬虫扩展所需提供的服务接口
包括:
- 爬虫注册
- 爬虫调用
- 打包格式化
初始化默认配置参数,可在子类中进行覆盖
配置优先级为:
用户元数据
>具体Package配置
>Common全局默认配置
参数: usermeta (dict) – (可选,关键字参数)指定用户的package相关配置元数据, 如:定制书籍名(book_title)等
-
class
moear_api_common.base.
PackageBase
(spider, *args, **kwargs)[源代码]¶ Bases:
object
打包基类
用以作为抽象类定义打包驱动所需提供的服务接口
初始化默认配置参数,可在子类中进行覆盖
配置优先级为:
用户元数据
>Spider元数据
>具体Package配置
>Common全局默认配置
参数:
配置参数¶
-
moear_api_common.config.
filename_extension
= 'mobi'¶ 打包输出文件的扩展名
-
moear_api_common.config.
icons_path
= '/path/to/icons'¶ icon路径
-
moear_api_common.config.
img_cover
= '/path/to/img_cover'¶ 封面图片,留空则不会为书籍增加封面,size:
600*800
。 默认为随moear-api-common
包附带的 cv_default.jpg 文件
-
moear_api_common.config.
img_masthead
= '/path/to/img_masthead'¶ 报头图片,size: 600*60。 默认为随
moear-api-common
包附带的 mh_default.jpg 文件
-
moear_api_common.config.
img_max_thumb_size
= 16384¶ 合并图书的封面图片,留空则将所有书籍封面贴在一起 缩略图处理约束条件,小于等于
16KB
-
moear_api_common.config.
img_max_thumb_dimen
= (180, 240)¶ 缩略图处理约束条件,尺寸小于等于
180*240
-
moear_api_common.config.
img_reduce_to
= (600, 800)¶ 缩小图片尺寸到
(Width, Height)
-
moear_api_common.config.
img_convert_to_gray
= True¶ 是否将图片转换为灰度图,这将有利于显著减小输出文件的大小,建议在电纸书上阅读时开启
-
moear_api_common.config.
css_base
= '/path/to/base.css'¶ 基础样式文件。默认为随
moear-api-common
包附带的 base.css 文件
-
moear_api_common.config.
toc_desc_generate
= True¶ 是否为TOC条目生成简述
-
moear_api_common.config.
toc_desc_word_limit
= 500¶ TOC条目简述的字数限制
-
moear_api_common.config.
toc_thumbnail_generate
= False¶ TOC描述是否包含图片,此功能暂未实现
工具包¶
-
moear_api_common.utils.
mkdirp
(path)[源代码]¶ 创建传入的路径
该方法为一个串联调用方法,仅对
os.makedirs()
做了简单封装。推荐用法:
path_created = mkdirp(path) # 赋值路径的同时确保其已被创建
用例:
>>> from moear_api_common.utils import mkdirp >>> mkdirp('build/doctest/test_path') 'build/doctest/test_path'
参数: path (str) – 待创建路径 返回: 创建完成的路径 返回类型: str 引发: OSError – 调用 os.makedirs()
时发生的异常,若路径已存在则不抛出异常
-
moear_api_common.utils.
get_config_dict
(config)[源代码]¶ 获取配置数据字典
对传入的配置包进行格式化处理,生成一个字典对象
参数: config (object) – 配置模块 返回: 配置数据字典 返回类型: dict
-
moear_api_common.utils.img.
rescale_image
(data, maxsizeb=4000000, dimen=None, png2jpg=False, graying=True, reduceto=(600, 800))[源代码]¶ 若
png2jpg
为True
则将图片转换为JPEG
格式,所有透明像素被设置为 白色 。确保结果图片尺寸小于maxsizeb
的约束限制。如果
dimen
不为空,则生成一个相应约束的缩略图。依据dimen
的类型,设置约束为width=dimen, height=dimen
或者width, height = dimen
参数: 返回: 处理后的图片字节数据,可直接以
wb
模式输出到文件中返回类型: