moear_package_mobi.entry 源代码

import os
import logging
import tempfile

from moear_api_common import base

from .crawler_script import CrawlerScript

log = logging.getLogger(__name__)


[文档]class Mobi(base.PackageBase): """ Mobi打包 用以实现基于kindlegen的mobi打包工具 .. note:: 其中的模板实现,参考于 `Kindle 期刊杂志格式排版的电子书制作教程 <https://www.imahui.com/notes/496.html>`_ """
[文档] def hook_custom_options(self): """ 该方法返回当前类的自定义配置项,由基类在 ``__init__`` 方法中调用, 调用点位于,Common默认全局配置完成后,Spider元数据、用户元数据配置前 :return: 返回当前类的自定义配置项 :rtype: dict """ return { 'filename_extension': 'mobi', 'kindlegen_unsupport_tag': [ 'iframe', 'audio', 'base', 'canvas', 'command', 'datalist', 'eventsource', 'form', 'input', 'keygen', 'marquee', 'noscript', 'param', 'video', ], 'common_image_filter': [ # 通用图片过滤器,必须遵守的 r'^[^:]*$', # 过滤掉行中没有 ':' 的链接 ], }
[文档] def generate(self, data, *args, **kwargs): """ 根据传入的数据结构生成最终用于推送的文件字节字符串( :func:`bytes` ), MoEar会将其持久化并用于之后的推送任务 :param dict data: 待打包的数据结构 :return: 返回生成的书籍打包输出字节 :rtype: bytes """ with tempfile.TemporaryDirectory() as tmpdirname: self.options.setdefault('package_build_dir', tmpdirname) crawler = CrawlerScript(self.options) crawler.crawl(data, self.spider, *args, **kwargs) output_file = os.path.join( self.options['package_build_dir'], 'source', 'moear.mobi') with open(output_file, 'rb') as fh: content = fh.read() return content