使用插件replace_path_string:
这个插件可以直接替换下载文件夹路径,配置示例如下(把如下配置放入option配置文件即可):
plugins:
after_init:
- plugin: replace_path_string
kwargs:
replace:
# {左边写你要替换的原文}: {右边写替换成什么文本}
kyockcho: きょくちょ该示例会把文件夹路径中所有kyockcho都变为きょくちょ,例如:
D:/a/[kyockcho]本子名称 - kyockcho/ 改为↓
D:/a/[きょくちょ]本子名称 - きょくちょ/
如果上述简单的文本替换无法满足你,或者你需要更多上下文写逻辑代码,那么下面的内容正适合你阅读。
当你使用download_album下载本子时,本子会以一定的路径规则(DirRule)下载到你的磁盘上。
你可以使用配置文件定制DirRule,例如下面的例子:
dir_rule:
# 设定根目录 base_dir
base_dir: D:/a/b/c/
rule: Bd / Ptitle # P表示章节,title表示使用章节的title字段
# 这个规则的含义是,把图片下载到路径 {base_dir}/{Ptitle}/ 下
# 即:根目录 / 章节标题 / 图片文件例如,假设一个章节的名称(Ptitle)是ddd,则最后的下载文件夹结构为 D:/a/b/c/ddd/:
D:/a/b/c/ddd/00001.webp
D:/a/b/c/ddd/00002.webp
D:/a/b/c/ddd/00003.webp
...
上述的Ptitle,P表示章节,title表示使用章节的title字段。
除了title,你还可以写什么?其实Ptitle表示的是jmcomic里的章节实体类 JmPhotoDetail 的属性。
最终能写什么,取决于JmPhotoDetail有哪些属性,建议使用IDE来获知这些属性,不过这需要你懂一些python基础。
除了Pxxx,你还可以写Axxx,表示这个章节所在的本子的属性xxx,详见本子实体类 JmAlbumDetail。
在一些源站中,同一作品或章节名称可能存在简体/繁体差异,导致在不同环境下生成重复或不一致的文件夹名。v2.6.10 引入了 dir_rule.normalize_zh 配置,用于可选地对目录名进行繁/简体规范化。
示例用法:
dir_rule:
base_dir: D:/a/b/c/
rule: Bd / Ptitle
normalize_zh: zh-cn # 可选值:None(默认,不转换)/ zh-cn / zh-tw说明:
-
当
normalize_zh为zh-cn时,会把目录名中的中文规范为简体;为zh-tw时规范为繁体;为None或不配置时维持历史行为(不转换)。 -
该功能依赖可选库
zhconv(非必需),若未安装或转换失败,系统会回退为原始字符串并继续下载,不会导致失败。
上述例子使用了title字段,如果你想自定义一个字段,然后在DirRule中使用自定义字段,该怎么做?
基于v2.4.6,你可以使用如下方式
- 给你的自定义字段取个名
dir_rule: # 忽略base_dir配置项
rule: Bd_Amyname # A表示本子,myname表示本子的一个自定义字段- 在代码中,加入你自定义字段的处理函数
from jmcomic import JmModuleConfig
# 你需要写一个函数,把字段名作为key,函数作为value,加到JmModuleConfig.AFIELD_ADVICE这个字典中
JmModuleConfig.AFIELD_ADVICE['myname'] = lambda album: f'[{album.id}] {album.title}'这样一来,Amyname这个规则就会交由你的函数进行处理,你便可以返回一个自定义的文件夹名
from jmcomic import JmModuleConfig
dic = {
'248965': '社团学姐(爆赞韩漫)'
}
# Amyname
JmModuleConfig.AFIELD_ADVICE['myname'] = lambda album: dic[album.id]
download_album(248965)from jmcomic import JmModuleConfig
# Amyname
JmModuleConfig.AFIELD_ADVICE['myname'] = lambda album: f'【{album.author}】{album.title}'
# album有一个内置字段 authoroname,效果类似from jmcomic import JmModuleConfig
# Pmyname
JmModuleConfig.PFIELD_ADVICE['myname'] = lambda photo: f'【{photo.id}】{photo.title}'# 直接使用内置字段 indextitle 即可
dir_rule:
rule: Bd_Pindextitle