Package: bookbaker
焙书Introduction自动化 爬取/翻译/导出 网页生肉书籍你是否还在为：生肉无人烤译者咕咕翻译质量感人（虽然用爱发电伟大但是...)译文充满吐槽私货而发愁？随着Gemini AI和GPT4 Turbo的推出，日文小说机器翻译的质量已经可以胜过某些人类了。于是本库诞生来解救诸位。本品特性：自带几个常见日轻爬虫，爬取网站文章支持DeepL,Gemini AI,ChatGPT,Sakura(GPT兼容) 等烤肉机支持导出至EPUB, 自动发布至某些站点（未完工）自带小型 NoSQL 数据库，方便查看编辑模块化设计，方便自行定制爬虫，烤肉机，导出器自动在文章有更新时再爬取。NOTICE本品仍在 Beta 开发阶段，用量用法随时改变，效果随机出错，请自行斟酌。愿意测试者也许可以白嫖API Key? （数量有限不保证）Community更多机翻内容和社区支持可移步这里Installationpipinstall-Ubookbaker或者想体验最新版可直接 clone 本库。Configuration建议您切换至空目录下，然后运行bookbaker, 这样将会在本目录下创建config.json。以下为一个示例：点我{"version":"1.0.0","tasks":[{"friendly_name":"TS-Tenshi","url":"https://syosetu.org/novel/333942/","crawler":null,"translator":["gemini","gpt"],"exporter":"epub","sauce_lang":"JA","target_lang":"ZH","glossaries":[["ザラキエル","萨拉琪尔"],["神専魔法","神专魔法"],["サーヴィトリ","萨维特丽"],["サラフィエル","萨拉菲尔"],["アルマロス","阿尔马洛斯"],["クロ","小黑"]]}],"roles":[{"name":"syosetu-com","description":"A crawler for syosetu.com","classname":"SyosetuComCrawler","modulename":"bookbaker.roles.syosetu_com"},{"name":"deepl","description":"DeepL Translator","skip_translated":true,"backend":{"api_key":"","use_pro":false,"free_host":"api-free.deepl.com","pro_host":"api.deepl.com","proxy":null,"retries":3,"timeout":10.0},"classname":"DeepLTranslator","modulename":"bookbaker.roles.deepl"},{"name":"gemini","description":"A translator for gemini.com","max_retries":10,"max_tokens":null,"remind_interval":3,"skip_translated":false,"convert_ruby":true,"max_reply_tokens":null,"backend":{"model":"models\/gemini-pro","api_key":"","api_host":"generativelanguage.googleapis.com","comp_tokens":4096.0,"stop":null,"temperature":0.5,"top_p":null,"top_k":null,"tools":null,"tool_choice":"auto","safety_settings":[{"category":"HARM_CATEGORY_HARASSMENT","threshold":"BLOCK_NONE","probability":null},{"category":"HARM_CATEGORY_HATE_SPEECH","threshold":"BLOCK_NONE","probability":null},{"category":"HARM_CATEGORY_SEXUALLY_EXPLICIT","threshold":"BLOCK_NONE","probability":null},{"category":"HARM_CATEGORY_DANGEROUS_CONTENT","threshold":"BLOCK_NONE","probability":null}],"proxy":null,"timeout":null},"classname":"GeminiTranslator","modulename":"bookbaker.roles.gemini"},{"name":"epub","description":"EPUB Exporter","use_translated":true,"classname":"EpubExporter","modulename":"bookbaker.roles.epub"}],"client":{"user_agent":"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/121.0.0.0 Safari\/537.36","timeout":60.0,"proxy":null,"max_retries":6,"trust_env":true},"db":{"path":"db.json","write_buffer_size":0},"logging":{"level":"DEBUG","fmt":"%(asctime)s - %(levelname)s - %(message)s","dirpath":"logs","show_console":true}}配置各部分介绍tasks这部分定义了任务，一个任务就是要处理的书籍的相关信息。friendly_name:str没啥用，助记的url:str书籍的网址crawler:str爬虫的名字，如果为null则会自动选择一个合适的爬虫translator:str | list[str]翻译器的名字(们)，null为不翻译。无负载均衡，只是按顺序前仆后继的翻译exporter:str | list[str]导出器的名字(们)，null为不导出，但年轻人导导更健康。多填时均会运行。sauce_lang:str原文语言，ISO 639格式target_lang:str目标语言,ISO 639格式glossaries:list[tuple[str, str]]词汇表 例如[[Unacceptable, 可接受的], ...]，可用于译名对照。roles这里定义了所有的 爬虫/烤肉机/导出器。他们的名字必须唯一。client共享的httpx.AsyncClient实例配置。db数据库配置。path: 数据库文件路径write_buffer_size: 写入缓冲区大小logging日志配置。level: 日志级别fmt: 日志格式dirpath: 日志文件夹路径show_console: 是否在控制台显示日志roles再谈以后也许会在这里补上自带模块的详细配置，现在因为开发阶段可能有诸多变化就先咕咕。关于烤肉机的选择：首先DeepL/Gemini AI/GPT都是基于变形金刚(完全胜利)的，所以他们共享一些特性。DeepL每个月免费用户有 500K 免费Tokens，需要国外信用卡注册。但因为生成限制Tokens太短，一次性丢长句容易造成内容截断，所以是分句子发送的。这导致经常没有足够的语境提供信息，翻译的前后文会不搭调。但你就问快不快吧。另外对词汇表的语言组合有些限制。Gemini AI翻的最好，目前API免费，速率限制不成问题，速度也不错。但不知为何解除所有prompt安全限制后仍会阻挡一部分内容，有些瑟瑟场面翻不了。另外比起GPT更容易偶尔摆烂直接吐原文，也不太尊重提供的词汇表。GPT家族翻译的还可以，风格有些过于严肃，流畅度和速度上不如Gemini，4.0的API收费，免费的速率限制基本也没法用，想交钱还得用美国本土信用卡，建议马家找中转。不愧是ClosedAI。好在出错概率小，尊重词汇表，更能理解复杂的格式化(HTML/JSON/...)，内容安全限制更低 (这里倒是 Open 了是吧??)。后两者的输出 Tokens 限制都在 2048-4096 左右，输入 Tokens 上万了，语境理解相当棒，一次也能吐很多内容只要你钱够。基本上能看的也就后俩的。但他俩翻久了容易忘记词汇表，如果遇到这问题可以降低他们配置中的reminder_interval来更频繁的提醒词汇表，建议适量。NameSpeedQualityRestrictionCostRespect GlossariesDeepLVeryFastMehNoneFree/LowYes (when possible)Gemini AIFastGoodSomeFreeNot reallyGPTSlowGoodFewHighYesBakingconfig.json在生成时已有样例，按模板为你的config.json填入合适的任务，api_key。切换到带有config.json的目录下，运行bookbaker即可。导出的文件默认放到exports文件夹下数据结构数据库内有以下大致结构数据库TableBooks...titleseriesauthorTags...：list[str]...Chapters...:title...Episodes...titlenotesLines...content原文translated译文主要内容都在各条Line中line.content,line.translated为原文和翻译文本。你可以自行修改。如果想要重新翻译某句话，可以直接将line.translated改为null。Diagnose日志文件分类：DEBUG: 包含一些请求的参数，具体的运行阶段等信息。INFO: 一些稍重要的运行阶段信息，主要用于进度报告，（e.g. 正在爬取某书）WARNING: 有可能造成书籍内容缺失的错误，需要重视CRITICAL: 严重错误，某些组件无法运行，某些任务无法完成。ERROR: 记录每个Exception的详细信息 （traceback等）