Skip to content

Commit b537a0e

Browse files
authored
【项目文档】更新README,增加代码示例,支持GitHub Actions输入DIR_RULE (#115)
1 parent 2fa094c commit b537a0e

File tree

5 files changed

+106
-28
lines changed

5 files changed

+106
-28
lines changed

.github/workflows/download_dispatch.yml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@ on:
77
type: string
88
description: 本子id(多个id用-隔开,如 '123-456-789')
99
required: true
10+
11+
DIR_RULE:
12+
type: string
13+
description: 下载文件夹规则,对应option配置文件里的dir_rule.rule。此处可以不填,默认使用repo里的配置文件的`Bd_Aauthor_Atitle_Pindex`。
1014
default: ''
15+
required: false
1116

1217
ZIP_NAME:
1318
type: string
@@ -40,13 +45,12 @@ jobs:
4045
env:
4146
# 工作流输入
4247
JM_ALBUM_IDS: ${{ github.event.inputs.JM_ALBUM_IDS }}
43-
JM_USERNAME: ${{ secrets.JM_USERNAME }}
44-
JM_PASSWORD: ${{ secrets.JM_PASSWORD }}
48+
DIR_RULE: ${{ github.event.inputs.DIR_RULE }}
4549
ZIP_NAME: ${{ github.event.inputs.ZIP_NAME }}
4650
UPLOAD_NAME: ${{ github.event.inputs.UPLOAD_NAME }}
47-
# JM_USERNAME: ${{ github.event.inputs.JM_USERNAME }}
48-
# JM_PASSWORD: ${{ github.event.inputs.JM_PASSWORD }}
49-
51+
# sccrets
52+
JM_USERNAME: ${{ secrets.JM_USERNAME }}
53+
JM_PASSWORD: ${{ secrets.JM_PASSWORD }}
5054
# 固定值
5155
JM_DOWNLOAD_DIR: /home/runner/work/jmcomic/download/
5256

README.md

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
## 安装教程
1010

11-
* 通过pip官方源安装(推荐)
11+
* 通过pip官方源安装(推荐,并且更新也是这个命令
1212

1313
```shell
1414
pip install jmcomic -i https://pypi.org/project --upgrade
@@ -30,10 +30,16 @@ jmcomic.download_album('422866') # 传入要下载的album的id,即可下载
3030
# 配置项的作用是告诉程序下载时候的一些选择,
3131
# 比如,要下载到哪个文件夹,使用怎样的路径组织规则(比如[/作者/本子id/图片] 或者 [/作者/本子名称/图片]).
3232
# 如果没有配置,则会使用 JmOption.default(),下载的路径是[当前工作文件夹/本子名称/图片].
33-
# 如果你想要配置,请参考assets/config/和usgae/下的文档和示例.
33+
# 如果你想要配置,请参考文件 assets/config/常用配置介绍.yml
3434
```
3535

36-
进一步的使用可以参考usage文件夹下的示例代码: `getting_started.py` `usage_simple.py` `usage_feature_filter`
36+
进阶使用可以参考本repo下usage文件夹内的示例代码文件:
37+
38+
- API上手介绍: `getting_started.py`
39+
- 使用API实现简单功能: `usage_simple.py`
40+
- 使用API的Filter过滤功能: `usage_feature_filter.py`
41+
- 测试你的ip可以访问哪些禁漫域名: `pick_domain.py`
42+
- 基于GitHub Actions下载本子: `workflow_download.py`
3743

3844
## 项目特点
3945

@@ -42,13 +48,13 @@ jmcomic.download_album('422866') # 传入要下载的album的id,即可下载
4248
- **可配置性强**
4349
- 不配置也能使用,十分方便
4450
- 配置可以从**配置文件**生成,支持多种文件格式,无需写Python代码
45-
- 配置点有:`是否使用磁盘缓存` `图片类型转换` `下载路径` `请求元信息(headers,cookies,代理`
51+
- 配置点有:`是否使用磁盘缓存` `并发下载图片数` `图片类型转换` `下载路径` `请求元信息(headers,cookies,proxies`
4652
- **可扩展性强**
4753
- 支持自定义本子/章节/图片下载前后的回调函数
4854
- 支持自定义debug日志的开关/格式
49-
- 支持自定义Option/Client/实体类
55+
- 支持自定义Downloader/Option/Client/实体类
5056
- ...
51-
- 支持重试和域名切换机制
57+
- 支持自动重试和域名切换机制
5258
- **多线程下载**(可细化到一图一线程,效率极高)
5359
- 跟进了JM最新的图片分割算法(2023-02-08)
5460

assets/config/option_workflow_download.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ dir_rule:
88

99
client:
1010
domain:
11+
- jmcomic1.me
1112
- jmcomic.me
12-
- jmcomic1.me

usage/pick_domain.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
"""
2+
该脚本的作用:测试使用当前ip可以访问哪些禁漫域名
3+
4+
"""
5+
6+
from jmcomic import *
7+
8+
option = JmOption.default()
9+
10+
11+
def get_domain_ls():
12+
template = 'https://jmcmomic.github.io/go/{}.html'
13+
url_ls = [
14+
template.format(i)
15+
for i in range(300, 309)
16+
]
17+
domain_set: Set[str] = set()
18+
19+
def fetch_domain(url):
20+
postman = JmModuleConfig.new_postman()
21+
text = postman.get(url, allow_redirects=False).text
22+
for domain in JmcomicText.analyse_jm_pub_html(text):
23+
domain_set.add(domain)
24+
25+
multi_thread_launcher(
26+
iter_objs=url_ls,
27+
apply_each_obj_func=fetch_domain,
28+
)
29+
return domain_set
30+
31+
32+
domain_set = get_domain_ls()
33+
domain_status_dict = {}
34+
35+
36+
def test_domain(domain: str):
37+
client = option.new_jm_client(domain_list=[domain])
38+
status = 'ok'
39+
40+
try:
41+
client.get_album_detail('123456')
42+
except Exception as e:
43+
status = str(e.args)
44+
pass
45+
46+
domain_status_dict[domain] = status
47+
48+
49+
multi_thread_launcher(
50+
iter_objs=domain_set,
51+
apply_each_obj_func=test_domain,
52+
)
53+
54+
for domain, status in domain_status_dict.items():
55+
print(f'{domain}: {status}')

usage/workflow_download.py

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
1+
from jmcomic import *
2+
13
# 下方填入你要下载的本子的id,一行一个。
24
# 每行的首尾可以有空白字符
5+
# 你也可以填入本子网址,程序会识别出本子id
6+
# 例如:
7+
# [https://18comic.vip/album/452859/mana-ディシア-1-原神-中国語-無修正] -> [452859]
8+
#
39
jm_albums = '''
4-
452859
5-
https://18comic.vip/photo/452859/mana-ディシア-1-原神-中国語-無修正
6-
JM452859
10+
711
812
913
'''
1014

1115

1216
def get_jm_album_ids():
13-
from common import str_to_set
14-
1517
aid_set = set()
1618
for text in [
1719
jm_albums,
@@ -23,51 +25,62 @@ def get_jm_album_ids():
2325

2426

2527
def main():
26-
from jmcomic import download_album
2728
# 下载漫画
2829
download_album(get_jm_album_ids(), option=get_option())
2930

3031

3132
def get_option():
32-
from jmcomic import create_option, print_eye_catching
33-
3433
# 读取 option 配置文件
3534
option = create_option('../assets/config/option_workflow_download.yml')
35+
36+
# 支持工作流覆盖配置文件的配置
37+
cover_option_config(option)
38+
39+
# 覆盖client实现类,实现把请求错误的html下载到文件,方便GitHub Actions下载查看日志
3640
hook_debug(option)
3741

3842
# 启用 client 的缓存
3943
client = option.build_jm_client()
4044
client.enable_cache()
4145

46+
# 登录,如果有配置的话
47+
login_if_configured(client)
48+
49+
return option
50+
51+
52+
def cover_option_config(option: JmOption):
53+
dir_rule = get_env('DIR_RULE')
54+
if dir_rule is not None:
55+
the_old = option.dir_rule
56+
the_new = DirRule(dir_rule, base_dir=the_old.base_dir)
57+
option.dir_rule = the_new
58+
59+
60+
def login_if_configured(client):
4261
# 检查环境变量中是否有禁漫的用户名和密码,如果有则登录
4362
# 禁漫的大部分本子,下载是不需要登录的,少部分敏感题材需要登录
4463
# 如果你希望以登录状态下载本子,你需要自己配置一下GitHub Actions的 `secrets`
4564
# 配置的方式很简单,网页上点一点就可以了
4665
# 具体做法请去看官方教程:https://docs.github.com/en/actions/security-guides/encrypted-secrets
47-
4866
# 萌新注意!!!如果你想 `开源` 你的禁漫帐号,你也可以直接把账号密码写到下面的代码😅
49-
5067
username = get_env('JM_USERNAME')
5168
password = get_env('JM_PASSWORD')
52-
5369
if username is not None and password is not None:
5470
client.login(username, password, True)
5571
print_eye_catching(f'登录禁漫成功')
5672

57-
return option
58-
5973

74+
# noinspection PyUnusedLocal
6075
def hook_debug(option):
61-
from jmcomic import JmHtmlClient, workspace, mkdir_if_not_exists, JmModuleConfig
62-
6376
jm_download_dir = get_env('JM_DOWNLOAD_DIR') or workspace()
6477
mkdir_if_not_exists(jm_download_dir)
6578

6679
class RaiseErrorAwareClient(JmHtmlClient):
6780

6881
@classmethod
6982
def raise_request_error(cls, resp, msg=None):
70-
from common import write_text, fix_windir_name, format_ts
83+
from common import write_text, fix_windir_name
7184
write_text(
7285
f'{jm_download_dir}/{fix_windir_name(resp.url)}',
7386
resp.text

0 commit comments

Comments
 (0)