novel-downloader 1.4.5__py3-none-any.whl → 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- novel_downloader/__init__.py +1 -1
- novel_downloader/cli/__init__.py +2 -4
- novel_downloader/cli/clean.py +21 -88
- novel_downloader/cli/config.py +27 -104
- novel_downloader/cli/download.py +78 -66
- novel_downloader/cli/export.py +20 -21
- novel_downloader/cli/main.py +3 -1
- novel_downloader/cli/search.py +120 -0
- novel_downloader/cli/ui.py +156 -0
- novel_downloader/config/__init__.py +10 -14
- novel_downloader/config/adapter.py +195 -99
- novel_downloader/config/{loader.py → file_io.py} +53 -27
- novel_downloader/core/__init__.py +14 -13
- novel_downloader/core/archived/deqixs/fetcher.py +115 -0
- novel_downloader/core/archived/deqixs/parser.py +132 -0
- novel_downloader/core/archived/deqixs/searcher.py +89 -0
- novel_downloader/core/archived/qidian/searcher.py +79 -0
- novel_downloader/core/archived/wanbengo/searcher.py +98 -0
- novel_downloader/core/archived/xshbook/searcher.py +93 -0
- novel_downloader/core/downloaders/__init__.py +8 -30
- novel_downloader/core/downloaders/base.py +182 -30
- novel_downloader/core/downloaders/common.py +217 -384
- novel_downloader/core/downloaders/qianbi.py +332 -4
- novel_downloader/core/downloaders/qidian.py +250 -290
- novel_downloader/core/downloaders/registry.py +69 -0
- novel_downloader/core/downloaders/signals.py +46 -0
- novel_downloader/core/exporters/__init__.py +8 -26
- novel_downloader/core/exporters/base.py +107 -31
- novel_downloader/core/exporters/common/__init__.py +3 -4
- novel_downloader/core/exporters/common/epub.py +92 -171
- novel_downloader/core/exporters/common/main_exporter.py +14 -67
- novel_downloader/core/exporters/common/txt.py +90 -86
- novel_downloader/core/exporters/epub_util.py +184 -1327
- novel_downloader/core/exporters/linovelib/__init__.py +3 -2
- novel_downloader/core/exporters/linovelib/epub.py +165 -222
- novel_downloader/core/exporters/linovelib/main_exporter.py +10 -71
- novel_downloader/core/exporters/linovelib/txt.py +76 -66
- novel_downloader/core/exporters/qidian.py +15 -11
- novel_downloader/core/exporters/registry.py +55 -0
- novel_downloader/core/exporters/txt_util.py +67 -0
- novel_downloader/core/fetchers/__init__.py +57 -56
- novel_downloader/core/fetchers/aaatxt.py +83 -0
- novel_downloader/core/fetchers/{biquge/session.py → b520.py} +10 -10
- novel_downloader/core/fetchers/{base/session.py → base.py} +63 -47
- novel_downloader/core/fetchers/biquyuedu.py +83 -0
- novel_downloader/core/fetchers/dxmwx.py +110 -0
- novel_downloader/core/fetchers/eightnovel.py +139 -0
- novel_downloader/core/fetchers/{esjzone/session.py → esjzone.py} +23 -11
- novel_downloader/core/fetchers/guidaye.py +85 -0
- novel_downloader/core/fetchers/hetushu.py +92 -0
- novel_downloader/core/fetchers/{qianbi/browser.py → i25zw.py} +22 -26
- novel_downloader/core/fetchers/ixdzs8.py +113 -0
- novel_downloader/core/fetchers/jpxs123.py +101 -0
- novel_downloader/core/fetchers/{biquge/browser.py → lewenn.py} +15 -15
- novel_downloader/core/fetchers/{linovelib/session.py → linovelib.py} +16 -12
- novel_downloader/core/fetchers/piaotia.py +105 -0
- novel_downloader/core/fetchers/qbtr.py +101 -0
- novel_downloader/core/fetchers/{qianbi/session.py → qianbi.py} +9 -9
- novel_downloader/core/fetchers/{qidian/session.py → qidian.py} +55 -40
- novel_downloader/core/fetchers/quanben5.py +92 -0
- novel_downloader/core/fetchers/{base/rate_limiter.py → rate_limiter.py} +2 -2
- novel_downloader/core/fetchers/registry.py +60 -0
- novel_downloader/core/fetchers/{sfacg/session.py → sfacg.py} +11 -9
- novel_downloader/core/fetchers/shencou.py +106 -0
- novel_downloader/core/fetchers/{common/browser.py → shuhaige.py} +24 -19
- novel_downloader/core/fetchers/tongrenquan.py +84 -0
- novel_downloader/core/fetchers/ttkan.py +95 -0
- novel_downloader/core/fetchers/{common/session.py → wanbengo.py} +21 -17
- novel_downloader/core/fetchers/xiaoshuowu.py +106 -0
- novel_downloader/core/fetchers/xiguashuwu.py +177 -0
- novel_downloader/core/fetchers/xs63b.py +171 -0
- novel_downloader/core/fetchers/xshbook.py +85 -0
- novel_downloader/core/fetchers/{yamibo/session.py → yamibo.py} +23 -11
- novel_downloader/core/fetchers/yibige.py +114 -0
- novel_downloader/core/interfaces/__init__.py +8 -14
- novel_downloader/core/interfaces/downloader.py +6 -2
- novel_downloader/core/interfaces/exporter.py +7 -7
- novel_downloader/core/interfaces/fetcher.py +4 -17
- novel_downloader/core/interfaces/parser.py +5 -6
- novel_downloader/core/interfaces/searcher.py +26 -0
- novel_downloader/core/parsers/__init__.py +58 -22
- novel_downloader/core/parsers/aaatxt.py +132 -0
- novel_downloader/core/parsers/b520.py +116 -0
- novel_downloader/core/parsers/base.py +63 -12
- novel_downloader/core/parsers/biquyuedu.py +133 -0
- novel_downloader/core/parsers/dxmwx.py +162 -0
- novel_downloader/core/parsers/eightnovel.py +224 -0
- novel_downloader/core/parsers/{esjzone/main_parser.py → esjzone.py} +67 -67
- novel_downloader/core/parsers/guidaye.py +128 -0
- novel_downloader/core/parsers/hetushu.py +139 -0
- novel_downloader/core/parsers/i25zw.py +137 -0
- novel_downloader/core/parsers/ixdzs8.py +186 -0
- novel_downloader/core/parsers/jpxs123.py +137 -0
- novel_downloader/core/parsers/lewenn.py +142 -0
- novel_downloader/core/parsers/{linovelib/main_parser.py → linovelib.py} +54 -65
- novel_downloader/core/parsers/piaotia.py +189 -0
- novel_downloader/core/parsers/qbtr.py +136 -0
- novel_downloader/core/parsers/{qianbi/main_parser.py → qianbi.py} +54 -51
- novel_downloader/core/parsers/qidian/__init__.py +2 -2
- novel_downloader/core/parsers/qidian/book_info_parser.py +58 -59
- novel_downloader/core/parsers/qidian/chapter_encrypted.py +290 -346
- novel_downloader/core/parsers/qidian/chapter_normal.py +25 -56
- novel_downloader/core/parsers/qidian/main_parser.py +19 -57
- novel_downloader/core/parsers/qidian/utils/__init__.py +12 -11
- novel_downloader/core/parsers/qidian/utils/decryptor_fetcher.py +6 -7
- novel_downloader/core/parsers/qidian/utils/fontmap_recover.py +143 -0
- novel_downloader/core/parsers/qidian/utils/helpers.py +0 -4
- novel_downloader/core/parsers/qidian/utils/node_decryptor.py +2 -2
- novel_downloader/core/parsers/quanben5.py +103 -0
- novel_downloader/core/parsers/registry.py +57 -0
- novel_downloader/core/parsers/{sfacg/main_parser.py → sfacg.py} +46 -48
- novel_downloader/core/parsers/shencou.py +215 -0
- novel_downloader/core/parsers/shuhaige.py +111 -0
- novel_downloader/core/parsers/tongrenquan.py +116 -0
- novel_downloader/core/parsers/ttkan.py +132 -0
- novel_downloader/core/parsers/wanbengo.py +191 -0
- novel_downloader/core/parsers/xiaoshuowu.py +173 -0
- novel_downloader/core/parsers/xiguashuwu.py +435 -0
- novel_downloader/core/parsers/xs63b.py +161 -0
- novel_downloader/core/parsers/xshbook.py +134 -0
- novel_downloader/core/parsers/yamibo.py +155 -0
- novel_downloader/core/parsers/yibige.py +166 -0
- novel_downloader/core/searchers/__init__.py +51 -0
- novel_downloader/core/searchers/aaatxt.py +107 -0
- novel_downloader/core/searchers/b520.py +84 -0
- novel_downloader/core/searchers/base.py +168 -0
- novel_downloader/core/searchers/dxmwx.py +105 -0
- novel_downloader/core/searchers/eightnovel.py +84 -0
- novel_downloader/core/searchers/esjzone.py +102 -0
- novel_downloader/core/searchers/hetushu.py +92 -0
- novel_downloader/core/searchers/i25zw.py +93 -0
- novel_downloader/core/searchers/ixdzs8.py +107 -0
- novel_downloader/core/searchers/jpxs123.py +107 -0
- novel_downloader/core/searchers/piaotia.py +100 -0
- novel_downloader/core/searchers/qbtr.py +106 -0
- novel_downloader/core/searchers/qianbi.py +165 -0
- novel_downloader/core/searchers/quanben5.py +144 -0
- novel_downloader/core/searchers/registry.py +79 -0
- novel_downloader/core/searchers/shuhaige.py +124 -0
- novel_downloader/core/searchers/tongrenquan.py +110 -0
- novel_downloader/core/searchers/ttkan.py +92 -0
- novel_downloader/core/searchers/xiaoshuowu.py +122 -0
- novel_downloader/core/searchers/xiguashuwu.py +95 -0
- novel_downloader/core/searchers/xs63b.py +104 -0
- novel_downloader/locales/en.json +36 -79
- novel_downloader/locales/zh.json +37 -80
- novel_downloader/models/__init__.py +23 -50
- novel_downloader/models/book.py +44 -0
- novel_downloader/models/config.py +16 -43
- novel_downloader/models/login.py +1 -1
- novel_downloader/models/search.py +21 -0
- novel_downloader/resources/config/settings.toml +39 -74
- novel_downloader/resources/css_styles/intro.css +83 -0
- novel_downloader/resources/css_styles/main.css +30 -89
- novel_downloader/resources/json/xiguashuwu.json +718 -0
- novel_downloader/utils/__init__.py +43 -0
- novel_downloader/utils/chapter_storage.py +247 -226
- novel_downloader/utils/constants.py +5 -50
- novel_downloader/utils/cookies.py +6 -18
- novel_downloader/utils/crypto_utils/__init__.py +13 -0
- novel_downloader/utils/crypto_utils/aes_util.py +90 -0
- novel_downloader/utils/crypto_utils/aes_v1.py +619 -0
- novel_downloader/utils/crypto_utils/aes_v2.py +1143 -0
- novel_downloader/utils/{crypto_utils.py → crypto_utils/rc4.py} +3 -10
- novel_downloader/utils/epub/__init__.py +34 -0
- novel_downloader/utils/epub/builder.py +377 -0
- novel_downloader/utils/epub/constants.py +118 -0
- novel_downloader/utils/epub/documents.py +297 -0
- novel_downloader/utils/epub/models.py +120 -0
- novel_downloader/utils/epub/utils.py +179 -0
- novel_downloader/utils/file_utils/__init__.py +5 -30
- novel_downloader/utils/file_utils/io.py +9 -150
- novel_downloader/utils/file_utils/normalize.py +2 -2
- novel_downloader/utils/file_utils/sanitize.py +2 -7
- novel_downloader/utils/fontocr.py +207 -0
- novel_downloader/utils/i18n.py +2 -0
- novel_downloader/utils/logger.py +10 -16
- novel_downloader/utils/network.py +111 -252
- novel_downloader/utils/state.py +5 -90
- novel_downloader/utils/text_utils/__init__.py +16 -21
- novel_downloader/utils/text_utils/diff_display.py +6 -9
- novel_downloader/utils/text_utils/numeric_conversion.py +253 -0
- novel_downloader/utils/text_utils/text_cleaner.py +179 -0
- novel_downloader/utils/text_utils/truncate_utils.py +62 -0
- novel_downloader/utils/time_utils/__init__.py +6 -12
- novel_downloader/utils/time_utils/datetime_utils.py +23 -33
- novel_downloader/utils/time_utils/sleep_utils.py +5 -10
- novel_downloader/web/__init__.py +13 -0
- novel_downloader/web/components/__init__.py +11 -0
- novel_downloader/web/components/navigation.py +35 -0
- novel_downloader/web/main.py +66 -0
- novel_downloader/web/pages/__init__.py +17 -0
- novel_downloader/web/pages/download.py +78 -0
- novel_downloader/web/pages/progress.py +147 -0
- novel_downloader/web/pages/search.py +329 -0
- novel_downloader/web/services/__init__.py +17 -0
- novel_downloader/web/services/client_dialog.py +164 -0
- novel_downloader/web/services/cred_broker.py +113 -0
- novel_downloader/web/services/cred_models.py +35 -0
- novel_downloader/web/services/task_manager.py +264 -0
- novel_downloader-2.0.0.dist-info/METADATA +171 -0
- novel_downloader-2.0.0.dist-info/RECORD +210 -0
- {novel_downloader-1.4.5.dist-info → novel_downloader-2.0.0.dist-info}/entry_points.txt +1 -1
- novel_downloader/config/site_rules.py +0 -94
- novel_downloader/core/downloaders/biquge.py +0 -25
- novel_downloader/core/downloaders/esjzone.py +0 -25
- novel_downloader/core/downloaders/linovelib.py +0 -25
- novel_downloader/core/downloaders/sfacg.py +0 -25
- novel_downloader/core/downloaders/yamibo.py +0 -25
- novel_downloader/core/exporters/biquge.py +0 -25
- novel_downloader/core/exporters/esjzone.py +0 -25
- novel_downloader/core/exporters/qianbi.py +0 -25
- novel_downloader/core/exporters/sfacg.py +0 -25
- novel_downloader/core/exporters/yamibo.py +0 -25
- novel_downloader/core/factory/__init__.py +0 -20
- novel_downloader/core/factory/downloader.py +0 -73
- novel_downloader/core/factory/exporter.py +0 -58
- novel_downloader/core/factory/fetcher.py +0 -96
- novel_downloader/core/factory/parser.py +0 -86
- novel_downloader/core/fetchers/base/__init__.py +0 -14
- novel_downloader/core/fetchers/base/browser.py +0 -403
- novel_downloader/core/fetchers/biquge/__init__.py +0 -14
- novel_downloader/core/fetchers/common/__init__.py +0 -14
- novel_downloader/core/fetchers/esjzone/__init__.py +0 -14
- novel_downloader/core/fetchers/esjzone/browser.py +0 -204
- novel_downloader/core/fetchers/linovelib/__init__.py +0 -14
- novel_downloader/core/fetchers/linovelib/browser.py +0 -193
- novel_downloader/core/fetchers/qianbi/__init__.py +0 -14
- novel_downloader/core/fetchers/qidian/__init__.py +0 -14
- novel_downloader/core/fetchers/qidian/browser.py +0 -318
- novel_downloader/core/fetchers/sfacg/__init__.py +0 -14
- novel_downloader/core/fetchers/sfacg/browser.py +0 -189
- novel_downloader/core/fetchers/yamibo/__init__.py +0 -14
- novel_downloader/core/fetchers/yamibo/browser.py +0 -229
- novel_downloader/core/parsers/biquge/__init__.py +0 -10
- novel_downloader/core/parsers/biquge/main_parser.py +0 -134
- novel_downloader/core/parsers/common/__init__.py +0 -13
- novel_downloader/core/parsers/common/helper.py +0 -323
- novel_downloader/core/parsers/common/main_parser.py +0 -106
- novel_downloader/core/parsers/esjzone/__init__.py +0 -10
- novel_downloader/core/parsers/linovelib/__init__.py +0 -10
- novel_downloader/core/parsers/qianbi/__init__.py +0 -10
- novel_downloader/core/parsers/sfacg/__init__.py +0 -10
- novel_downloader/core/parsers/yamibo/__init__.py +0 -10
- novel_downloader/core/parsers/yamibo/main_parser.py +0 -194
- novel_downloader/models/browser.py +0 -21
- novel_downloader/models/chapter.py +0 -25
- novel_downloader/models/site_rules.py +0 -99
- novel_downloader/models/tasks.py +0 -33
- novel_downloader/models/types.py +0 -15
- novel_downloader/resources/css_styles/volume-intro.css +0 -56
- novel_downloader/resources/json/replace_word_map.json +0 -4
- novel_downloader/resources/text/blacklist.txt +0 -22
- novel_downloader/tui/__init__.py +0 -7
- novel_downloader/tui/app.py +0 -32
- novel_downloader/tui/main.py +0 -17
- novel_downloader/tui/screens/__init__.py +0 -14
- novel_downloader/tui/screens/home.py +0 -198
- novel_downloader/tui/screens/login.py +0 -74
- novel_downloader/tui/styles/home_layout.tcss +0 -79
- novel_downloader/tui/widgets/richlog_handler.py +0 -24
- novel_downloader/utils/cache.py +0 -24
- novel_downloader/utils/fontocr/__init__.py +0 -22
- novel_downloader/utils/fontocr/model_loader.py +0 -69
- novel_downloader/utils/fontocr/ocr_v1.py +0 -303
- novel_downloader/utils/fontocr/ocr_v2.py +0 -752
- novel_downloader/utils/hash_store.py +0 -279
- novel_downloader/utils/hash_utils.py +0 -103
- novel_downloader/utils/text_utils/chapter_formatting.py +0 -46
- novel_downloader/utils/text_utils/font_mapping.py +0 -28
- novel_downloader/utils/text_utils/text_cleaning.py +0 -107
- novel_downloader-1.4.5.dist-info/METADATA +0 -196
- novel_downloader-1.4.5.dist-info/RECORD +0 -165
- {novel_downloader-1.4.5.dist-info → novel_downloader-2.0.0.dist-info}/WHEEL +0 -0
- {novel_downloader-1.4.5.dist-info → novel_downloader-2.0.0.dist-info}/licenses/LICENSE +0 -0
- {novel_downloader-1.4.5.dist-info → novel_downloader-2.0.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,171 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: novel-downloader
|
3
|
+
Version: 2.0.0
|
4
|
+
Summary: A command-line tool for downloading Chinese web novels from Qidian and similar platforms.
|
5
|
+
Author-email: Saudade Z <saudadez217@gmail.com>
|
6
|
+
License: MIT License
|
7
|
+
|
8
|
+
Copyright (c) 2025 Saudade Z
|
9
|
+
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
12
|
+
in the Software without restriction, including without limitation the rights
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
15
|
+
furnished to do so, subject to the following conditions:
|
16
|
+
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
18
|
+
copies or substantial portions of the Software.
|
19
|
+
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
26
|
+
SOFTWARE.
|
27
|
+
|
28
|
+
Project-URL: Homepage, https://github.com/saudadez21/novel-downloader
|
29
|
+
Project-URL: Source, https://github.com/saudadez21/novel-downloader
|
30
|
+
Keywords: novel,web novel,qidian,biquge,ebook
|
31
|
+
Classifier: Development Status :: 3 - Alpha
|
32
|
+
Classifier: Environment :: Console
|
33
|
+
Classifier: License :: OSI Approved :: MIT License
|
34
|
+
Classifier: Natural Language :: Chinese (Simplified)
|
35
|
+
Classifier: Topic :: Utilities
|
36
|
+
Classifier: Programming Language :: Python :: 3
|
37
|
+
Classifier: Programming Language :: Python :: 3.11
|
38
|
+
Classifier: Programming Language :: Python :: 3.12
|
39
|
+
Classifier: Programming Language :: Python :: 3.13
|
40
|
+
Requires-Python: >=3.11
|
41
|
+
Description-Content-Type: text/markdown
|
42
|
+
License-File: LICENSE
|
43
|
+
Requires-Dist: rich
|
44
|
+
Requires-Dist: nicegui
|
45
|
+
Requires-Dist: requests
|
46
|
+
Requires-Dist: aiohttp
|
47
|
+
Requires-Dist: lxml
|
48
|
+
Requires-Dist: platformdirs
|
49
|
+
Provides-Extra: font-recovery
|
50
|
+
Requires-Dist: numpy; extra == "font-recovery"
|
51
|
+
Requires-Dist: fonttools; extra == "font-recovery"
|
52
|
+
Requires-Dist: pillow; extra == "font-recovery"
|
53
|
+
Provides-Extra: dev
|
54
|
+
Requires-Dist: black; extra == "dev"
|
55
|
+
Requires-Dist: mypy; extra == "dev"
|
56
|
+
Requires-Dist: ruff; extra == "dev"
|
57
|
+
Requires-Dist: pytest; extra == "dev"
|
58
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
59
|
+
Requires-Dist: pytest-mock; extra == "dev"
|
60
|
+
Requires-Dist: types-requests; extra == "dev"
|
61
|
+
Requires-Dist: types-lxml; extra == "dev"
|
62
|
+
Requires-Dist: types-PyYAML; extra == "dev"
|
63
|
+
Requires-Dist: pre-commit; extra == "dev"
|
64
|
+
Requires-Dist: commitizen; extra == "dev"
|
65
|
+
Dynamic: license-file
|
66
|
+
|
67
|
+
# novel-downloader
|
68
|
+
|
69
|
+
基于 [aiohttp](https://github.com/aio-libs/aiohttp) 的异步小说下载工具 / 库。支持断点续传、广告过滤与 TXT/EPUB 导出, 提供 CLI 与 Web 图形界面。
|
70
|
+
|
71
|
+
> 运行要求: **Python 3.11+** (开发环境: Python 3.12)
|
72
|
+
|
73
|
+
## 功能特性
|
74
|
+
|
75
|
+
* **可恢复下载**: 运行时自动检测本地已完成的部分, 跳过已下载内容
|
76
|
+
* **多格式导出**: 合并所有章节为
|
77
|
+
* `TXT`
|
78
|
+
* `EPUB` (可选打包章节插图)
|
79
|
+
* **广告/活动过滤**:
|
80
|
+
* [x] 章节标题过滤
|
81
|
+
* [x] 章节正文过滤
|
82
|
+
* **可选字体混淆还原**: `decode_font`
|
83
|
+
* **双形态使用**: 命令行 (CLI) 与 Web 图形界面 (GUI)
|
84
|
+
|
85
|
+
---
|
86
|
+
|
87
|
+
## 安装
|
88
|
+
|
89
|
+
使用 `pip` 安装稳定版:
|
90
|
+
|
91
|
+
```bash
|
92
|
+
pip install novel-downloader
|
93
|
+
```
|
94
|
+
|
95
|
+
启用字体解密功能 (`decode_font`):
|
96
|
+
|
97
|
+
```bash
|
98
|
+
pip install "novel-downloader[font-recovery]"
|
99
|
+
```
|
100
|
+
|
101
|
+
> 参见: [安装](https://github.com/saudadez21/novel-downloader/blob/main/docs/1-installation.md)
|
102
|
+
|
103
|
+
---
|
104
|
+
|
105
|
+
## 快速开始
|
106
|
+
|
107
|
+
### 1. 初始化配置
|
108
|
+
|
109
|
+
```bash
|
110
|
+
# 生成默认配置 ./settings.toml
|
111
|
+
novel-cli config init
|
112
|
+
```
|
113
|
+
|
114
|
+
编辑生成的 `./settings.toml`, 可修改 `request_interval`、`book_ids` 等配置 (参考 [settings.toml 配置说明](https://github.com/saudadez21/novel-downloader/blob/main/docs/3-settings-schema.md))
|
115
|
+
|
116
|
+
### 2. 命令行 (CLI)
|
117
|
+
|
118
|
+
```bash
|
119
|
+
# 执行下载任务 (示例: 书籍 ID 为 123456, 默认站点为起点)
|
120
|
+
novel-cli download 123456
|
121
|
+
```
|
122
|
+
|
123
|
+
* 支持站点见: [支持站点列表](https://github.com/saudadez21/novel-downloader/blob/main/docs/4-supported-sites.md)
|
124
|
+
* 更多示例见: [CLI 使用示例](https://github.com/saudadez21/novel-downloader/blob/main/docs/5-cli-usage-examples.md)
|
125
|
+
|
126
|
+
### 3. 图形界面 (GUI / Web)
|
127
|
+
|
128
|
+
```bash
|
129
|
+
# 启动 Web 界面 (基于当前 settings.toml)
|
130
|
+
novel-web
|
131
|
+
|
132
|
+
# 如需提供局域网/外网访问 (请自行留意安全与网络环境)
|
133
|
+
# novel-web --listen public
|
134
|
+
```
|
135
|
+
|
136
|
+
---
|
137
|
+
|
138
|
+
## 从源码安装 (开发版)
|
139
|
+
|
140
|
+
体验最新开发功能:
|
141
|
+
|
142
|
+
```bash
|
143
|
+
git clone https://github.com/saudadez21/novel-downloader.git
|
144
|
+
cd novel-downloader
|
145
|
+
pip install .
|
146
|
+
# 或安装带可选功能:
|
147
|
+
# pip install .[font-recovery]
|
148
|
+
```
|
149
|
+
|
150
|
+
---
|
151
|
+
|
152
|
+
## 文档导航
|
153
|
+
|
154
|
+
* [安装](https://github.com/saudadez21/novel-downloader/blob/main/docs/1-installation.md)
|
155
|
+
* [配置](https://github.com/saudadez21/novel-downloader/blob/main/docs/2-configuration.md)
|
156
|
+
* [settings.toml 配置说明](https://github.com/saudadez21/novel-downloader/blob/main/docs/3-settings-schema.md)
|
157
|
+
* [支持站点列表](https://github.com/saudadez21/novel-downloader/blob/main/docs/4-supported-sites.md)
|
158
|
+
* [CLI 使用示例](https://github.com/saudadez21/novel-downloader/blob/main/docs/5-cli-usage-examples.md)
|
159
|
+
* [复制 Cookies](https://github.com/saudadez21/novel-downloader/blob/main/docs/copy-cookies.md)
|
160
|
+
* [文件保存](https://github.com/saudadez21/novel-downloader/blob/main/docs/file-saving.md)
|
161
|
+
* [模块与接口文档](https://github.com/saudadez21/novel-downloader/blob/main/docs/api/README.md)
|
162
|
+
* [TODO](https://github.com/saudadez21/novel-downloader/blob/main/docs/todo.md)
|
163
|
+
* [开发](https://github.com/saudadez21/novel-downloader/blob/main/docs/develop.md)
|
164
|
+
|
165
|
+
---
|
166
|
+
|
167
|
+
## 项目说明
|
168
|
+
|
169
|
+
* 本项目仅供学习和研究使用, **不得**用于任何商业或违法用途; 请遵守目标网站的 `robots.txt` 及相关法律法规
|
170
|
+
* 由于网站结构可能变化或其他问题, 可能导致无法正常工作, 请按需自行调整代码或寻找其他解决方案
|
171
|
+
* 使用本项目造成的任何法律责任由使用者自行承担, 项目作者不承担相关责任
|
@@ -0,0 +1,210 @@
|
|
1
|
+
novel_downloader/__init__.py,sha256=gvhm67MQNWoL_G7z3QqXrhgp7Cw3xc5KqU8-UpCKQ0s,218
|
2
|
+
novel_downloader/cli/__init__.py,sha256=okUd_09fBWx8lz3zx3329dIK0xNRlNQJkUzDXYoSE1U,167
|
3
|
+
novel_downloader/cli/clean.py,sha256=VaiJox75-ZuXvSDFMaiAUawEbdtuEUsnsVWZGKuirJ4,2395
|
4
|
+
novel_downloader/cli/config.py,sha256=W4-f59dK5jdlg_9XDwGIyzd6VtpyNpB9U4qcxfso8Xg,3598
|
5
|
+
novel_downloader/cli/download.py,sha256=-59icT24iU_l6LhAJqQaxLAogJAr0hRxd-_RfcjQbdI,7587
|
6
|
+
novel_downloader/cli/export.py,sha256=iSIbSXreYRTs_KfZS4eJ0cJoMgoutwdza88JGoxQMlw,2573
|
7
|
+
novel_downloader/cli/main.py,sha256=GKtxeumw_VvWManp52Am538jL2t7xz7yVrGIaxrvSVk,1009
|
8
|
+
novel_downloader/cli/search.py,sha256=_Ci4fa1ECiYmBZI2OZBxzwddYGIvdUyIp4AOIJiL1Ds,3641
|
9
|
+
novel_downloader/cli/ui.py,sha256=Gme3J4M_eK23cDWepMs8-c0zfIanSSXERnYSWYkerE4,3992
|
10
|
+
novel_downloader/config/__init__.py,sha256=gwaDMlcBX7Lw8Hi8dY2HxNEt9ysMhIFNhkziyjramWo,405
|
11
|
+
novel_downloader/config/adapter.py,sha256=Y8Dt5GflbCiOwjBbTN7D3O5JPnkssbJDYGtYOYzEt1M,11561
|
12
|
+
novel_downloader/config/file_io.py,sha256=ncKk7rj07UnYYVEPR_RHS2D5igMSv8xaHySNvJQWhB8,6495
|
13
|
+
novel_downloader/core/__init__.py,sha256=20zZKxemHFQv8noyftPTcen6Okq-AJS5GIlwn8Zc7AA,1157
|
14
|
+
novel_downloader/core/archived/deqixs/fetcher.py,sha256=JGTLWI-d5jLULB-vS2VUeajwp7tHlb9trUCF4lJrdiQ,3432
|
15
|
+
novel_downloader/core/archived/deqixs/parser.py,sha256=udM6MYdunPVYwUNjEoBDjffHR_SsXPvv_EqsCMJJVrE,4169
|
16
|
+
novel_downloader/core/archived/deqixs/searcher.py,sha256=ezXCQ0pM8AqmTXmkzLrOSebTvHg_GouIywIE23c5hwY,2920
|
17
|
+
novel_downloader/core/archived/qidian/searcher.py,sha256=Q0-MdYfO-NrFW7rhF92lXk8EX1Gdcmp_gYzhcM06cLU,2460
|
18
|
+
novel_downloader/core/archived/wanbengo/searcher.py,sha256=RAXHENGgqGzWRop3N4_PPlRB7JdUZotQqKaA2RRrzZM,3056
|
19
|
+
novel_downloader/core/archived/xshbook/searcher.py,sha256=pfyVPl7DP_cq0mjIIyOkQPKZL-piOTO5agSSPeY4Qi4,2915
|
20
|
+
novel_downloader/core/downloaders/__init__.py,sha256=r1Ipy4AMc_sBYo14pUPYkLu7eN1g_6UJ9O2gfQLcAB8,430
|
21
|
+
novel_downloader/core/downloaders/base.py,sha256=mCyMG3Iwvursm3ACCYK2Vr45nDqr73V1awOfL7kSXTs,11526
|
22
|
+
novel_downloader/core/downloaders/common.py,sha256=hqffXUjci3CLvs9d0jCYwrYvDHdJUDpzWn2wjHTuS50,10062
|
23
|
+
novel_downloader/core/downloaders/qianbi.py,sha256=sqil69--GhAqfFzZxQG3ZeKZavWEy8qTcM0Li4FCJy4,12506
|
24
|
+
novel_downloader/core/downloaders/qidian.py,sha256=LEFx1F5GS62qpDKMa_z7CxT0txUEQ-vY51vgAEQG5o0,11924
|
25
|
+
novel_downloader/core/downloaders/registry.py,sha256=7Fahoix4SeWOgN5D0D8TSiXRsRX4XmQKuaDvFn7fK5s,1887
|
26
|
+
novel_downloader/core/downloaders/signals.py,sha256=fgiSH8iRqkNqyI7pZX-hfJEOMY1KbXB1lT49eSJyHqQ,1093
|
27
|
+
novel_downloader/core/exporters/__init__.py,sha256=Kobscd3cnOeXZg7M7trOoN_xmx-y517VN2Atsosx0LM,433
|
28
|
+
novel_downloader/core/exporters/base.py,sha256=kYUU2kMP3E1u0bczG4FCIogoJHlgKkRp7MdHtnsi4wI,8486
|
29
|
+
novel_downloader/core/exporters/epub_util.py,sha256=eFig6ZNCl95NkbLDmz8z-ZEmmJ9OECwlTZSfUwFVThU,6048
|
30
|
+
novel_downloader/core/exporters/qidian.py,sha256=cRVrFhntaM0nXHZUzn40SzsFrUQakPBK9wRD06VpLOc,747
|
31
|
+
novel_downloader/core/exporters/registry.py,sha256=kWy6zxTwGQ8kBto0h3lNIDj2a0pdHPaTwJyldGalICA,1552
|
32
|
+
novel_downloader/core/exporters/txt_util.py,sha256=-pkwMFh-69FHEziTW4LiW3-u6f1GqV973F7zH8fXZxA,1987
|
33
|
+
novel_downloader/core/exporters/common/__init__.py,sha256=8qVMdtM_hLo3D3bMMQYYL10I0evHy1BgaceqOMTu9OE,259
|
34
|
+
novel_downloader/core/exporters/common/epub.py,sha256=OZV8KCE9otYLjlDKEogFQ5KElUAXGJwV5zSCtm59FOw,5961
|
35
|
+
novel_downloader/core/exporters/common/main_exporter.py,sha256=uBx67rBaeijZWt3cZDR7xipf-P_3ShyypZROxe8CjEQ,2165
|
36
|
+
novel_downloader/core/exporters/common/txt.py,sha256=Nzzo60ksECYkBvjSooZYPUFNbeD7hbz6jmTUSYVhHxk,4721
|
37
|
+
novel_downloader/core/exporters/linovelib/__init__.py,sha256=AFjdUyFalrU8n_OjxqYENZ5zVcfYPONgWbvFkI0Sgls,250
|
38
|
+
novel_downloader/core/exporters/linovelib/epub.py,sha256=BiYgX61lZdgYeipnNuzMHmAjjSXnofs1eKoPR9UduDg,10703
|
39
|
+
novel_downloader/core/exporters/linovelib/main_exporter.py,sha256=qFMKfPobNWTDzW8CLr6FcNpkdqAuH5PMjqAQA_Jb78w,1938
|
40
|
+
novel_downloader/core/exporters/linovelib/txt.py,sha256=5k7ZKVPOtalOeTr9xFca3zkofNKa4Wg0NdKk-lujC58,4433
|
41
|
+
novel_downloader/core/fetchers/__init__.py,sha256=V0BXwjULLODbS69YRRfvivEB4HVdUxo4tFMZ44qT6mU,1982
|
42
|
+
novel_downloader/core/fetchers/aaatxt.py,sha256=fupx1NLqHc3PH61_cSbZ0lafkmLmcs2R3FI5z56YyC4,2417
|
43
|
+
novel_downloader/core/fetchers/b520.py,sha256=IuIci62rHLtad3eIU-iR9be56vw7w3W4ctpvQpkOg3I,2458
|
44
|
+
novel_downloader/core/fetchers/base.py,sha256=33PCJH08hnkEo1szJdpX0FpL_karIo1QgGp3ID0972E,13179
|
45
|
+
novel_downloader/core/fetchers/biquyuedu.py,sha256=Q1jR4lvAOVfE9HahHAWpSXdPcTUAJD5SpO_82b3xVKo,2473
|
46
|
+
novel_downloader/core/fetchers/dxmwx.py,sha256=JDbUHCOxuvXA6kNxoJLVUgiOOPSbemes-g6TZX6I1uE,3442
|
47
|
+
novel_downloader/core/fetchers/eightnovel.py,sha256=gtQZshH_VMu6HTWOH-CcdCGkkV3PlpX4bXDxAjMxUlE,4322
|
48
|
+
novel_downloader/core/fetchers/esjzone.py,sha256=8vNQX58iYIcrwQINcC0XdP0bKfdoxUPRotmLOkAF5D0,7594
|
49
|
+
novel_downloader/core/fetchers/guidaye.py,sha256=e7we3KSrzCTEbYv8bre3pyU78OsdNYbjA03V2D5S7Eg,2535
|
50
|
+
novel_downloader/core/fetchers/hetushu.py,sha256=v7cxBy6GrQIC9O8LqGHDyJlVB2oCwREbO3A-qI3vzyw,2773
|
51
|
+
novel_downloader/core/fetchers/i25zw.py,sha256=fcCFqSfPgFhgdk7DrTxPqgpJDDzmP79VzoverAwFNvw,3086
|
52
|
+
novel_downloader/core/fetchers/ixdzs8.py,sha256=DFI6qPu_xkb6zMLi1KkBZFxCbAvQzVPb8SHlAARoRGI,3530
|
53
|
+
novel_downloader/core/fetchers/jpxs123.py,sha256=BPomuCmvOGlKQZ-SR6TonB9YjTCFiPbdflkB-nw_-V0,3120
|
54
|
+
novel_downloader/core/fetchers/lewenn.py,sha256=W_2DiHsfeTNs5d2ZkjO907OMQyQVXGAL-nUJ-Ml0n2k,2457
|
55
|
+
novel_downloader/core/fetchers/linovelib.py,sha256=5oUji6UkM0XXkDmOPiWelhSo6C0NkD7JeJvNxVQG7IY,6136
|
56
|
+
novel_downloader/core/fetchers/piaotia.py,sha256=DPtBSBFmrU3Y3ha7u83sx5S9GXTpNxFj5VZtsP6pkmk,3220
|
57
|
+
novel_downloader/core/fetchers/qbtr.py,sha256=EGw8p-J01wu1iJmz4Vm6wjXPuTgVt6Y4BIY8Aun7zsQ,3094
|
58
|
+
novel_downloader/core/fetchers/qianbi.py,sha256=sWMpF78ZXBBVYs-DdUp0LG7khO84AMJzFYkDu_GSqfA,3174
|
59
|
+
novel_downloader/core/fetchers/qidian.py,sha256=pk_uLdCCnCYRD_OaJNhR17UCwmI6iH7mKMeKfEofgZY,10330
|
60
|
+
novel_downloader/core/fetchers/quanben5.py,sha256=TkLFJOfpMOpKNkq2D9R0HI33zzAV-KuHccXquu6CZZ0,2776
|
61
|
+
novel_downloader/core/fetchers/rate_limiter.py,sha256=Z05dZOATi_-Su14qRmhVinArfLJ0QWpzgDShs2jHSR8,2714
|
62
|
+
novel_downloader/core/fetchers/registry.py,sha256=z9DDTUjc2r-Xiq3MqaPfV_3EmQBXr2TK_G8eARnblkA,1580
|
63
|
+
novel_downloader/core/fetchers/sfacg.py,sha256=V4GM51JhH0MQl0RBw06XHXoJ_lPNS_2rqcreNhKM0OQ,5150
|
64
|
+
novel_downloader/core/fetchers/shencou.py,sha256=Ygb5WRyZJUzq8ex7edvDJGbgdWeV2N8_0P-wPcfYqKc,3269
|
65
|
+
novel_downloader/core/fetchers/shuhaige.py,sha256=mBG1xBMtjkFjBwpuY7KjIieJYPxlEyjDknXrYYyHaHo,2471
|
66
|
+
novel_downloader/core/fetchers/tongrenquan.py,sha256=kkpfUoqjldaBtWA9Kk5sDBI_ul2h8l6-uvugo-qE-mg,2547
|
67
|
+
novel_downloader/core/fetchers/ttkan.py,sha256=inxXEETJlyy2aw3kl6Z8ww_Trwx36u4EZOCjJrDfGeU,2812
|
68
|
+
novel_downloader/core/fetchers/wanbengo.py,sha256=9Qva9bbrzDdQn3qjGiOEgCjtdGIWRG2zXC5gJYmSdzI,2461
|
69
|
+
novel_downloader/core/fetchers/xiaoshuowu.py,sha256=nVF-dikPOsx3WUnjhUXdEASsW_lJiN0TVOSBXRsL6JI,3310
|
70
|
+
novel_downloader/core/fetchers/xiguashuwu.py,sha256=e_Gv5_GYBbq1vVvv9QTc0Nmp61xi2My66NoYbSZGE_M,5783
|
71
|
+
novel_downloader/core/fetchers/xs63b.py,sha256=7qyJLpmJ2H5oQOSsLqD-QoZMCOKtZiylVxg2qO8aMno,5216
|
72
|
+
novel_downloader/core/fetchers/xshbook.py,sha256=jCkarSZ5bknYTrDnY9dieKfX29wKwvfUyFdjWE9SeXw,2538
|
73
|
+
novel_downloader/core/fetchers/yamibo.py,sha256=d5F6EKXZfKjWkMqPGQO6sXmU9ki79YOHN4wdGIO4rsU,7573
|
74
|
+
novel_downloader/core/fetchers/yibige.py,sha256=CJO26gMj_36XQMFVVnXDr8aoTQAqBA6A5HTOMmrrdUc,3569
|
75
|
+
novel_downloader/core/interfaces/__init__.py,sha256=YwDOPw_UCjuAE5u_LpUYxXjOH4X2kNMXrmUoBa5jp2Q,490
|
76
|
+
novel_downloader/core/interfaces/downloader.py,sha256=nGY2LYCCBzrKhs612L5tevGG8kJp_XfCyKvqjXEIeoI,1763
|
77
|
+
novel_downloader/core/interfaces/exporter.py,sha256=R62GPGzfGQu0B-7nu6y-PTnYF_TkrGir3XG19AW6jNE,1649
|
78
|
+
novel_downloader/core/interfaces/fetcher.py,sha256=XZ320Fi72nDORQKFUBbtybWmQ2ZoJ63gpVXBurodOrQ,3669
|
79
|
+
novel_downloader/core/interfaces/parser.py,sha256=NzpKjh-P2IwNE0BUmaEKU49qhPNbLhodZMCj2uSkOkg,1317
|
80
|
+
novel_downloader/core/interfaces/searcher.py,sha256=1orneqFtwcqM5sFBKmhpWFbHk5bV7oEp0mN_77lgy6E,587
|
81
|
+
novel_downloader/core/parsers/__init__.py,sha256=VfGEMS0PUQLkmc32xiz7l5rCPgzuy3Vz-1ZDxaYNp1Q,1927
|
82
|
+
novel_downloader/core/parsers/aaatxt.py,sha256=1NCrhbbpd5FUi0ybMX2LYf6Sss4pY3eDXTXk7MEkrkk,3633
|
83
|
+
novel_downloader/core/parsers/b520.py,sha256=SUiY1IYOZmu-tY-owbQHMKUyDFxwwOI6bgdjyNw_daM,3254
|
84
|
+
novel_downloader/core/parsers/base.py,sha256=tdq7MuNezN5xwZJ5DUYKUOki9hisPJ_wyt9LdG3ocVo,4634
|
85
|
+
novel_downloader/core/parsers/biquyuedu.py,sha256=IpZfL2AC0oUq5Gx8iqwTH8sItxtzpxvDRKaMmtYf_xU,3867
|
86
|
+
novel_downloader/core/parsers/dxmwx.py,sha256=uj3tj36d8lnXbgFvmpHzrvv9oDYuMXWZCb0d8I32GfA,5006
|
87
|
+
novel_downloader/core/parsers/eightnovel.py,sha256=Yw9tt24SsAe3Y6xyXVgo1EUAs36_twPhoF1toUZZjAc,7290
|
88
|
+
novel_downloader/core/parsers/esjzone.py,sha256=vGcziiCmrkJeNO0BUBrFJOKg83k4buvysqInUVIJXJ4,7958
|
89
|
+
novel_downloader/core/parsers/guidaye.py,sha256=o1d987B5hkCEIVHYhszSavwKJFAErZVwpDaUPkSNUh4,3879
|
90
|
+
novel_downloader/core/parsers/hetushu.py,sha256=WUG4E9lvDJsa_l1xezYt0epPPJ4V9y_C4wwqWB8sxJs,4047
|
91
|
+
novel_downloader/core/parsers/i25zw.py,sha256=qILX6HQifu0hLJDNFc7XCqUNSQpfALhVgPC9jEGQt4g,4221
|
92
|
+
novel_downloader/core/parsers/ixdzs8.py,sha256=IyT9xoiyzghRuHg9-VASdEkmj-OMrrOBDWhjRNNmrVg,5690
|
93
|
+
novel_downloader/core/parsers/jpxs123.py,sha256=YwZAayPe_N2HJvioKifb3TJmk_EMsaRnPlknCCxHmrA,4211
|
94
|
+
novel_downloader/core/parsers/lewenn.py,sha256=YNk1Jl8eHwFFAAn-NyB1t0cVTZgl-Gkyy1SjGnKYSAU,4225
|
95
|
+
novel_downloader/core/parsers/linovelib.py,sha256=7d4nw6XowcRLGA_BY9q_3tJ8o19JS6_qAIl2vJoVelg,7083
|
96
|
+
novel_downloader/core/parsers/piaotia.py,sha256=VGj10yVGzNK_TwUmo-5tVbCgbQA2FlJDv67m-KMxfIo,6086
|
97
|
+
novel_downloader/core/parsers/qbtr.py,sha256=0sae3Ms68Z7XaHav7_5Eid8sqlW1VBn0zZsy1WmVu64,4241
|
98
|
+
novel_downloader/core/parsers/qianbi.py,sha256=ULRLFE-bwnHU8Eifa7egD-cNk_-ea4vyFSCZwGAVTWM,4811
|
99
|
+
novel_downloader/core/parsers/quanben5.py,sha256=wr8QgIYk8FBcJBwm_wjXDdG0yMnodHHzBqnaPn1JETE,3075
|
100
|
+
novel_downloader/core/parsers/registry.py,sha256=2L6yRew4hxN04UUB4xm4E4v8R5RUldawF-Xkg8nXBPI,1534
|
101
|
+
novel_downloader/core/parsers/sfacg.py,sha256=7FuiLgN2SuDTkVmClQe4I8oU35RuLlPEEAHLSLEWqwk,5598
|
102
|
+
novel_downloader/core/parsers/shencou.py,sha256=pdkBCU7n6NmNs64cD6jfbDtEHNSuGqLOiQaIYhLeNr8,6775
|
103
|
+
novel_downloader/core/parsers/shuhaige.py,sha256=rlHXcpKil8anKMi6OVvoPAqGuQdA15hMLlCuSr6C5tM,3128
|
104
|
+
novel_downloader/core/parsers/tongrenquan.py,sha256=y3ok9g-BzA2YVM4KqoNPPpclE0wdNL5mVY3GRQ9FshM,3399
|
105
|
+
novel_downloader/core/parsers/ttkan.py,sha256=_8nc6diogbb9uGHm_lXYJT-RHR9p76o7ARn4NPom2-E,3564
|
106
|
+
novel_downloader/core/parsers/wanbengo.py,sha256=boEnK1gLLpqmf5EUFY9gVEhBxqxYrVka9ou_mDGZ4co,6407
|
107
|
+
novel_downloader/core/parsers/xiaoshuowu.py,sha256=k8j0TY5t7s0n1f-FWuRTZ-eN3A8p-_xnKy7-kp2deK4,5328
|
108
|
+
novel_downloader/core/parsers/xiguashuwu.py,sha256=i_CpFKjfcGviOjT3fveDvDsaMmxHub9MOrCbWRySbH8,14448
|
109
|
+
novel_downloader/core/parsers/xs63b.py,sha256=A02abnMtsnWTomx-Hcfr97HFnNO38X9mmqKxHKrS610,5312
|
110
|
+
novel_downloader/core/parsers/xshbook.py,sha256=WwIGXEBAY8h-MLeApB1oVko_g3HF1Uj0X-Hko3TTrJ8,3995
|
111
|
+
novel_downloader/core/parsers/yamibo.py,sha256=B2ijBHCS0JW0I387LH8gDjevwakOE0RRKaKRsV4zo7A,5018
|
112
|
+
novel_downloader/core/parsers/yibige.py,sha256=K_nQ1SwVKLndgzlRvoTd2wd0tWXKb-T02c0sE6-bS5M,4846
|
113
|
+
novel_downloader/core/parsers/qidian/__init__.py,sha256=ScY9penE8b1m5HZGu6C1XwbzuqKbeGVCvli0J-xzzKs,173
|
114
|
+
novel_downloader/core/parsers/qidian/book_info_parser.py,sha256=RTg6Z2jaLEUVJXKzcdxG1rqBdAhu_gmxsq0zcD9vyAE,3043
|
115
|
+
novel_downloader/core/parsers/qidian/chapter_encrypted.py,sha256=eTIOTwlu_7DiAkul58tPOOlCSxMymcSfr_m4AlnkEdU,15386
|
116
|
+
novel_downloader/core/parsers/qidian/chapter_normal.py,sha256=JitsHCz9FSvslAbFLPdtF0FNr5V311Uj7K0zq7MUDwA,3738
|
117
|
+
novel_downloader/core/parsers/qidian/chapter_router.py,sha256=foVMlWtE-qUOvJD_4EDiuAVaNkFdeV_ZTCvS5IL7Orc,1957
|
118
|
+
novel_downloader/core/parsers/qidian/main_parser.py,sha256=w6s9RkcatA34chyzi4buFKew4-bIexlSHAIR1zBGIxE,2754
|
119
|
+
novel_downloader/core/parsers/qidian/utils/__init__.py,sha256=FuV7f-h76sk1g5BaqWOhsgh9uTykXA7MZ97kmkOB_lY,664
|
120
|
+
novel_downloader/core/parsers/qidian/utils/decryptor_fetcher.py,sha256=idwsRx9Er5SRb3b_tmKwNxfOmUWR0QwpVf_zpDRJxuw,4687
|
121
|
+
novel_downloader/core/parsers/qidian/utils/fontmap_recover.py,sha256=kuEPRnGn4GHVh3uQ8u8sg55LUaYYuavftxO9gyAR3ZM,4918
|
122
|
+
novel_downloader/core/parsers/qidian/utils/helpers.py,sha256=_HAOWW3HHtq2FtYlYU1FIebZdRmCo1Rfmh_WC9p_ZLU,3325
|
123
|
+
novel_downloader/core/parsers/qidian/utils/node_decryptor.py,sha256=MQQUI9nNpM23K0sA9bRVhs7pbQX6OvMc1NgvM28gHsU,5949
|
124
|
+
novel_downloader/core/searchers/__init__.py,sha256=pCCK1rxfQP8djdsRnpxoVgANe6CTpbP7DNbNond_1P4,1379
|
125
|
+
novel_downloader/core/searchers/aaatxt.py,sha256=KHaX1dpDBaAJz-_7UlaTtnMbFlTplWHaFyOfCkn4gX4,3717
|
126
|
+
novel_downloader/core/searchers/b520.py,sha256=L2fkf1_LxUREdPJJXbSN5c00EXwWVeMwWpXKN144k9c,2621
|
127
|
+
novel_downloader/core/searchers/base.py,sha256=dwXF5KwU1GAnKo5BY5H6X5xkpDiP72KpGd4Q-dn9DFg,5166
|
128
|
+
novel_downloader/core/searchers/dxmwx.py,sha256=ZaeFSU2T3Yl9x6hquila7cF4wYdwm9d82cTjFT9byCQ,3225
|
129
|
+
novel_downloader/core/searchers/eightnovel.py,sha256=xJKPdAeyhNLn0U8Ip_DY0BJOiTT3s5ajBz0nh4SaKY0,2528
|
130
|
+
novel_downloader/core/searchers/esjzone.py,sha256=zw7bQalTfYjp9an0Ghk0ZDsWEOOh-fNsR4Lsoi4u7xA,3199
|
131
|
+
novel_downloader/core/searchers/hetushu.py,sha256=qhX6-QdvzPCXHh7hO6tHXFd3dpbcff_1PL7YvqgOQho,2829
|
132
|
+
novel_downloader/core/searchers/i25zw.py,sha256=1h3IZxjFO8XirDYN7x7fc96XjuspuTdkAUNHf1xVeBM,2827
|
133
|
+
novel_downloader/core/searchers/ixdzs8.py,sha256=Q-tZk5czA-wTSDQ4jnJEITfWWnsMXre5nPTjwJxGl6s,3454
|
134
|
+
novel_downloader/core/searchers/jpxs123.py,sha256=BeEa7wkE0KGwZ3HPIKSh7I8wpF_V8Z2L87eWjzphzwk,3345
|
135
|
+
novel_downloader/core/searchers/piaotia.py,sha256=dGueBh819EvxgL-cyBITud3DGXJhebhZkExVxcPcH6E,3510
|
136
|
+
novel_downloader/core/searchers/qbtr.py,sha256=yokdCqlhlfJYy6HDhMZS4nGNzHGYwTy36glXq_AlSDw,3231
|
137
|
+
novel_downloader/core/searchers/qianbi.py,sha256=UK7znw9RZkhpsDTy3_wavi3aBLnaLVUGd9E_Epq5c20,5404
|
138
|
+
novel_downloader/core/searchers/quanben5.py,sha256=xDKtDsZ8e4bhmA9rIG-cdIkbtnaUUxSxJRqZrad1u3g,4265
|
139
|
+
novel_downloader/core/searchers/registry.py,sha256=VFtvtbAqLBSYO7CvXrVya-85t-jOUmyth30wls-6noY,2441
|
140
|
+
novel_downloader/core/searchers/shuhaige.py,sha256=8XW39aIdyHzWwG8r_hsr7YhOEGQLLTIXObe2HlAW8D4,3841
|
141
|
+
novel_downloader/core/searchers/tongrenquan.py,sha256=NE0BN4gutipfBPMm5TJP3YyI29ce6ERpmC1mqfQNgdc,3471
|
142
|
+
novel_downloader/core/searchers/ttkan.py,sha256=Y-qjePD7zQx8RUgASTuz4yu5fzT5MOJg7Qh9_SaP1z0,2851
|
143
|
+
novel_downloader/core/searchers/xiaoshuowu.py,sha256=gAS3OpoMwfksEtlXPL5XPrfD7KVprl8YA7HGn3gGANg,4132
|
144
|
+
novel_downloader/core/searchers/xiguashuwu.py,sha256=YWxOQpXUhMMsgxt7zc51rtdbe6mn9yv5Vzeg63OCJlQ,2952
|
145
|
+
novel_downloader/core/searchers/xs63b.py,sha256=T4QUQphYFvnbnENxFbYVNtZMi2QhXypxOJU-FjjVYwU,3443
|
146
|
+
novel_downloader/locales/en.json,sha256=T0Apt75RC9Uua6quGckZPMzkh0XB3uy_JkXzRxwRllk,3948
|
147
|
+
novel_downloader/locales/zh.json,sha256=LU691ypbrR903ie2BKHLgI1U4G6_fYpT4kcztMYO5-8,3785
|
148
|
+
novel_downloader/models/__init__.py,sha256=U7ks1ieTm-VzmH3NcH0Fym7c1zfywIZcBGPOUBWuVLo,690
|
149
|
+
novel_downloader/models/book.py,sha256=kim6Tt0pDDvOhGx6jnRp28BP79yhhsyNiUp56I0cAP8,875
|
150
|
+
novel_downloader/models/config.py,sha256=QNiw1XhbzjAYbfLAZ1bTIQ21nciNxnYszGVtXVG3Uk0,2211
|
151
|
+
novel_downloader/models/login.py,sha256=VpTKfistRmlEJ67bzRpnAeQFBqs8R7VeGXZ74BZvTF0,355
|
152
|
+
novel_downloader/models/search.py,sha256=NSAXbQJvUY1Zdp1HfAt6JJ-mTFw2aX4-Je-JLeMG8ZY,351
|
153
|
+
novel_downloader/resources/config/settings.toml,sha256=uHgL5sUBPIz17Jwlc8WPQZ6Vn8PjatZ3OIiDaS0f-h8,3081
|
154
|
+
novel_downloader/resources/css_styles/intro.css,sha256=Nqzp-A5we92d90CCiGL8h2FeuMnCz-G0TLevMF_Pl2U,1271
|
155
|
+
novel_downloader/resources/css_styles/main.css,sha256=1nsDTr698eY3furWDHuQMDKP1Vqd2h5x40eJMZpktNE,559
|
156
|
+
novel_downloader/resources/images/volume_border.png,sha256=2dEVimnTHKOfLMhi7bhkh_5joWNnrqg8duomLSNOZx4,28613
|
157
|
+
novel_downloader/resources/js_scripts/qidian_decrypt_node.js,sha256=spNrk_gXI7pPW9abr4XGc2LASMe1UuN4BUe4cH24L8s,2195
|
158
|
+
novel_downloader/resources/json/linovelib_font_map.json,sha256=F1IlEcvXGcagnZCu4Gw2vQ2NLnhy6cJOLhabukqnftw,67854
|
159
|
+
novel_downloader/resources/json/xiguashuwu.json,sha256=AT8KSFBWuiHj4Ggz3O1LqED0Tw22k0A4-V4OziHbqfo,16471
|
160
|
+
novel_downloader/utils/__init__.py,sha256=Mu3FyLH_9wp7zHtIHfSTWvdNkXYzOAHYMoGMDJKk4cg,920
|
161
|
+
novel_downloader/utils/chapter_storage.py,sha256=2l5mRHYQd7rarBB4UeUo4Lwood-cqY0LHvXb2KPyFqQ,10365
|
162
|
+
novel_downloader/utils/constants.py,sha256=KeTL_MygD0VdvEUeDFaHuqITIzU_LdD5huNQHC7uCDM,3312
|
163
|
+
novel_downloader/utils/cookies.py,sha256=diWQj-cMvH7eT2P1X-lzGzsWLcfhaPW2wvMVnwCQwkQ,1735
|
164
|
+
novel_downloader/utils/fontocr.py,sha256=gaNH4isYY7zFE--gqtM1YN6bIjWTA-G-60XCAsbja8o,6494
|
165
|
+
novel_downloader/utils/i18n.py,sha256=86Wz4zT0_YTnmOSS6cliqO_uMgJJdfC-hNLyqZnXgvU,1050
|
166
|
+
novel_downloader/utils/logger.py,sha256=exOM7pUb8n_AchmIxLNlaZySqsMQjViL4KEMilZ8t04,3013
|
167
|
+
novel_downloader/utils/network.py,sha256=UzqK6xuQQfV4gFFbmNgy09L3QAlqX-CFeF6urfKRJyg,4675
|
168
|
+
novel_downloader/utils/state.py,sha256=QHfvS9CrO08fRZLNM0B_s0n5XIz7ap20NdAfesQI0Ek,1852
|
169
|
+
novel_downloader/utils/crypto_utils/__init__.py,sha256=33j0dezsuX3LhkfXj-FImEgU7G1IVmjjZW-4FrDDT0o,196
|
170
|
+
novel_downloader/utils/crypto_utils/aes_util.py,sha256=46vKY1CxEnHgJE9t2CRzsrGyUoLRjBysCJCeSF5AiqU,2878
|
171
|
+
novel_downloader/utils/crypto_utils/aes_v1.py,sha256=_jW86_WyUTJfOzqYbZ6QvNPF-V8YRaqaOsyLjMsO610,34247
|
172
|
+
novel_downloader/utils/crypto_utils/aes_v2.py,sha256=OAsMnsztkJilqo8jM6nkrPMyujPqgGhohd-TcwW6fVA,48945
|
173
|
+
novel_downloader/utils/crypto_utils/rc4.py,sha256=3h9PBLraTow7TGiV60jI3zh4ZQH2ohaizJ8LThB55Pk,1934
|
174
|
+
novel_downloader/utils/epub/__init__.py,sha256=SaygR4gIuUWhFxgmmSzv4unRMxNMZPyIX4x2-_26yvc,722
|
175
|
+
novel_downloader/utils/epub/builder.py,sha256=apuzG7UzYcEEreMpf9Dez06-laQQg6EGGvl3PQGpBFA,11664
|
176
|
+
novel_downloader/utils/epub/constants.py,sha256=3fjJIr-5msO1sV2hjYHBiUpEvm0mQm5AsUlMOR03O_M,3080
|
177
|
+
novel_downloader/utils/epub/documents.py,sha256=8IgznHBLzaLgzxWJCHGDM4QuE8JdEDI7T3zuA9IHAbE,9868
|
178
|
+
novel_downloader/utils/epub/models.py,sha256=x9la6RKmhOTUkcsLSzM7qzThmRbyWZxqaRf39kY6IPo,2479
|
179
|
+
novel_downloader/utils/epub/utils.py,sha256=Jg1Xjii6KMVNMKbp6IkWxbwq_ILaEpgqp2vHN8i7P40,5084
|
180
|
+
novel_downloader/utils/file_utils/__init__.py,sha256=PIE96UKkI73wNr5v8kbP159BIbkEwsOQa9iEFr5RGUw,366
|
181
|
+
novel_downloader/utils/file_utils/io.py,sha256=Q5s2p4-HIAEV1_PLrpmHkGuXGVYPWkKoHOwjRVgru-w,3397
|
182
|
+
novel_downloader/utils/file_utils/normalize.py,sha256=v0ZRGcuZ9KMj0GTgAMPCwSBnYkEz8LCnW5dJYjf_jQk,2023
|
183
|
+
novel_downloader/utils/file_utils/sanitize.py,sha256=2hoBAleu6n3VhL6IP1df2x0-7mLVAxg1ef6Ogg-ZLu4,1922
|
184
|
+
novel_downloader/utils/text_utils/__init__.py,sha256=cr0HCvgQFJE2ZEXqjkkmrOA7PnH50dKegrjdpIytUJs,601
|
185
|
+
novel_downloader/utils/text_utils/diff_display.py,sha256=5zvVtzsLbRxmUnn_dWUsXFaq6hch02OlOpqKYP8GB3g,2491
|
186
|
+
novel_downloader/utils/text_utils/numeric_conversion.py,sha256=RJ3L5GBxgNEQYJ7xFoihLVsjGcObBfpUAk_Gz5MxlkA,6627
|
187
|
+
novel_downloader/utils/text_utils/text_cleaner.py,sha256=9-Ymi6H9BDBv1Sjk2gE9fCG4G3A8Lut-n2sfAyeyH2I,6124
|
188
|
+
novel_downloader/utils/text_utils/truncate_utils.py,sha256=GeQCczW0jAHSeDMxx0qCRtnvT-CH1-KjqJq2JBpIv7U,1483
|
189
|
+
novel_downloader/utils/time_utils/__init__.py,sha256=XbBeSbpNqiJy7Lsv-_udz29hPnIY53F0Drbuh730y44,331
|
190
|
+
novel_downloader/utils/time_utils/datetime_utils.py,sha256=ECidI5yvWVia8BWWLu7U0O0YYMIKgJwzWQmOuA_un3U,4499
|
191
|
+
novel_downloader/utils/time_utils/sleep_utils.py,sha256=g31qs1Uyng8GBhyqrvMpxBK2Xqr054xDlA1g8X5cZhk,3062
|
192
|
+
novel_downloader/web/__init__.py,sha256=ga8qRQhYcGEiL0WKhSSyldLxkOEfrq-UU71T7MYv7EU,174
|
193
|
+
novel_downloader/web/main.py,sha256=p8iq5VejxuvcJsgM20qDahBsrxK4PeL96O7_65Fa3JI,1779
|
194
|
+
novel_downloader/web/components/__init__.py,sha256=fxBI7rpAQvdZU3obR6_-bFqgmA7nzvRpW05Rw3b4jp8,193
|
195
|
+
novel_downloader/web/components/navigation.py,sha256=m-rjbNRlYjqXsu2dq5PdCzpqy7oW6_otra2ZufRsh1c,1156
|
196
|
+
novel_downloader/web/pages/__init__.py,sha256=KP_aH8y8dtCeRze8jDJ4tC3Ft7UTGhlW8ZKDdKPdwcM,383
|
197
|
+
novel_downloader/web/pages/download.py,sha256=Qqq4GAZaiMRAuCjBvWiof6kwzSz0yrAj5LWN5EEldqo,2600
|
198
|
+
novel_downloader/web/pages/progress.py,sha256=whWduqLvQ1PPZpDNVfvFCVaFgFhD87LT4CDb8JuqD_w,5207
|
199
|
+
novel_downloader/web/pages/search.py,sha256=Tgy4XgMoD2tovkGvSj9mMWBzWtO_FUGQATHEpzCSgx0,10235
|
200
|
+
novel_downloader/web/services/__init__.py,sha256=kLW0uyqudnlHtSsMrrghmL6P1-VDrseggNdB3cR5jLA,316
|
201
|
+
novel_downloader/web/services/client_dialog.py,sha256=JwYV8bjxPxLQsuheC8rk_jaeODolz5X9Wo64MsXZoyc,5679
|
202
|
+
novel_downloader/web/services/cred_broker.py,sha256=_R2Szqg5qRBHrFujTlPxrrMpQsnfNozjLUxJ5HhD8_c,2939
|
203
|
+
novel_downloader/web/services/cred_models.py,sha256=8nXbVoAIz3QokctrCVm-8lSnKgCIFhMM6TuaNq6bFGU,846
|
204
|
+
novel_downloader/web/services/task_manager.py,sha256=V6Pp92ZB9aNlliZbdwcaNUojioY1_BGAMGCo9Okob7w,8624
|
205
|
+
novel_downloader-2.0.0.dist-info/licenses/LICENSE,sha256=XgmnH0mBf-qEiizoVAfJQAKzPB9y3rBa-ni7M0Aqv4A,1066
|
206
|
+
novel_downloader-2.0.0.dist-info/METADATA,sha256=V1Xc8HvvlY-J2S6aqP2Hll5vVxZs3aUwrPVQXOGsXV0,6454
|
207
|
+
novel_downloader-2.0.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
208
|
+
novel_downloader-2.0.0.dist-info/entry_points.txt,sha256=nIgnurS4J6_ce3oIBFV87I1pPwBofuRQvxkoRGn4yEU,112
|
209
|
+
novel_downloader-2.0.0.dist-info/top_level.txt,sha256=hP4jYWM2LTm1jxsW4hqEB8N0dsRvldO2QdhggJT917I,17
|
210
|
+
novel_downloader-2.0.0.dist-info/RECORD,,
|
@@ -1,94 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
novel_downloader.config.site_rules
|
4
|
-
----------------------------------
|
5
|
-
|
6
|
-
Handles loading, saving, and caching of site-specific scraping rules.
|
7
|
-
|
8
|
-
This module provides functionality to:
|
9
|
-
- Load site rules from JSON, YAML, or TOML formats.
|
10
|
-
- Save rules into a standard JSON format.
|
11
|
-
"""
|
12
|
-
|
13
|
-
import json
|
14
|
-
import logging
|
15
|
-
from pathlib import Path
|
16
|
-
|
17
|
-
from novel_downloader.models import SiteRulesDict
|
18
|
-
from novel_downloader.utils.cache import cached_load_config
|
19
|
-
from novel_downloader.utils.constants import SITE_RULES_FILE
|
20
|
-
from novel_downloader.utils.file_utils import save_as_json
|
21
|
-
|
22
|
-
logger = logging.getLogger(__name__)
|
23
|
-
|
24
|
-
|
25
|
-
def save_rules_as_json(
|
26
|
-
source_path: str | Path, output_path: str | Path = SITE_RULES_FILE
|
27
|
-
) -> None:
|
28
|
-
"""
|
29
|
-
Load rules from source_path (toml, yaml, or json) and save as JSON.
|
30
|
-
|
31
|
-
:param source_path: Path to the source rules file
|
32
|
-
(supports .toml, .yaml, .yml, .json).
|
33
|
-
:param output_path: Path where the JSON output will be saved.
|
34
|
-
Defaults to SITE_RULES_FILE.
|
35
|
-
:raises FileNotFoundError: If the source_path does not exist.
|
36
|
-
:raises ValueError: If the source file format is not supported.
|
37
|
-
:raises Exception: If file loading or saving fails.
|
38
|
-
"""
|
39
|
-
TAG = "[Config]"
|
40
|
-
source_path = Path(source_path)
|
41
|
-
output_path = Path(output_path)
|
42
|
-
|
43
|
-
if not source_path.exists():
|
44
|
-
raise FileNotFoundError(f"Source file {source_path} not found.")
|
45
|
-
|
46
|
-
suffix = source_path.suffix.lower()
|
47
|
-
|
48
|
-
logger.debug("%s Loading rules from %s (format: %s)", TAG, source_path, suffix)
|
49
|
-
|
50
|
-
try:
|
51
|
-
if suffix == ".toml":
|
52
|
-
import tomllib
|
53
|
-
|
54
|
-
with source_path.open("rb") as f:
|
55
|
-
rules_data = tomllib.load(f)
|
56
|
-
elif suffix in {".yaml", ".yml"}:
|
57
|
-
import yaml
|
58
|
-
|
59
|
-
with source_path.open("r", encoding="utf-8") as f:
|
60
|
-
rules_data = yaml.safe_load(f)
|
61
|
-
elif suffix == ".json":
|
62
|
-
with source_path.open("r", encoding="utf-8") as f:
|
63
|
-
rules_data = json.load(f)
|
64
|
-
else:
|
65
|
-
raise ValueError(f"Unsupported input format: {suffix}")
|
66
|
-
|
67
|
-
except Exception as e:
|
68
|
-
logger.error("%s Failed to load rules from %s: %s", TAG, source_path, str(e))
|
69
|
-
raise
|
70
|
-
|
71
|
-
logger.info("%s Saving rules to %s as JSON", TAG, output_path)
|
72
|
-
|
73
|
-
save_as_json(rules_data, output_path)
|
74
|
-
return
|
75
|
-
|
76
|
-
|
77
|
-
@cached_load_config
|
78
|
-
def load_site_rules(json_path: str | Path = SITE_RULES_FILE) -> SiteRulesDict:
|
79
|
-
"""
|
80
|
-
Loads site scraping rules from a JSON file and caches the result for future access.
|
81
|
-
|
82
|
-
:param json_path: Path to the site rules JSON file. Defaults to SITE_RULES_FILE.
|
83
|
-
:return: A dictionary containing all site-specific scraping rules.
|
84
|
-
"""
|
85
|
-
json_path = Path(json_path)
|
86
|
-
site_rules: SiteRulesDict = {}
|
87
|
-
|
88
|
-
if not json_path.exists():
|
89
|
-
return site_rules
|
90
|
-
|
91
|
-
with json_path.open("r", encoding="utf-8") as f:
|
92
|
-
site_rules = json.load(f)
|
93
|
-
|
94
|
-
return site_rules
|
@@ -1,25 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
novel_downloader.core.downloaders.biquge
|
4
|
-
----------------------------------------
|
5
|
-
|
6
|
-
"""
|
7
|
-
|
8
|
-
from novel_downloader.core.downloaders.common import CommonDownloader
|
9
|
-
from novel_downloader.core.interfaces import (
|
10
|
-
FetcherProtocol,
|
11
|
-
ParserProtocol,
|
12
|
-
)
|
13
|
-
from novel_downloader.models import DownloaderConfig
|
14
|
-
|
15
|
-
|
16
|
-
class BiqugeDownloader(CommonDownloader):
|
17
|
-
""""""
|
18
|
-
|
19
|
-
def __init__(
|
20
|
-
self,
|
21
|
-
fetcher: FetcherProtocol,
|
22
|
-
parser: ParserProtocol,
|
23
|
-
config: DownloaderConfig,
|
24
|
-
):
|
25
|
-
super().__init__(fetcher, parser, config, "biquge")
|
@@ -1,25 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
novel_downloader.core.downloaders.esjzone
|
4
|
-
-----------------------------------------
|
5
|
-
|
6
|
-
"""
|
7
|
-
|
8
|
-
from novel_downloader.core.downloaders.common import CommonDownloader
|
9
|
-
from novel_downloader.core.interfaces import (
|
10
|
-
FetcherProtocol,
|
11
|
-
ParserProtocol,
|
12
|
-
)
|
13
|
-
from novel_downloader.models import DownloaderConfig
|
14
|
-
|
15
|
-
|
16
|
-
class EsjzoneDownloader(CommonDownloader):
|
17
|
-
""""""
|
18
|
-
|
19
|
-
def __init__(
|
20
|
-
self,
|
21
|
-
fetcher: FetcherProtocol,
|
22
|
-
parser: ParserProtocol,
|
23
|
-
config: DownloaderConfig,
|
24
|
-
):
|
25
|
-
super().__init__(fetcher, parser, config, "esjzone")
|
@@ -1,25 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
novel_downloader.core.downloaders.linovelib
|
4
|
-
-------------------------------------------
|
5
|
-
|
6
|
-
"""
|
7
|
-
|
8
|
-
from novel_downloader.core.downloaders.common import CommonDownloader
|
9
|
-
from novel_downloader.core.interfaces import (
|
10
|
-
FetcherProtocol,
|
11
|
-
ParserProtocol,
|
12
|
-
)
|
13
|
-
from novel_downloader.models import DownloaderConfig
|
14
|
-
|
15
|
-
|
16
|
-
class LinovelibDownloader(CommonDownloader):
|
17
|
-
""""""
|
18
|
-
|
19
|
-
def __init__(
|
20
|
-
self,
|
21
|
-
fetcher: FetcherProtocol,
|
22
|
-
parser: ParserProtocol,
|
23
|
-
config: DownloaderConfig,
|
24
|
-
):
|
25
|
-
super().__init__(fetcher, parser, config, "linovelib")
|
@@ -1,25 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
novel_downloader.core.downloaders.sfacg
|
4
|
-
---------------------------------------
|
5
|
-
|
6
|
-
"""
|
7
|
-
|
8
|
-
from novel_downloader.core.downloaders.common import CommonDownloader
|
9
|
-
from novel_downloader.core.interfaces import (
|
10
|
-
FetcherProtocol,
|
11
|
-
ParserProtocol,
|
12
|
-
)
|
13
|
-
from novel_downloader.models import DownloaderConfig
|
14
|
-
|
15
|
-
|
16
|
-
class SfacgDownloader(CommonDownloader):
|
17
|
-
""""""
|
18
|
-
|
19
|
-
def __init__(
|
20
|
-
self,
|
21
|
-
fetcher: FetcherProtocol,
|
22
|
-
parser: ParserProtocol,
|
23
|
-
config: DownloaderConfig,
|
24
|
-
):
|
25
|
-
super().__init__(fetcher, parser, config, "sfacg")
|
@@ -1,25 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
novel_downloader.core.downloaders.yamibo
|
4
|
-
----------------------------------------
|
5
|
-
|
6
|
-
"""
|
7
|
-
|
8
|
-
from novel_downloader.core.downloaders.common import CommonDownloader
|
9
|
-
from novel_downloader.core.interfaces import (
|
10
|
-
FetcherProtocol,
|
11
|
-
ParserProtocol,
|
12
|
-
)
|
13
|
-
from novel_downloader.models import DownloaderConfig
|
14
|
-
|
15
|
-
|
16
|
-
class YamiboDownloader(CommonDownloader):
|
17
|
-
""""""
|
18
|
-
|
19
|
-
def __init__(
|
20
|
-
self,
|
21
|
-
fetcher: FetcherProtocol,
|
22
|
-
parser: ParserProtocol,
|
23
|
-
config: DownloaderConfig,
|
24
|
-
):
|
25
|
-
super().__init__(fetcher, parser, config, "yamibo")
|
@@ -1,25 +0,0 @@
|
|
1
|
-
#!/usr/bin/env python3
|
2
|
-
"""
|
3
|
-
novel_downloader.core.exporters.biquge
|
4
|
-
--------------------------------------
|
5
|
-
|
6
|
-
"""
|
7
|
-
|
8
|
-
from novel_downloader.models import ExporterConfig
|
9
|
-
|
10
|
-
from .common import CommonExporter
|
11
|
-
|
12
|
-
|
13
|
-
class BiqugeExporter(CommonExporter):
|
14
|
-
def __init__(
|
15
|
-
self,
|
16
|
-
config: ExporterConfig,
|
17
|
-
):
|
18
|
-
super().__init__(
|
19
|
-
config,
|
20
|
-
site="biquge",
|
21
|
-
chap_folders=["chapters"],
|
22
|
-
)
|
23
|
-
|
24
|
-
|
25
|
-
__all__ = ["BiqugeExporter"]
|