Skip to content

Commit 253f7ad

Browse files
authored
Merge branch 'hect0x7:master' into master
2 parents d5cae62 + 7ffa295 commit 253f7ad

22 files changed

+557
-348
lines changed

.github/ISSUE_TEMPLATE/ask-for-help.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ body:
1414
- type: dropdown
1515
attributes:
1616
label: 你使用的是哪种方式?
17+
multiple: true
1718
options:
1819
- GitHub Actions
1920
- Python代码
2021
- jmcomic命令行
21-
default: 0
2222
validations:
2323
required: true
2424

@@ -34,5 +34,8 @@ body:
3434

3535
- type: textarea
3636
attributes:
37-
label: 其他信息
38-
placeholder: 如果有其他需要补充的信息,可以在这里留言
37+
label: 额外信息(代码/option配置/截图等)
38+
placeholder: |
39+
- 如果是运行代码,请提供核心代码片段
40+
- 如果有自定义option配置,请提供配置内容
41+
- 如果是GitHub Actions,请提供运行记录的URL

.github/ISSUE_TEMPLATE/bug.yml

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,19 @@ labels: [ 'bug' ]
66
body:
77
- type: checkboxes
88
attributes:
9-
label: 注意事项
9+
label: 请确认注意事项
1010
options:
11-
- label: 提ISSUE前,请确认你已经在GitHub Issues和Discussions里搜索过类似的问题,并且没找到想要的答案。
11+
- label: 你已经在GitHub Issues和Discussions里搜索过类似的问题,并且没找到想要的答案。
1212
required: true
13-
- label: GitHub Actions问题请到置顶的Issue反馈。
13+
- label: 你使用的是最新的jmcomic版本
14+
required: true
15+
- label: 非GitHub Actions类问题(此类问题请专门到置顶的Issue反馈)
1416
required: true
1517

1618
- type: dropdown
1719
attributes:
1820
label: 发生Bug时,你的使用方式?
19-
multiple: false
21+
multiple: true
2022
options:
2123
- Python代码
2224
- jmcomic命令行
@@ -26,7 +28,7 @@ body:
2628
- type: dropdown
2729
attributes:
2830
label: 你是否在禁漫官方网页或APP,验证过相应的功能是正常的?
29-
multiple: false
31+
multiple: true
3032
options:
3133
- 测试过,禁漫官方功能正常
3234
- 我要反馈的bug无需验证/不方便验证
@@ -35,18 +37,21 @@ body:
3537

3638
- type: textarea
3739
attributes:
38-
label: option配置+源码/命令
39-
placeholder: 贴一下你的option配置 + 你使用的python代码或命令,这会帮助开发者解决bug。
40+
label: 代码/option配置
41+
placeholder: |
42+
- 如果是运行代码,请提供核心代码片段
43+
- 如果有自定义option配置,请提供配置内容
44+
- 如果是GitHub Actions,请提供运行记录的URL
4045
4146
- type: textarea
4247
attributes:
43-
label: 你预期的结果,与实际结果的差别
48+
label: 描述bug现象(你预期的结果,与实际结果的差别
4449
placeholder: |
4550
1. 预期结果...
4651
2. 差别...
4752
4853
- type: textarea
4954
attributes:
50-
label: 其他信息
51-
placeholder: 如果有其他需要补充的信息,可以在这里留言
55+
label: 其他可提供的信息
56+
placeholder: 截图/程序输出日志等
5257

.github/workflows/test_html.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
test: # This code is based on https://github.com/gaogaotiantian/viztracer/blob/master/.github/workflows/python-package.yml
1717
strategy:
1818
matrix:
19-
python-version: ['3.7', '3.8', '3.11', '3.12']
19+
python-version: ['3.9', '3.10', '3.11', '3.13']
2020
os: [ ubuntu-latest ]
2121
runs-on: ${{ matrix.os }}
2222
timeout-minutes: 5

README.md

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,41 @@ jmcomic.download_album(422866, option)
8484
# 等价写法: option.download_album(422866)
8585
```
8686

87+
### 3. 使用命令行
88+
> 如果只想下载本子,使用命令行会比上述方式更加简单直接
89+
>
90+
> 例如,在windows上,直接按下win+r键,输入jmcomic xxx就可以下载本子。
91+
92+
示例:
93+
94+
下载本子422866的命令
95+
96+
```sh
97+
jmcomic 422866
98+
```
99+
同时下载本子123, 章节456的命令
100+
```sh
101+
jmcomic 123 p456
102+
```
103+
104+
命令行模式也支持自定义option,你可以使用环境变量或者命令行参数:
105+
106+
a. 通过命令行--option参数指定option文件路径
107+
108+
```sh
109+
jmcomic 123 --option="D:/a.yml"
110+
```
111+
112+
b. 配置环境变量 `JM_OPTION_PATH` 为option文件路径(推荐)
113+
114+
> 请自行google配置环境变量的方式,或使用powershell命令: `setx JM_OPTION_PATH "D:/a.yml"` 重启后生效
115+
116+
```sh
117+
jmcomic 123
118+
```
119+
120+
121+
87122
## 进阶使用
88123

89124
请查阅文档首页→[jmcomic.readthedocs.io](https://jmcomic.readthedocs.io/zh-cn/latest)
@@ -122,10 +157,11 @@ jmcomic.download_album(422866, option)
122157
- `下载特定后缀图片插件`
123158
- `发送QQ邮件插件`
124159
- `自动使用浏览器cookies插件`
125-
- `jpg图片合成为一个pdf插件`
126160
- `导出收藏夹为csv文件插件`
127161
- `合并所有图片为pdf文件插件`
128-
- `合并所有图片为长图插件`
162+
- `合并所有图片为长图png插件`
163+
- `重复文件检测删除插件`
164+
- `网页观看本地章节插件`
129165

130166
## 使用小说明
131167

assets/docs/sources/option_file_syntax.md

Lines changed: 52 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,17 @@ client:
2727
# APP端不限ip兼容性好,网页端限制ip地区但效率高
2828
impl: html
2929

30-
# domain: 域名配置,默认是 [],表示运行时自动获取域名。
31-
# 可配置特定域名,如下:
32-
# 程序会先用第一个域名,如果第一个域名重试n次失败,则换下一个域名重试,以此类推。
30+
# domain: 禁漫域名配置,一般无需配置,jmcomic会根据上面的impl自动设置相应域名
31+
# 该配置项需要和上面的impl结合使用,因为禁漫网页端和APP端使用的是不同域名,
32+
# 所以配置是一个dict结构,key是impl的值,value是域名列表,表示这个impl走这些域名。
33+
# 域名列表的使用顺序是:先用第一个域名,如果第一个域名重试n次失败,则换下一个域名重试,以此类推。
34+
# 下面是示例:(注意下面这些域名可能会过时,不一定能用)
3335
domain:
34-
- jm-comic.org
35-
- jm-comic2.cc
36-
- 18comic.vip
37-
- 18comic.org
36+
html:
37+
- 18comic.vip
38+
- 18comic.org
39+
api:
40+
- www.jmapiproxyxxx.vip
3841

3942
# retry_times: 请求失败重试次数,默认为5
4043
retry_times: 5
@@ -93,7 +96,14 @@ dir_rule:
9396
# 写法:
9497
# 1. 以'Bd'开头,表示根目录
9598
# 2. 文件夹每增加一层,使用 '_' 或者 '/' 区隔
96-
# 3. 用Pxxx或者Ayyy指代文件夹名,意思是 JmPhotoDetail.xxx / JmAlbumDetail的.yyy。xxx和yyy可以写什么需要看源码。
99+
# 3. 用Pxxx或者Ayyy指代文件夹名,意思是 JmPhotoDetail.xxx / JmAlbumDetail的.yyy。
100+
# xxx和yyy可以写什么需要看源码,或通过下面代码打印出所有可用的值
101+
#
102+
# ```python
103+
# import jmcomic
104+
# properties: dict = jmcomic.JmOption.default().new_jm_client().get_album_detail(本子id).get_properties_dict()
105+
# print(properties)
106+
# ```
97107
#
98108
# 下面演示如果要使用禁漫网站的默认下载方式,该怎么写:
99109
# 规则: 根目录 / 本子id / 章节序号 / 图片文件
@@ -102,6 +112,9 @@ dir_rule:
102112

103113
# 默认规则是: 根目录 / 章节标题 / 图片文件
104114
rule: Bd_Ptitle
115+
# jmcomic v2.5.36 以后,支持使用python的f-string的语法组合文件夹名,下为示例
116+
# rule: Bd / Aauthor / (JM{Aid}-{Pindex})-{Pname}
117+
# {}大括号里的内容同样是写 Axxx 或 Pxxx,其他语法自行参考python f-string的语法
105118
```
106119

107120
## 3. option插件配置项
@@ -194,7 +207,38 @@ plugins:
194207
# 如果level=[album], filename_rule只能写Axxx
195208

196209
zip_dir: D:/jmcomic/zip/ # 压缩文件存放的文件夹
210+
211+
suffix: zip #压缩包后缀名,默认值为zip,可以指定为zip或者7z
212+
213+
# v2.6.0 以后,zip插件也支持dir_rule配置项,可以替代旧版本的zip_dir和filename_rule
214+
# 请注意⚠ 使用此配置项会使filename_rule,zip_dir,suffix三个配置项无效,与这三个配置项同时存在时仅会使用dir_rule
215+
# 示例如下:
216+
# dir_rule: # 新配置项,可取代旧的zip_dir和filename_rule
217+
# base_dir: D:/jmcomic-zip
218+
# rule: 'Bd / {Atitle} / [{Pid}]-{Ptitle}.zip' # 设置压缩文件夹规则,中间Atitle表示创建一层文件夹,名称是本子标题。[{Pid}]-{Ptitle}.zip 表示压缩文件的命名规则(需显式写出后缀名)
219+
# 使用此方法指定压缩包存储路径则无需和level对应
220+
197221
delete_original_file: true # 压缩成功后,删除所有原文件和文件夹
222+
223+
# 在v2.6.0及以后版本,zip插件还支持设置密码和加密方式,使用encrypt配置项,该配置是可选的,示例如下:
224+
# 1. 给压缩包设置一个指定密码
225+
# encrypt:
226+
# password: 123456
227+
# 2. 设置随机生成的密码。该密码会在日志中打印出来,并附着到zip的压缩文件注释里
228+
# encrypt:
229+
# type: random
230+
# 配置密码时,type和password二选一必填
231+
232+
# 插件还支持使用7z加密,这种方式会加密压缩包文件头,只有输入了密码才能查看压缩包文件列表,隐私性最好。
233+
# 使用encrypt.impl配置项开启7z格式加密,如果不配置,默认仍使用zip格式。
234+
# 使用7z格式时记得把压缩包后缀名指定为7z。
235+
# 示例如下:
236+
# suffix: 7z
237+
# encrypt:
238+
# impl: 7z
239+
# type: random # type和password二选一必填,和上面一样
240+
# 需要提醒的是,7z没有压缩文件注释,因此如果设置随机密码,密码就只会存在于日志中,请注意及时保存密码。
241+
198242

199243
# 删除重复文件插件
200244
# 参考 → [https://github.com/hect0x7/JMComic-Crawler-Python/issues/244]
@@ -251,19 +295,4 @@ plugins:
251295
img_dir: D:/pdf/ # 长图存放文件夹
252296
filename_rule: Aname # 长图命名规则,同上
253297

254-
# 请注意⚠
255-
# 下方的j2p插件的功能不如img2pdf插件,不建议使用。
256-
# 如有图片转pdf的需求,直接使用img2pdf即可,下面的内容请忽略。
257-
258-
- plugin: j2p # 图片合并插件,可以将下载下来的jpg图片合成为一个pdf插件
259-
# 请注意⚠ 该插件的使用前提是,下载下来的图片是jpg图片
260-
# 因此,使用该插件前,需要有如下配置:(下载图片格式转为jpg,上文有解释过此配置)
261-
# download:
262-
# image:
263-
# suffix: .jpg
264-
kwargs:
265-
pdf_dir: D:/pdf/ # pdf存放文件夹
266-
filename_rule: Pid # pdf命名规则
267-
quality: 100 # pdf质量,0 - 100
268-
269298
```

assets/docs/sources/tutorial/0_common_usage.md

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def fetch(photo: JmPhotoDetail):
6363
# 下载单个图片
6464
client.download_by_image_detail(image, './a.jpg')
6565
# 如果是已知未混淆的图片,也可以直接使用url来下载
66-
random_image_domain = JmModuleConfig.DOMAIN_IMAGE_LIST
66+
random_image_domain = JmModuleConfig.DOMAIN_IMAGE_LIST[0]
6767
client.download_image(f'https://{random_image_domain}/media/albums/416130.jpg', './a.jpg')
6868

6969

@@ -82,25 +82,38 @@ from jmcomic import *
8282
# 客户端
8383
client = JmOption.default().new_jm_client()
8484

85-
# 捕获jmcomic可能出现的异常
85+
# 捕获获取本子/章节详情时可能出现的异常
8686
try:
8787
# 请求本子实体类
8888
album: JmAlbumDetail = client.get_album_detail('427413')
8989
except MissingAlbumPhotoException as e:
9090
print(f'id={e.error_jmid}的本子不存在')
91-
91+
9292
except JsonResolveFailException as e:
9393
print(f'解析json失败')
9494
# 响应对象
9595
resp = e.resp
9696
print(f'resp.text: {resp.text}, resp.status_code: {resp.status_code}')
97-
97+
9898
except RequestRetryAllFailException as e:
9999
print(f'请求失败,重试次数耗尽')
100-
100+
101101
except JmcomicException as e:
102102
# 捕获所有异常,用作兜底
103103
print(f'jmcomic遇到异常: {e}')
104+
105+
# 多线程下载时,可能出现非当前线程下载失败,抛出异常,
106+
# 而JmDownloader有对应字段记录了这些线程发生的异常
107+
# 使用check_exception=True参数可以使downloader主动检查是否存在下载异常
108+
# 如果有,则当前线程会主动上抛一个PartialDownloadFailedException异常
109+
# 该参数主要用于主动检查部分下载失败的情况,
110+
# 因为非当前线程抛出的异常(比如下载章节的线程和下载图片的线程),这些线程如果抛出异常,
111+
# 当前线程是感知不到的,try-catch下载方法download_album不能捕获到其他线程发生的异常。
112+
try:
113+
album, downloader = download_album(123, check_exception=True)
114+
except PartialDownloadFailedException as e:
115+
downloader: JmDownloader = e.downloader
116+
print(f'下载出现部分失败, 下载失败的章节: {downloader.download_failed_photo}, 下载失败的图片: {downloader.download_failed_image}')
104117
```
105118

106119

assets/docs/sources/tutorial/2_command_line.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@ jmcomic 123 456 p333
1212
### 2.1. 通过命令行
1313
使用 --option 参数指定option配置文件路径
1414

15-
```
15+
```sh
1616
jmcomic 123 --option="D:/a.yml"
1717
```
1818

1919
### 2.2. 使用环境变量
2020
配置环境变量 `JM_OPTION_PATH` 为option配置文件路径
2121

22-
```
23-
set JM_OPTION_PATH="D:/a.yml"
22+
> 请自行google配置环境变量的方式,或使用powershell命令: `setx JM_OPTION_PATH "D:/a.yml"` 重启后生效
23+
24+
```sh
2425
jmcomic 123
2526
```

requirements-dev.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ Pillow
55
psutil
66
pycryptodome
77
requests
8-
plugin_jm_server
8+
plugin_jm_server
9+
zhconv

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"Programming Language :: Python :: 3.10",
4444
"Programming Language :: Python :: 3.11",
4545
"Programming Language :: Python :: 3.12",
46+
"Programming Language :: Python :: 3.13",
4647
"Operating System :: MacOS",
4748
"Operating System :: POSIX :: Linux",
4849
"Operating System :: Microsoft :: Windows",

src/jmcomic/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# 被依赖方 <--- 使用方
33
# config <--- entity <--- toolkit <--- client <--- option <--- downloader
44

5-
__version__ = '2.5.30'
5+
__version__ = '2.6.0'
66

77
from .api import *
88
from .jm_plugin import *

0 commit comments

Comments
 (0)