Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 147c796

Browse files
authoredMar 4, 2024
v2.5.7: 跟进禁漫v1.6.7版本更新的分类参数,优化代码和文档。
1 parent fbaaffc commit 147c796

File tree

13 files changed

+348
-188
lines changed

13 files changed

+348
-188
lines changed
 

‎README.md

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,26 @@
1414

1515
本项目的核心功能是下载本子,基于此,设计了一套方便使用、便于扩展,能满足一些特殊下载需求的框架。
1616

17-
除了下载功能以外,也实现了其他的一些禁漫接口,例如登录、搜索、收藏夹、分类、排行榜等等,按需实现
17+
目前核心功能实现较为稳定,项目也处于维护阶段
1818

19-
目前核心功能实现较为稳定,项目也处于维护阶段(因为禁漫接口经常变动,需要经常维护)。
19+
除了下载功能以外,也实现了其他的一些禁漫接口,按需实现,具体如下。
20+
21+
### 已实现的禁漫API:
22+
23+
- 登录
24+
- 搜本
25+
- 分类 (排行榜)
26+
- 本子章节详情
27+
- 图片下载解码
28+
- 收藏夹
29+
- 移动端接口加解密
2030

2131
## 安装教程
2232

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

2535
```shell
26-
pip install jmcomic -i https://pypi.org/project --upgrade
36+
pip install jmcomic -i https://pypi.org/project -U
2737
```
2838
* 通过源代码安装
2939

@@ -47,6 +57,21 @@ jmcomic.download_album('422866') # 传入要下载的album的id,即可下载
4757
$ jmcomic 422866
4858
```
4959

60+
## 进阶使用
61+
62+
文档网站:[jmcomic.readthedocs.io](https://jmcomic.readthedocs.io/en/latest)
63+
64+
进阶使用可以参考:[jmcomic常用类和方法演示](assets/docs/sources/tutorial/0_demo.md)
65+
66+
下面列出的是一些常用的文档:
67+
68+
* [jmcomic常用类和方法演示](assets/docs/sources/tutorial/0_demo.md)
69+
* [option配置文件语法(包含插件配置)](./assets/docs/sources/option_file_syntax.md)
70+
* [GitHub Actions使用教程](./assets/docs/sources/tutorial/1_github_actions.md)
71+
* [命令行使用教程](assets/docs/sources/tutorial/2_command_line.md)
72+
* [插件机制](assets/docs/sources/tutorial/6_plugin.md)
73+
* [下载过滤器机制](assets/docs/sources/tutorial/5_filter.md)
74+
5075
## 项目特点
5176

5277
- **绕过Cloudflare的反爬虫**
@@ -83,30 +108,18 @@ $ jmcomic 422866
83108
- `jpg图片合成为一个pdf插件`
84109
- `导出收藏夹为csv文件插件`
85110

86-
## 进阶使用
87-
88-
进阶使用请查阅文档:[文档](https://jmcomic.readthedocs.io/en/latest)
89-
90-
下面列出一些常用的文档链接:
91-
92-
* [option配置文件语法(包含插件配置)](./assets/docs/sources/option_file_syntax.md)
93-
* [常用类和方法演示(下载本子、获取实体类、搜索本子)](assets/docs/sources/tutorial/3_demo.md)
94-
* [命令行使用教程](assets/docs/sources/tutorial/2_command_line.md)
95-
* [GitHub Actions使用教程](./assets/docs/sources/tutorial/1_github_actions.md)
96-
* [插件机制](assets/docs/sources/tutorial/6_plugin.md)
97-
* [下载过滤器机制](assets/docs/sources/tutorial/5_filter.md)
98-
99111
## 使用小说明
100112

101113
* Python >= 3.7
102114
* 个人项目,文档和示例会有不及时之处,可以Issue提问
103115

104116
## 项目文件夹介绍
105117

118+
* .github:GitHub Actions配置文件
106119
* assets:存放一些非代码的资源文件
107120

108-
* config:存放配置文件
109121
* docs:项目文档
122+
* option:存放配置文件
110123

111124
* src:存放源代码
112125

‎assets/docs/sources/option_file_syntax.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,13 @@ dir_rule:
9090
# 本项只建议了解编程的朋友定制,实现在这个类: jmcomic.jm_option.DirRule
9191
# 写法:
9292
# 1. 以'Bd'开头,表示根目录
93-
# 2. 文件夹每增加一层,使用'_'区隔
94-
# 3. 文件夹名字表示为 Pxxx/Ayyy,意思是 JmPhotoDetail.xxx / JmAlbumDetail的.yyy。xxx和yyy可以写什么需要看源码。
95-
# 下面是示例,表示使用禁漫网站的默认下载方式 [根目录 / 本子id / 章节序号 / 图片文件]
96-
# rule: Bd_Aid_Pindex
93+
# 2. 文件夹每增加一层,使用 '_' 或者 '/' 区隔
94+
# 3. 用Pxxx或者Ayyy指代文件夹名,意思是 JmPhotoDetail.xxx / JmAlbumDetail的.yyy。xxx和yyy可以写什么需要看源码。
95+
#
96+
# 下面演示如果要使用禁漫网站的默认下载方式,该怎么写:
97+
# 规则: 根目录 / 本子id / 章节序号 / 图片文件
98+
# rule: 'Bd / Aid / Pindex'
99+
# rule: 'Bd_Aid_Pindex'
97100

98101
# 默认规则是: 根目录 / 章节标题 / 图片文件
99102
rule: Bd_Ptitle
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
# jmcomic 常用类和方法演示
2+
3+
## 下载本子/章节
4+
5+
```python
6+
from jmcomic import *
7+
8+
# 下载id为438696的本子 (https://18comic.vip/album/438696)
9+
download_album(438696)
10+
11+
# 下载章节 (https://18comic.vip/photo/438696)
12+
download_photo(438696)
13+
14+
# 同时下载多个本子
15+
download_album([123, 456, 789])
16+
```
17+
18+
## 使用option定制化下载本子
19+
20+
如果你在下载本子时有一些定制化需求,
21+
22+
例如指定禁漫域名,使用代理,登录禁漫,图片格式转换等等,
23+
24+
那么,你可以试试看jmcomic提供的option机制
25+
26+
```python
27+
from jmcomic import *
28+
29+
# 1. 在调用下载api前,通过创建和使用option对象,可以定制化下载行为。
30+
# 推荐使用配置文件的方式来创建option对象,
31+
# 你可以配置很多东西,比如代理、cookies、下载规则等等。
32+
# 配置文件的语法参考: https://jmcomic.readthedocs.io/en/latest/option_file_syntax/
33+
option = create_option_by_file('op.yml') # 通过配置文件来创建option对象
34+
35+
# 2. 调用下载api,把option作为参数传递
36+
download_album(123, option)
37+
# 也可以使用下面这种面向对象的方式,是一样的
38+
option.download_album(123)
39+
```
40+
41+
## 获取本子/章节/图片的实体类
42+
43+
```python
44+
from jmcomic import *
45+
46+
# 客户端
47+
client = JmOption.default().new_jm_client()
48+
49+
# 本子实体类
50+
album: JmAlbumDetail = client.get_album_detail('427413')
51+
52+
53+
def fetch(photo: JmPhotoDetail):
54+
# 章节实体类
55+
photo = client.get_photo_detail(photo.photo_id, False)
56+
57+
# 图片实体类
58+
image: JmImageDetail
59+
for image in photo:
60+
print(image.img_url)
61+
62+
63+
# 多线程发起请求
64+
multi_thread_launcher(
65+
iter_objs=album,
66+
apply_each_obj_func=fetch
67+
)
68+
```
69+
70+
## 搜索本子
71+
72+
```python
73+
from jmcomic import *
74+
75+
client = JmOption.default().new_jm_client()
76+
77+
# 分页查询,search_site就是禁漫网页上的【站内搜索】
78+
page: JmSearchPage = client.search_site(search_query='+MANA +无修正', page=1)
79+
# page默认的迭代方式是page.iter_id_title(),每次迭代返回 albun_id, title
80+
for album_id, title in page:
81+
print(f'[{album_id}]: {title}')
82+
83+
# 直接搜索禁漫车号
84+
page = client.search_site(search_query='427413')
85+
album: JmAlbumDetail = page.single_album
86+
print(album.tags)
87+
```
88+
89+
## 搜索并下载本子
90+
91+
```python
92+
from jmcomic import *
93+
94+
option = JmOption.default()
95+
client = option.new_jm_client()
96+
97+
tag = '無修正'
98+
# 搜索标签,可以使用search_tag。
99+
# 搜索第一页。
100+
page: JmSearchPage = client.search_tag(tag, page=1)
101+
102+
aid_list = []
103+
104+
for aid, atitle, tag_list in page.iter_id_title_tag(): # 使用page的iter_id_title_tag迭代器
105+
if tag in tag_list:
106+
print(f'[标签/{tag}] 发现目标: [{aid}]: [{atitle}]')
107+
aid_list.append(aid)
108+
109+
download_album(aid_list, option)
110+
```
111+
112+
## 分类 / 排行榜
113+
114+
禁漫的分类是一个和搜索有些类似的功能。
115+
116+
搜索是按某一条件进行过滤。
117+
118+
分类没有过滤,就是把某一类别(category)下的本子全都调出来。
119+
120+
禁漫的排行榜就是分类的一种形式
121+
122+
下面演示调用分类api
123+
124+
```python
125+
from jmcomic import *
126+
127+
# 创建客户端
128+
op = JmOption.default()
129+
cl = op.new_jm_client()
130+
131+
# 调用分类接口
132+
# 根据下面的参数,这个调用的意义就是:
133+
# 在全部分类下,选择所有时间范围,按观看数排序后,获取第一页的本子
134+
page: JmCategoryPage = cl.categories_filter(
135+
page=1,
136+
time=JmMagicConstants.TIME_ALL, # 时间选择全部,具体可以写什么请见JmMagicConstants
137+
category=JmMagicConstants.CATEGORY_ALL, # 分类选择全部,具体可以写什么请见JmMagicConstants
138+
order_by=JmMagicConstants.ORDER_BY_LATEST, # 按照观看数排序,具体可以写什么请见JmMagicConstants
139+
)
140+
141+
# 月排行,底层实现也是调的categories_filter
142+
page: JmCategoryPage = cl.month_ranking(1)
143+
# 周排行
144+
page: JmCategoryPage = cl.week_ranking(1)
145+
146+
# 循环获取分页,使用 cl.categories_filter_gen
147+
for page in cl.categories_filter_gen(1, # 起始页码
148+
# 下面是分类参数
149+
JmMagicConstants.TIME_WEEK,
150+
JmMagicConstants.CATEGORY_ALL,
151+
JmMagicConstants.ORDER_BY_VIEW,
152+
):
153+
for aid, atitle in page:
154+
print(aid, atitle)
155+
156+
```
157+
158+
## 手动创建Client
159+
160+
```python
161+
# 默认的使用方式是先创建option,option封装了所有配置,然后由option.new_jm_client() 创建客户端client,使用client可以访问禁漫接口
162+
163+
# 下面演示直接构造client的方式
164+
from jmcomic import *
165+
166+
"""
167+
创建JM客户端
168+
169+
:param postman: 负责实现HTTP请求的对象,持有cookies、headers、proxies等信息
170+
:param domain_list: 禁漫域名
171+
:param retry_times: 重试次数
172+
"""
173+
174+
# 网页端
175+
cl = JmHtmlClient(
176+
postman=JmModuleConfig.new_postman(),
177+
domain_list=['18comic.vip'],
178+
retry_times=1
179+
)
180+
181+
# API端(APP)
182+
cl = JmApiClient(
183+
postman=JmModuleConfig.new_postman(),
184+
domain_list=JmModuleConfig.DOMAIN_API_LIST,
185+
retry_times=1
186+
)
187+
188+
189+
```

0 commit comments

Comments
 (0)