Skip to content

Commit 51c1db7

Browse files
authored
v2.4.11: 实现两大插件【导出禁漫收藏夹数据】+【多图合并为一个pdf】; 实现【导出禁漫收藏夹数据】的工作流用法; 完善文档和README (#183)(#184)
1 parent 4f56f46 commit 51c1db7

14 files changed

+444
-20
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
name: 导出收藏夹数据
2+
3+
on:
4+
# schedule:
5+
# - cron: "0 0 * * *"
6+
push:
7+
workflow_dispatch:
8+
inputs:
9+
IN_JM_USERNAME:
10+
type: string
11+
default: ''
12+
description: '禁漫帐号(不建议使用,会泄露在日志中。最好用secrets)'
13+
required: false
14+
15+
IN_JM_PASSWORD:
16+
type: string
17+
default: ''
18+
description: '禁漫密码(不建议使用,会泄露在日志中。最好用secrets)'
19+
required: false
20+
21+
IN_ZIP_PASSWORD:
22+
type: string
23+
default: ''
24+
description: '压缩文件密码(不建议使用,会泄露在日志中。最好用secrets)'
25+
required: false
26+
27+
jobs:
28+
crawler:
29+
runs-on: ubuntu-latest
30+
env:
31+
# 工作流输入
32+
IN_JM_USERNAME: ${{ github.event.inputs.IN_JM_USERNAME }}
33+
IN_JM_PASSWORD: ${{ github.event.inputs.IN_JM_PASSWORD }}
34+
IN_ZIP_PASSWORD: ${{ github.event.inputs.IN_ZIP_PASSWORD }}
35+
36+
# 登录相关secrets
37+
JM_USERNAME: ${{ secrets.JM_USERNAME }}
38+
JM_PASSWORD: ${{ secrets.JM_PASSWORD }}
39+
ZIP_PASSWORD: ${{ secrets.ZIP_PASSWORD }}
40+
41+
# 邮件相关secrets
42+
EMAIL_FROM: ${{ secrets.EMAIL_FROM }}
43+
EMAIL_TO: ${{ secrets.EMAIL_TO }}
44+
EMAIL_PASS: ${{ secrets.EMAIL_PASS }}
45+
EMAIL_TITLE: ${{ secrets.EMAIL_TITLE }}
46+
EMAIL_CONTENT: ${{ secrets.EMAIL_CONTENT }}
47+
48+
# 固定值
49+
ZIP_FP: /home/runner/work/jmcomic/download/export.7z
50+
51+
steps:
52+
- uses: actions/checkout@v3
53+
- name: Set up Python 3.11
54+
uses: actions/setup-python@v4
55+
with:
56+
python-version: "3.11"
57+
58+
- name: Install Dependency
59+
run: |
60+
python -m pip install --upgrade pip
61+
pip install -r requirements-dev.txt
62+
sudo apt update
63+
sudo apt install p7zip-full
64+
65+
- name: 安装jmcomic(local)
66+
run: |
67+
pip install -e ./
68+
69+
- name: 执行代码
70+
run: |
71+
cd ./usage/
72+
python workflow_export_favorites.py
73+
74+
- name: 上传结果
75+
uses: actions/upload-artifact@v3
76+
with:
77+
name: '收藏夹导出zip'
78+
path: ${{ env.ZIP_FP }}
79+
if-no-files-found: error
80+
retention-days: 90

README.md

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
你可以通过简单的几行Python代码,实现下载JM上的本子到本地,并且是处理好的图片。
66

7+
[【指路】教程:使用GitHub Actions下载禁漫本子](./assets/docs/sources/tutorial/1_github_actions.md)
8+
9+
[【指路】教程:导出并下载你的禁漫收藏夹数据](./assets/docs/sources/tutorial/10_export_favorites.md)
10+
711
**友情提示:珍爱JM,为了减轻JM的服务器压力,请不要一次性爬取太多本子,西门🙏🙏🙏**.
812

913
## 项目介绍
@@ -14,7 +18,6 @@
1418

1519
目前核心功能实现较为稳定,项目也处于维护阶段(因为禁漫接口经常变动,需要经常维护)。
1620

17-
1821
## 安装教程
1922

2023
* 通过pip官方源安装(推荐,并且更新也是这个命令)
@@ -50,24 +53,35 @@ $ jmcomic 422866
5053
- **实现禁漫APP接口最新的加解密算法 (1.6.3)**
5154
- 用法多样:
5255

53-
- GitHub Actions:网页上直接输入本子id就能下载([教程:使用GitHub Actions下载禁漫本子](./assets/docs/sources/tutorial/1_github_actions.md)
54-
- 命令行:无需写Python代码,简单易用([教程:使用命令行下载禁漫本子](./assets/docs/sources/tutorial/2_command_line.md)
55-
- Python代码:最本质、最强大的使用方式,需要你有一定的python编程基础
56+
- GitHub
57+
Actions:网页上直接输入本子id就能下载([教程:使用GitHub Actions下载禁漫本子](./assets/docs/sources/tutorial/1_github_actions.md)
58+
- 命令行:无需写Python代码,简单易用([教程:使用命令行下载禁漫本子](./assets/docs/sources/tutorial/2_command_line.md)
59+
- Python代码:最本质、最强大的使用方式,需要你有一定的python编程基础
5660
- 支持**网页端****移动端**两种客户端实现,可通过配置切换(**移动端不限ip兼容性好,网页端限制ip地区但效率高**
5761
- 支持**自动重试和域名切换**机制
5862
- **多线程下载**(可细化到一图一线程,效率极高)
5963
- **可配置性强**
6064

61-
- 不配置也能使用,十分方便
62-
- 配置可以从配置文件生成,支持多种文件格式
63-
- 配置点有:`请求域名` `客户端实现` `是否使用磁盘缓存` `同时下载的章节/图片数量` `图片格式转换` `下载路径规则` `请求元信息(headers,cookies,proxies)`
65+
- 不配置也能使用,十分方便
66+
- 配置可以从配置文件生成,支持多种文件格式
67+
- 配置点有:`请求域名` `客户端实现` `是否使用磁盘缓存` `同时下载的章节/图片数量` `图片格式转换` `下载路径规则` `请求元信息(headers,cookies,proxies)`
68+
6469
- **可扩展性强**
6570

66-
- **支持Plugin插件,可以方便地扩展功能,以及使用别人的插件**
67-
- 目前内置支持的插件有:`登录插件` `硬件占用监控插件` `只下载新章插件` `压缩文件插件` `下载特定后缀图片插件` `发送QQ邮件插件` `日志主题过滤插件` `自动使用浏览器cookies插件`
68-
- 支持自定义本子/章节/图片下载前后的回调函数
69-
- 支持自定义日志
70-
- 支持自定义类:`Downloader(负责调度)` `Option(负责配置)` `Client(负责请求)` `实体类`
71+
- 支持自定义本子/章节/图片下载前后的回调函数
72+
- 支持自定义日志
73+
- 支持自定义类:`Downloader(负责调度)` `Option(负责配置)` `Client(负责请求)` `实体类`
74+
- **支持Plugin插件,可以方便地扩展功能,以及使用别人的插件,目前内置插件有**
75+
- `登录插件`
76+
- `硬件占用监控插件`
77+
- `只下载新章插件`
78+
- `压缩文件插件`
79+
- `下载特定后缀图片插件`
80+
- `发送QQ邮件插件`
81+
- `日志主题过滤插件`
82+
- `自动使用浏览器cookies插件`
83+
- `jpg图片合成为一个pdf插件`
84+
- `导出收藏夹为csv文件插件`
7185

7286
## 进阶使用
7387

@@ -91,12 +105,12 @@ $ jmcomic 422866
91105

92106
* assets:存放一些非代码的资源文件
93107

94-
* config:存放配置文件
95-
* docs:项目文档
108+
* config:存放配置文件
109+
* docs:项目文档
96110

97111
* src:存放源代码
98112

99-
* jmcomic:`jmcomic`模块
113+
* jmcomic:`jmcomic`模块
100114

101115
* tests:测试目录,存放测试代码,使用unittest
102116
* usage:用法目录,存放示例/使用代码

assets/docs/sources/images/10.png

51.3 KB
Loading

assets/docs/sources/images/7.png

105 KB
Loading

assets/docs/sources/images/8.png

56.4 KB
Loading

assets/docs/sources/images/9.png

147 KB
Loading

assets/docs/sources/option_file_syntax.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,19 @@ plugins:
141141
title: jmcomic # 标题
142142
content: jmcomic finished !!! # 内容
143143

144+
main:
145+
- plugin: favorite_folder_export # 导出收藏夹插件
146+
log: false
147+
kwargs:
148+
zip_enable: true # 对收藏夹进行压缩
149+
zip_filepath: ${JM_DOWNLOAD_DIR}/export.zip # 压缩文件路径
150+
zip_password: ${ZIP_PASSWORD} # 压缩密码
151+
152+
after_photo:
153+
- plugin: j2p # jpg图片合成为一个pdf插件
154+
kwargs:
155+
pdf_dir: D:/pdf # pdf存放文件夹
156+
filename_rule: Pid # pdf命名规则
157+
quality: 100 # pdf质量,0 - 100
158+
144159
```
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# 导出并下载你的禁漫收藏夹数据
2+
3+
一共需要三步:
4+
5+
1. fork一份我的代码仓库。
6+
2. 配置你的禁漫帐号密码。
7+
3. 运行工作流,下载结果。
8+
9+
下面截图解析这三步的详细过程。
10+
11+
## 1. fork一份我的代码仓库
12+
13+
访问下面这个网址:
14+
15+
`https://github.com/hect0x7/JMComic-Crawler-Python/fork`
16+
17+
直接拉到页面最底部,如下所示:
18+
19+
(最新提示,下图的1可以不做,即直接点绿色的Create fork按钮)
20+
21+
![1](../images/1.png)
22+
23+
## 2. 配置你的禁漫帐号密码
24+
25+
在开始下面的步骤之前,你需要先启用你的repo的Actions,开启方式如下:
26+
![6](../images/6.png)
27+
28+
29+
**注意事项:
30+
最好使用secrets保证不会泄漏信息。
31+
虽然也支持通过工作流dispatch输入帐号密码,但是那种方式会让账号密码明文显示在Actions日志中。
32+
如果你打算采用后者,最好下载完就及时删除工作流。**
33+
34+
然后访问下面这个网址:
35+
36+
`https://github.com/你的用户名/JMComic-Crawler-Python/settings/secrets/actions`
37+
38+
39+
按下图步骤进行操作:
40+
41+
![7](../images/7.png)
42+
43+
然后来到填写页面
44+
45+
![8](../images/8.png)
46+
47+
你需要填入下面的内容,并点【Add secret】保存:
48+
49+
`JM_USERNAME`: 你的禁漫帐号用户名
50+
51+
同样的方式再配置如下内容:
52+
53+
`JM_PASSWORD`: 你的禁漫帐号密码
54+
55+
`ZIP_PASSWORD`: 压缩文件密码,防止别人下载使用你的文件
56+
57+
58+
59+
## 3. 运行工作流,下载结果。
60+
61+
访问如下网址:
62+
63+
`https://github.com/你的用户名/JMComic-Crawler-Python/actions/workflows/export_favorites.yml`
64+
65+
按照下图步骤点击,即可运行工作流。
66+
67+
* 如果你在步骤2已经配置了secrets,无需在意输入框。
68+
69+
* 如果你没有配置secrets,你可以在输入框中输入账号 密码 压缩密码,但要记得及时删除工作流来避免信息泄漏。
70+
71+
![9](../images/9.png)
72+
73+
待工作流变绿,表示已完成,点击去拉到页面底部,即可下载文件。
74+
75+
![10](../images/10.png)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
client:
2+
impl: api
3+
domain:
4+
html: [ jmcomic1.me, jmcomic.me ]
5+
6+
# 插件配置
7+
plugins:
8+
main:
9+
- plugin: login # 登录插件
10+
kwargs:
11+
username: ${JM_USERNAME}
12+
password: ${JM_PASSWORD}
13+
14+
- plugin: favorite_folder_export
15+
log: false
16+
kwargs:
17+
zip_enable: true
18+
zip_filepath: ${ZIP_FP}
19+
zip_password: ${ZIP_PASSWORD}
20+
21+
- plugin: send_qq_email # 发送邮件,如果未配置下面的前3个环境变量则不会发送。
22+
kwargs:
23+
msg_from: ${EMAIL_FROM}
24+
msg_to: ${EMAIL_TO}
25+
password: ${EMAIL_PASS}
26+
title: ${EMAIL_TITLE}
27+
content: ${EMAIL_CONTENT}

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.4.10'
5+
__version__ = '2.4.11'
66

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

src/jmcomic/jm_downloader.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,14 @@ def after_album(self, album: JmAlbumDetail):
181181
downloader=self,
182182
)
183183

184+
def after_photo(self, photo: JmPhotoDetail):
185+
super().after_photo(photo)
186+
self.option.call_all_plugin(
187+
'after_photo',
188+
photo=photo,
189+
downloader=self,
190+
)
191+
184192
def after_image(self, image: JmImageDetail, img_save_path):
185193
super().after_image(image, img_save_path)
186194
photo = image.from_photo

src/jmcomic/jm_option.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,10 @@ def invoke_plugin(self, plugin_class, kwargs: Any, extra: dict, pinfo: dict):
528528
# 构建插件对象
529529
plugin: JmOptionPlugin = plugin_class.build(self)
530530

531+
# 设置日志开关
532+
if pinfo.get('log', True) is not True:
533+
plugin.log_enable = False
534+
531535
jm_log('plugin.invoke', f'调用插件: [{plugin_class.plugin_key}]')
532536
# 调用插件功能
533537
plugin.invoke(**kwargs)

0 commit comments

Comments
 (0)