novel-downloader 1.5.0__py3-none-any.whl → 2.0.1__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.
Files changed (248) hide show
  1. novel_downloader/__init__.py +1 -1
  2. novel_downloader/cli/__init__.py +1 -3
  3. novel_downloader/cli/clean.py +21 -88
  4. novel_downloader/cli/config.py +26 -21
  5. novel_downloader/cli/download.py +79 -66
  6. novel_downloader/cli/export.py +17 -21
  7. novel_downloader/cli/main.py +1 -1
  8. novel_downloader/cli/search.py +62 -65
  9. novel_downloader/cli/ui.py +156 -0
  10. novel_downloader/config/__init__.py +8 -5
  11. novel_downloader/config/adapter.py +206 -209
  12. novel_downloader/config/{loader.py → file_io.py} +53 -26
  13. novel_downloader/core/__init__.py +5 -5
  14. novel_downloader/core/archived/deqixs/fetcher.py +115 -0
  15. novel_downloader/core/archived/deqixs/parser.py +132 -0
  16. novel_downloader/core/archived/deqixs/searcher.py +89 -0
  17. novel_downloader/core/{searchers/qidian.py → archived/qidian/searcher.py} +12 -20
  18. novel_downloader/core/archived/wanbengo/searcher.py +98 -0
  19. novel_downloader/core/archived/xshbook/searcher.py +93 -0
  20. novel_downloader/core/downloaders/__init__.py +3 -24
  21. novel_downloader/core/downloaders/base.py +49 -23
  22. novel_downloader/core/downloaders/common.py +191 -137
  23. novel_downloader/core/downloaders/qianbi.py +187 -146
  24. novel_downloader/core/downloaders/qidian.py +187 -141
  25. novel_downloader/core/downloaders/registry.py +4 -2
  26. novel_downloader/core/downloaders/signals.py +46 -0
  27. novel_downloader/core/exporters/__init__.py +3 -20
  28. novel_downloader/core/exporters/base.py +33 -37
  29. novel_downloader/core/exporters/common/__init__.py +1 -2
  30. novel_downloader/core/exporters/common/epub.py +15 -10
  31. novel_downloader/core/exporters/common/main_exporter.py +19 -12
  32. novel_downloader/core/exporters/common/txt.py +17 -12
  33. novel_downloader/core/exporters/epub_util.py +59 -29
  34. novel_downloader/core/exporters/linovelib/__init__.py +1 -0
  35. novel_downloader/core/exporters/linovelib/epub.py +23 -25
  36. novel_downloader/core/exporters/linovelib/main_exporter.py +8 -12
  37. novel_downloader/core/exporters/linovelib/txt.py +20 -14
  38. novel_downloader/core/exporters/qidian.py +2 -8
  39. novel_downloader/core/exporters/registry.py +4 -2
  40. novel_downloader/core/exporters/txt_util.py +7 -7
  41. novel_downloader/core/fetchers/__init__.py +54 -48
  42. novel_downloader/core/fetchers/aaatxt.py +83 -0
  43. novel_downloader/core/fetchers/{biquge/session.py → b520.py} +6 -11
  44. novel_downloader/core/fetchers/{base/session.py → base.py} +37 -46
  45. novel_downloader/core/fetchers/{biquge/browser.py → biquyuedu.py} +12 -17
  46. novel_downloader/core/fetchers/dxmwx.py +110 -0
  47. novel_downloader/core/fetchers/eightnovel.py +139 -0
  48. novel_downloader/core/fetchers/{esjzone/session.py → esjzone.py} +19 -12
  49. novel_downloader/core/fetchers/guidaye.py +85 -0
  50. novel_downloader/core/fetchers/hetushu.py +92 -0
  51. novel_downloader/core/fetchers/{qianbi/browser.py → i25zw.py} +19 -28
  52. novel_downloader/core/fetchers/ixdzs8.py +113 -0
  53. novel_downloader/core/fetchers/jpxs123.py +101 -0
  54. novel_downloader/core/fetchers/lewenn.py +83 -0
  55. novel_downloader/core/fetchers/{linovelib/session.py → linovelib.py} +12 -13
  56. novel_downloader/core/fetchers/piaotia.py +105 -0
  57. novel_downloader/core/fetchers/qbtr.py +101 -0
  58. novel_downloader/core/fetchers/{qianbi/session.py → qianbi.py} +5 -10
  59. novel_downloader/core/fetchers/{qidian/session.py → qidian.py} +56 -64
  60. novel_downloader/core/fetchers/quanben5.py +92 -0
  61. novel_downloader/core/fetchers/{base/rate_limiter.py → rate_limiter.py} +2 -2
  62. novel_downloader/core/fetchers/registry.py +5 -16
  63. novel_downloader/core/fetchers/{sfacg/session.py → sfacg.py} +7 -10
  64. novel_downloader/core/fetchers/shencou.py +106 -0
  65. novel_downloader/core/fetchers/shuhaige.py +84 -0
  66. novel_downloader/core/fetchers/tongrenquan.py +84 -0
  67. novel_downloader/core/fetchers/ttkan.py +95 -0
  68. novel_downloader/core/fetchers/wanbengo.py +83 -0
  69. novel_downloader/core/fetchers/xiaoshuowu.py +106 -0
  70. novel_downloader/core/fetchers/xiguashuwu.py +177 -0
  71. novel_downloader/core/fetchers/xs63b.py +171 -0
  72. novel_downloader/core/fetchers/xshbook.py +85 -0
  73. novel_downloader/core/fetchers/{yamibo/session.py → yamibo.py} +19 -12
  74. novel_downloader/core/fetchers/yibige.py +114 -0
  75. novel_downloader/core/interfaces/__init__.py +1 -9
  76. novel_downloader/core/interfaces/downloader.py +6 -2
  77. novel_downloader/core/interfaces/exporter.py +7 -7
  78. novel_downloader/core/interfaces/fetcher.py +6 -19
  79. novel_downloader/core/interfaces/parser.py +7 -8
  80. novel_downloader/core/interfaces/searcher.py +9 -1
  81. novel_downloader/core/parsers/__init__.py +49 -12
  82. novel_downloader/core/parsers/aaatxt.py +132 -0
  83. novel_downloader/core/parsers/b520.py +116 -0
  84. novel_downloader/core/parsers/base.py +64 -12
  85. novel_downloader/core/parsers/biquyuedu.py +133 -0
  86. novel_downloader/core/parsers/dxmwx.py +162 -0
  87. novel_downloader/core/parsers/eightnovel.py +224 -0
  88. novel_downloader/core/parsers/esjzone.py +64 -69
  89. novel_downloader/core/parsers/guidaye.py +128 -0
  90. novel_downloader/core/parsers/hetushu.py +139 -0
  91. novel_downloader/core/parsers/i25zw.py +137 -0
  92. novel_downloader/core/parsers/ixdzs8.py +186 -0
  93. novel_downloader/core/parsers/jpxs123.py +137 -0
  94. novel_downloader/core/parsers/lewenn.py +142 -0
  95. novel_downloader/core/parsers/linovelib.py +48 -64
  96. novel_downloader/core/parsers/piaotia.py +189 -0
  97. novel_downloader/core/parsers/qbtr.py +136 -0
  98. novel_downloader/core/parsers/qianbi.py +48 -50
  99. novel_downloader/core/parsers/qidian/main_parser.py +756 -48
  100. novel_downloader/core/parsers/qidian/utils/__init__.py +3 -21
  101. novel_downloader/core/parsers/qidian/utils/decryptor_fetcher.py +1 -1
  102. novel_downloader/core/parsers/qidian/utils/node_decryptor.py +4 -4
  103. novel_downloader/core/parsers/quanben5.py +103 -0
  104. novel_downloader/core/parsers/registry.py +5 -16
  105. novel_downloader/core/parsers/sfacg.py +38 -45
  106. novel_downloader/core/parsers/shencou.py +215 -0
  107. novel_downloader/core/parsers/shuhaige.py +111 -0
  108. novel_downloader/core/parsers/tongrenquan.py +116 -0
  109. novel_downloader/core/parsers/ttkan.py +132 -0
  110. novel_downloader/core/parsers/wanbengo.py +191 -0
  111. novel_downloader/core/parsers/xiaoshuowu.py +173 -0
  112. novel_downloader/core/parsers/xiguashuwu.py +429 -0
  113. novel_downloader/core/parsers/xs63b.py +161 -0
  114. novel_downloader/core/parsers/xshbook.py +134 -0
  115. novel_downloader/core/parsers/yamibo.py +87 -131
  116. novel_downloader/core/parsers/yibige.py +166 -0
  117. novel_downloader/core/searchers/__init__.py +34 -3
  118. novel_downloader/core/searchers/aaatxt.py +107 -0
  119. novel_downloader/core/searchers/{biquge.py → b520.py} +29 -28
  120. novel_downloader/core/searchers/base.py +112 -36
  121. novel_downloader/core/searchers/dxmwx.py +105 -0
  122. novel_downloader/core/searchers/eightnovel.py +84 -0
  123. novel_downloader/core/searchers/esjzone.py +43 -25
  124. novel_downloader/core/searchers/hetushu.py +92 -0
  125. novel_downloader/core/searchers/i25zw.py +93 -0
  126. novel_downloader/core/searchers/ixdzs8.py +107 -0
  127. novel_downloader/core/searchers/jpxs123.py +107 -0
  128. novel_downloader/core/searchers/piaotia.py +100 -0
  129. novel_downloader/core/searchers/qbtr.py +106 -0
  130. novel_downloader/core/searchers/qianbi.py +74 -40
  131. novel_downloader/core/searchers/quanben5.py +144 -0
  132. novel_downloader/core/searchers/registry.py +24 -8
  133. novel_downloader/core/searchers/shuhaige.py +124 -0
  134. novel_downloader/core/searchers/tongrenquan.py +110 -0
  135. novel_downloader/core/searchers/ttkan.py +92 -0
  136. novel_downloader/core/searchers/xiaoshuowu.py +122 -0
  137. novel_downloader/core/searchers/xiguashuwu.py +95 -0
  138. novel_downloader/core/searchers/xs63b.py +104 -0
  139. novel_downloader/locales/en.json +34 -85
  140. novel_downloader/locales/zh.json +35 -86
  141. novel_downloader/models/__init__.py +21 -22
  142. novel_downloader/models/book.py +44 -0
  143. novel_downloader/models/config.py +4 -37
  144. novel_downloader/models/login.py +1 -1
  145. novel_downloader/models/search.py +5 -0
  146. novel_downloader/resources/config/settings.toml +8 -70
  147. novel_downloader/resources/json/xiguashuwu.json +718 -0
  148. novel_downloader/utils/__init__.py +13 -24
  149. novel_downloader/utils/chapter_storage.py +5 -5
  150. novel_downloader/utils/constants.py +4 -31
  151. novel_downloader/utils/cookies.py +38 -35
  152. novel_downloader/utils/crypto_utils/__init__.py +7 -0
  153. novel_downloader/utils/crypto_utils/aes_util.py +90 -0
  154. novel_downloader/utils/crypto_utils/aes_v1.py +619 -0
  155. novel_downloader/utils/crypto_utils/aes_v2.py +1143 -0
  156. novel_downloader/utils/crypto_utils/rc4.py +54 -0
  157. novel_downloader/utils/epub/__init__.py +3 -4
  158. novel_downloader/utils/epub/builder.py +6 -6
  159. novel_downloader/utils/epub/constants.py +62 -21
  160. novel_downloader/utils/epub/documents.py +95 -201
  161. novel_downloader/utils/epub/models.py +8 -22
  162. novel_downloader/utils/epub/utils.py +73 -106
  163. novel_downloader/utils/file_utils/__init__.py +2 -23
  164. novel_downloader/utils/file_utils/io.py +53 -188
  165. novel_downloader/utils/file_utils/normalize.py +1 -7
  166. novel_downloader/utils/file_utils/sanitize.py +4 -15
  167. novel_downloader/utils/fontocr/__init__.py +5 -14
  168. novel_downloader/utils/fontocr/core.py +216 -0
  169. novel_downloader/utils/fontocr/loader.py +50 -0
  170. novel_downloader/utils/logger.py +81 -65
  171. novel_downloader/utils/network.py +17 -41
  172. novel_downloader/utils/state.py +4 -90
  173. novel_downloader/utils/text_utils/__init__.py +1 -7
  174. novel_downloader/utils/text_utils/diff_display.py +5 -7
  175. novel_downloader/utils/text_utils/text_cleaner.py +39 -30
  176. novel_downloader/utils/text_utils/truncate_utils.py +3 -14
  177. novel_downloader/utils/time_utils/__init__.py +5 -11
  178. novel_downloader/utils/time_utils/datetime_utils.py +20 -29
  179. novel_downloader/utils/time_utils/sleep_utils.py +55 -49
  180. novel_downloader/web/__init__.py +13 -0
  181. novel_downloader/web/components/__init__.py +11 -0
  182. novel_downloader/web/components/navigation.py +35 -0
  183. novel_downloader/web/main.py +66 -0
  184. novel_downloader/web/pages/__init__.py +17 -0
  185. novel_downloader/web/pages/download.py +78 -0
  186. novel_downloader/web/pages/progress.py +147 -0
  187. novel_downloader/web/pages/search.py +329 -0
  188. novel_downloader/web/services/__init__.py +17 -0
  189. novel_downloader/web/services/client_dialog.py +164 -0
  190. novel_downloader/web/services/cred_broker.py +113 -0
  191. novel_downloader/web/services/cred_models.py +35 -0
  192. novel_downloader/web/services/task_manager.py +264 -0
  193. novel_downloader-2.0.1.dist-info/METADATA +172 -0
  194. novel_downloader-2.0.1.dist-info/RECORD +206 -0
  195. {novel_downloader-1.5.0.dist-info → novel_downloader-2.0.1.dist-info}/entry_points.txt +1 -1
  196. novel_downloader/core/downloaders/biquge.py +0 -29
  197. novel_downloader/core/downloaders/esjzone.py +0 -29
  198. novel_downloader/core/downloaders/linovelib.py +0 -29
  199. novel_downloader/core/downloaders/sfacg.py +0 -29
  200. novel_downloader/core/downloaders/yamibo.py +0 -29
  201. novel_downloader/core/exporters/biquge.py +0 -22
  202. novel_downloader/core/exporters/esjzone.py +0 -22
  203. novel_downloader/core/exporters/qianbi.py +0 -22
  204. novel_downloader/core/exporters/sfacg.py +0 -22
  205. novel_downloader/core/exporters/yamibo.py +0 -22
  206. novel_downloader/core/fetchers/base/__init__.py +0 -14
  207. novel_downloader/core/fetchers/base/browser.py +0 -422
  208. novel_downloader/core/fetchers/biquge/__init__.py +0 -14
  209. novel_downloader/core/fetchers/esjzone/__init__.py +0 -14
  210. novel_downloader/core/fetchers/esjzone/browser.py +0 -209
  211. novel_downloader/core/fetchers/linovelib/__init__.py +0 -14
  212. novel_downloader/core/fetchers/linovelib/browser.py +0 -198
  213. novel_downloader/core/fetchers/qianbi/__init__.py +0 -14
  214. novel_downloader/core/fetchers/qidian/__init__.py +0 -14
  215. novel_downloader/core/fetchers/qidian/browser.py +0 -326
  216. novel_downloader/core/fetchers/sfacg/__init__.py +0 -14
  217. novel_downloader/core/fetchers/sfacg/browser.py +0 -194
  218. novel_downloader/core/fetchers/yamibo/__init__.py +0 -14
  219. novel_downloader/core/fetchers/yamibo/browser.py +0 -234
  220. novel_downloader/core/parsers/biquge.py +0 -139
  221. novel_downloader/core/parsers/qidian/book_info_parser.py +0 -90
  222. novel_downloader/core/parsers/qidian/chapter_encrypted.py +0 -528
  223. novel_downloader/core/parsers/qidian/chapter_normal.py +0 -157
  224. novel_downloader/core/parsers/qidian/chapter_router.py +0 -68
  225. novel_downloader/core/parsers/qidian/utils/helpers.py +0 -114
  226. novel_downloader/models/chapter.py +0 -25
  227. novel_downloader/models/types.py +0 -13
  228. novel_downloader/tui/__init__.py +0 -7
  229. novel_downloader/tui/app.py +0 -32
  230. novel_downloader/tui/main.py +0 -17
  231. novel_downloader/tui/screens/__init__.py +0 -14
  232. novel_downloader/tui/screens/home.py +0 -198
  233. novel_downloader/tui/screens/login.py +0 -74
  234. novel_downloader/tui/styles/home_layout.tcss +0 -79
  235. novel_downloader/tui/widgets/richlog_handler.py +0 -24
  236. novel_downloader/utils/cache.py +0 -24
  237. novel_downloader/utils/crypto_utils.py +0 -71
  238. novel_downloader/utils/fontocr/hash_store.py +0 -280
  239. novel_downloader/utils/fontocr/hash_utils.py +0 -103
  240. novel_downloader/utils/fontocr/model_loader.py +0 -69
  241. novel_downloader/utils/fontocr/ocr_v1.py +0 -315
  242. novel_downloader/utils/fontocr/ocr_v2.py +0 -764
  243. novel_downloader/utils/fontocr/ocr_v3.py +0 -744
  244. novel_downloader-1.5.0.dist-info/METADATA +0 -196
  245. novel_downloader-1.5.0.dist-info/RECORD +0 -164
  246. {novel_downloader-1.5.0.dist-info → novel_downloader-2.0.1.dist-info}/WHEEL +0 -0
  247. {novel_downloader-1.5.0.dist-info → novel_downloader-2.0.1.dist-info}/licenses/LICENSE +0 -0
  248. {novel_downloader-1.5.0.dist-info → novel_downloader-2.0.1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,172 @@
1
+ Metadata-Version: 2.4
2
+ Name: novel-downloader
3
+ Version: 2.0.1
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: brotli; extra == "font-recovery"
51
+ Requires-Dist: numpy; extra == "font-recovery"
52
+ Requires-Dist: fonttools; extra == "font-recovery"
53
+ Requires-Dist: pillow; extra == "font-recovery"
54
+ Provides-Extra: dev
55
+ Requires-Dist: black; extra == "dev"
56
+ Requires-Dist: mypy; extra == "dev"
57
+ Requires-Dist: ruff; extra == "dev"
58
+ Requires-Dist: pytest; extra == "dev"
59
+ Requires-Dist: pytest-cov; extra == "dev"
60
+ Requires-Dist: pytest-mock; extra == "dev"
61
+ Requires-Dist: types-requests; extra == "dev"
62
+ Requires-Dist: types-lxml; extra == "dev"
63
+ Requires-Dist: types-PyYAML; extra == "dev"
64
+ Requires-Dist: pre-commit; extra == "dev"
65
+ Requires-Dist: commitizen; extra == "dev"
66
+ Dynamic: license-file
67
+
68
+ # novel-downloader
69
+
70
+ 基于 [aiohttp](https://github.com/aio-libs/aiohttp) 的异步小说下载工具 / 库。支持断点续传、广告过滤与 TXT/EPUB 导出, 提供 CLI 与 Web 图形界面。
71
+
72
+ > 运行要求: **Python 3.11+** (开发环境: Python 3.12)
73
+
74
+ ## 功能特性
75
+
76
+ * **可恢复下载**: 运行时自动检测本地已完成的部分, 跳过已下载内容
77
+ * **多格式导出**: 合并所有章节为
78
+ * `TXT`
79
+ * `EPUB` (可选打包章节插图)
80
+ * **广告/活动过滤**:
81
+ * [x] 章节标题过滤
82
+ * [x] 章节正文过滤
83
+ * **可选字体混淆还原**: `decode_font`
84
+ * **双形态使用**: 命令行 (CLI) 与 Web 图形界面 (GUI)
85
+
86
+ ---
87
+
88
+ ## 安装
89
+
90
+ 使用 `pip` 安装稳定版:
91
+
92
+ ```bash
93
+ pip install novel-downloader
94
+ ```
95
+
96
+ 启用字体解密功能 (`decode_font`):
97
+
98
+ ```bash
99
+ pip install "novel-downloader[font-recovery]"
100
+ ```
101
+
102
+ > 参见: [安装](https://github.com/saudadez21/novel-downloader/blob/main/docs/1-installation.md)
103
+
104
+ ---
105
+
106
+ ## 快速开始
107
+
108
+ ### 1. 初始化配置
109
+
110
+ ```bash
111
+ # 生成默认配置 ./settings.toml
112
+ novel-cli config init
113
+ ```
114
+
115
+ 编辑生成的 `./settings.toml`, 可修改 `request_interval`、`book_ids` 等配置 (参考 [settings.toml 配置说明](https://github.com/saudadez21/novel-downloader/blob/main/docs/3-settings-schema.md))
116
+
117
+ ### 2. 命令行 (CLI)
118
+
119
+ ```bash
120
+ # 执行下载任务 (示例: 书籍 ID 为 123456, 默认站点为起点)
121
+ novel-cli download 123456
122
+ ```
123
+
124
+ * 支持站点见: [支持站点列表](https://github.com/saudadez21/novel-downloader/blob/main/docs/4-supported-sites.md)
125
+ * 更多示例见: [CLI 使用示例](https://github.com/saudadez21/novel-downloader/blob/main/docs/5-cli-usage-examples.md)
126
+
127
+ ### 3. 图形界面 (GUI / Web)
128
+
129
+ ```bash
130
+ # 启动 Web 界面 (基于当前 settings.toml)
131
+ novel-web
132
+
133
+ # 如需提供局域网/外网访问 (请自行留意安全与网络环境)
134
+ # novel-web --listen public
135
+ ```
136
+
137
+ ---
138
+
139
+ ## 从源码安装 (开发版)
140
+
141
+ 体验最新开发功能:
142
+
143
+ ```bash
144
+ git clone https://github.com/saudadez21/novel-downloader.git
145
+ cd novel-downloader
146
+ pip install .
147
+ # 或安装带可选功能:
148
+ # pip install .[font-recovery]
149
+ ```
150
+
151
+ ---
152
+
153
+ ## 文档导航
154
+
155
+ * [安装](https://github.com/saudadez21/novel-downloader/blob/main/docs/1-installation.md)
156
+ * [配置](https://github.com/saudadez21/novel-downloader/blob/main/docs/2-configuration.md)
157
+ * [settings.toml 配置说明](https://github.com/saudadez21/novel-downloader/blob/main/docs/3-settings-schema.md)
158
+ * [支持站点列表](https://github.com/saudadez21/novel-downloader/blob/main/docs/4-supported-sites.md)
159
+ * [CLI 使用示例](https://github.com/saudadez21/novel-downloader/blob/main/docs/5-cli-usage-examples.md)
160
+ * [复制 Cookies](https://github.com/saudadez21/novel-downloader/blob/main/docs/copy-cookies.md)
161
+ * [文件保存](https://github.com/saudadez21/novel-downloader/blob/main/docs/file-saving.md)
162
+ * [模块与接口文档](https://github.com/saudadez21/novel-downloader/blob/main/docs/api/README.md)
163
+ * [TODO](https://github.com/saudadez21/novel-downloader/blob/main/docs/todo.md)
164
+ * [开发](https://github.com/saudadez21/novel-downloader/blob/main/docs/develop.md)
165
+
166
+ ---
167
+
168
+ ## 项目说明
169
+
170
+ * 本项目仅供学习和研究使用, **不得**用于任何商业或违法用途; 请遵守目标网站的 `robots.txt` 及相关法律法规
171
+ * 由于网站结构可能变化或其他问题, 可能导致无法正常工作, 请按需自行调整代码或寻找其他解决方案
172
+ * 使用本项目造成的任何法律责任由使用者自行承担, 项目作者不承担相关责任
@@ -0,0 +1,206 @@
1
+ novel_downloader/__init__.py,sha256=rCDXxBxrYs3WYnanTn5QZYhg2-rG48Ry2DS7urOkIws,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=2iEW137yI-YbBE-4Um7h4IQRZzX0qbPILwCQeTEfU8o,7603
6
+ novel_downloader/cli/export.py,sha256=u1Cu-2PcVBny8cMVPS0lTCs34XXcVljkXBZpNUCQQKw,2577
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=XyvgTlsiV1NkGLWfCt6WvTIm8h8hXq5_RSfCdUwy8P0,4024
10
+ novel_downloader/config/__init__.py,sha256=gwaDMlcBX7Lw8Hi8dY2HxNEt9ysMhIFNhkziyjramWo,405
11
+ novel_downloader/config/adapter.py,sha256=4pZo-9PA7g2H1tybqdUeGOODZCKtpVyAKUg23VX-LBA,13444
12
+ novel_downloader/config/file_io.py,sha256=ncKk7rj07UnYYVEPR_RHS2D5igMSv8xaHySNvJQWhB8,6495
13
+ novel_downloader/core/__init__.py,sha256=oCmWj9t7CEyNfew5O25YeaMPeMvXt082jprKAPMffKk,1166
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=Nm4MW0rEIzX-7jzOFTaS4fdkzB1T8zBrIHpM-W7niN0,4755
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=cdB_5oZs1SSPZ-TpemZv89goSVpj3jV23A52DPXhYDc,4467
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=9CqpWu1qguAgYb6NmhSIA2O59S_S700H_PsbMf2iZsI,10329
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=2ESTszn-GrXj9rxYr_cQy86R1iCvWH-LbJx63j933YM,3669
79
+ novel_downloader/core/interfaces/parser.py,sha256=B_HsE_PshnUjz-QibBpuNht6whN9gboW-k1BAsnMe6M,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=R6xbT9ezFWcdFhqCItj2iigwQSB3MNrH9joC14vx2AI,4689
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=M-BFJcqaBjNlf5PhoD-qscTR9o0ydRhQQAMbHzh1Z-o,7294
88
+ novel_downloader/core/parsers/esjzone.py,sha256=WeBwFn8waUtiZ3rzGJaiuB21ga7mnMnuBCA-0XnXOQI,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=1Xq00oRcb-vGskisbkNJuSmBGWNK7NpPOHbQHdMks_k,14223
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/main_parser.py,sha256=3JpvTFbL3yzGE7sfjgRHtUTid8_TVNaqBYyMNVnTwkM,29833
115
+ novel_downloader/core/parsers/qidian/utils/__init__.py,sha256=7aCxmMDQ3wkAPPtVIQ_YYprzE8V1IcHh2LK5S2rEc4U,266
116
+ novel_downloader/core/parsers/qidian/utils/decryptor_fetcher.py,sha256=idwsRx9Er5SRb3b_tmKwNxfOmUWR0QwpVf_zpDRJxuw,4687
117
+ novel_downloader/core/parsers/qidian/utils/node_decryptor.py,sha256=WY2rG2S7GlIqDiFBBJaGW4XJorCwVHfbiYIeytkkmNo,5949
118
+ novel_downloader/core/searchers/__init__.py,sha256=pCCK1rxfQP8djdsRnpxoVgANe6CTpbP7DNbNond_1P4,1379
119
+ novel_downloader/core/searchers/aaatxt.py,sha256=KHaX1dpDBaAJz-_7UlaTtnMbFlTplWHaFyOfCkn4gX4,3717
120
+ novel_downloader/core/searchers/b520.py,sha256=L2fkf1_LxUREdPJJXbSN5c00EXwWVeMwWpXKN144k9c,2621
121
+ novel_downloader/core/searchers/base.py,sha256=dwXF5KwU1GAnKo5BY5H6X5xkpDiP72KpGd4Q-dn9DFg,5166
122
+ novel_downloader/core/searchers/dxmwx.py,sha256=ZaeFSU2T3Yl9x6hquila7cF4wYdwm9d82cTjFT9byCQ,3225
123
+ novel_downloader/core/searchers/eightnovel.py,sha256=xJKPdAeyhNLn0U8Ip_DY0BJOiTT3s5ajBz0nh4SaKY0,2528
124
+ novel_downloader/core/searchers/esjzone.py,sha256=zw7bQalTfYjp9an0Ghk0ZDsWEOOh-fNsR4Lsoi4u7xA,3199
125
+ novel_downloader/core/searchers/hetushu.py,sha256=qhX6-QdvzPCXHh7hO6tHXFd3dpbcff_1PL7YvqgOQho,2829
126
+ novel_downloader/core/searchers/i25zw.py,sha256=1h3IZxjFO8XirDYN7x7fc96XjuspuTdkAUNHf1xVeBM,2827
127
+ novel_downloader/core/searchers/ixdzs8.py,sha256=Q-tZk5czA-wTSDQ4jnJEITfWWnsMXre5nPTjwJxGl6s,3454
128
+ novel_downloader/core/searchers/jpxs123.py,sha256=BeEa7wkE0KGwZ3HPIKSh7I8wpF_V8Z2L87eWjzphzwk,3345
129
+ novel_downloader/core/searchers/piaotia.py,sha256=dGueBh819EvxgL-cyBITud3DGXJhebhZkExVxcPcH6E,3510
130
+ novel_downloader/core/searchers/qbtr.py,sha256=yokdCqlhlfJYy6HDhMZS4nGNzHGYwTy36glXq_AlSDw,3231
131
+ novel_downloader/core/searchers/qianbi.py,sha256=UK7znw9RZkhpsDTy3_wavi3aBLnaLVUGd9E_Epq5c20,5404
132
+ novel_downloader/core/searchers/quanben5.py,sha256=xDKtDsZ8e4bhmA9rIG-cdIkbtnaUUxSxJRqZrad1u3g,4265
133
+ novel_downloader/core/searchers/registry.py,sha256=VFtvtbAqLBSYO7CvXrVya-85t-jOUmyth30wls-6noY,2441
134
+ novel_downloader/core/searchers/shuhaige.py,sha256=8XW39aIdyHzWwG8r_hsr7YhOEGQLLTIXObe2HlAW8D4,3841
135
+ novel_downloader/core/searchers/tongrenquan.py,sha256=NE0BN4gutipfBPMm5TJP3YyI29ce6ERpmC1mqfQNgdc,3471
136
+ novel_downloader/core/searchers/ttkan.py,sha256=Y-qjePD7zQx8RUgASTuz4yu5fzT5MOJg7Qh9_SaP1z0,2851
137
+ novel_downloader/core/searchers/xiaoshuowu.py,sha256=gAS3OpoMwfksEtlXPL5XPrfD7KVprl8YA7HGn3gGANg,4132
138
+ novel_downloader/core/searchers/xiguashuwu.py,sha256=YWxOQpXUhMMsgxt7zc51rtdbe6mn9yv5Vzeg63OCJlQ,2952
139
+ novel_downloader/core/searchers/xs63b.py,sha256=T4QUQphYFvnbnENxFbYVNtZMi2QhXypxOJU-FjjVYwU,3443
140
+ novel_downloader/locales/en.json,sha256=w3TA-AtsQE2C1EVf5tNiOQRnaaXEaXX88-0Bb3xWdU8,3942
141
+ novel_downloader/locales/zh.json,sha256=XRku9SHycZ8zP0YYBwchBAg4yYjCWpgCLDItW8cmUcI,3779
142
+ novel_downloader/models/__init__.py,sha256=U7ks1ieTm-VzmH3NcH0Fym7c1zfywIZcBGPOUBWuVLo,690
143
+ novel_downloader/models/book.py,sha256=kim6Tt0pDDvOhGx6jnRp28BP79yhhsyNiUp56I0cAP8,875
144
+ novel_downloader/models/config.py,sha256=QNiw1XhbzjAYbfLAZ1bTIQ21nciNxnYszGVtXVG3Uk0,2211
145
+ novel_downloader/models/login.py,sha256=VpTKfistRmlEJ67bzRpnAeQFBqs8R7VeGXZ74BZvTF0,355
146
+ novel_downloader/models/search.py,sha256=NSAXbQJvUY1Zdp1HfAt6JJ-mTFw2aX4-Je-JLeMG8ZY,351
147
+ novel_downloader/resources/config/settings.toml,sha256=uHgL5sUBPIz17Jwlc8WPQZ6Vn8PjatZ3OIiDaS0f-h8,3081
148
+ novel_downloader/resources/css_styles/intro.css,sha256=Nqzp-A5we92d90CCiGL8h2FeuMnCz-G0TLevMF_Pl2U,1271
149
+ novel_downloader/resources/css_styles/main.css,sha256=1nsDTr698eY3furWDHuQMDKP1Vqd2h5x40eJMZpktNE,559
150
+ novel_downloader/resources/images/volume_border.png,sha256=2dEVimnTHKOfLMhi7bhkh_5joWNnrqg8duomLSNOZx4,28613
151
+ novel_downloader/resources/js_scripts/qidian_decrypt_node.js,sha256=spNrk_gXI7pPW9abr4XGc2LASMe1UuN4BUe4cH24L8s,2195
152
+ novel_downloader/resources/json/linovelib_font_map.json,sha256=F1IlEcvXGcagnZCu4Gw2vQ2NLnhy6cJOLhabukqnftw,67854
153
+ novel_downloader/resources/json/xiguashuwu.json,sha256=AT8KSFBWuiHj4Ggz3O1LqED0Tw22k0A4-V4OziHbqfo,16471
154
+ novel_downloader/utils/__init__.py,sha256=_l77NlxmGA3HHGSwK68o4_Nc7xRaVP8Bo8SUuImP5Uk,867
155
+ novel_downloader/utils/chapter_storage.py,sha256=7jpVdOguuylnjsJi_yQ-jCMIPljtJWsq_NqXMDDv0lQ,10315
156
+ novel_downloader/utils/constants.py,sha256=uff08ll68TD8HwITR-uZ7j_2bQjKPso0-ryKmYhtjAU,3196
157
+ novel_downloader/utils/cookies.py,sha256=Z_9mjJYfhv6xPVgsm7BzCpWeMTcPKoxAoUFWZYuEFWM,2117
158
+ novel_downloader/utils/i18n.py,sha256=86Wz4zT0_YTnmOSS6cliqO_uMgJJdfC-hNLyqZnXgvU,1050
159
+ novel_downloader/utils/logger.py,sha256=QuPyblYOIXEa4X0YBHLZgwbv1ZhkPNq159qyGmFKOno,3551
160
+ novel_downloader/utils/network.py,sha256=AIbM2kEfA9OjkMluFRKqGZIY2ZfNxVAoPnUHUkKkzgw,3625
161
+ novel_downloader/utils/state.py,sha256=QHfvS9CrO08fRZLNM0B_s0n5XIz7ap20NdAfesQI0Ek,1852
162
+ novel_downloader/utils/crypto_utils/__init__.py,sha256=MOl8pb73dRk8yQDuh2RZULnM3mn9VnJnOkh0SWcvaPs,136
163
+ novel_downloader/utils/crypto_utils/aes_util.py,sha256=46vKY1CxEnHgJE9t2CRzsrGyUoLRjBysCJCeSF5AiqU,2878
164
+ novel_downloader/utils/crypto_utils/aes_v1.py,sha256=_jW86_WyUTJfOzqYbZ6QvNPF-V8YRaqaOsyLjMsO610,34247
165
+ novel_downloader/utils/crypto_utils/aes_v2.py,sha256=OAsMnsztkJilqo8jM6nkrPMyujPqgGhohd-TcwW6fVA,48945
166
+ novel_downloader/utils/crypto_utils/rc4.py,sha256=SbC0oAdg2N7LWMnq9YbNh-zChI8SfpeBiijTPxFkYFc,1319
167
+ novel_downloader/utils/epub/__init__.py,sha256=77WorOLdsaxNoiuDPVxvQkiU49NW774bf3E7erPBv1I,725
168
+ novel_downloader/utils/epub/builder.py,sha256=2Vd7qD12vWqu05hVHrcgn5gfRzxGklY88nv8unuXF4M,11676
169
+ novel_downloader/utils/epub/constants.py,sha256=8r0TmDkGhBVpLNQXS4eIhC2WYwOvFEmpVDF7Mxzm5sA,3090
170
+ novel_downloader/utils/epub/documents.py,sha256=UijMa8yHpleZLUtRrwwTsOPZlqYlC5-qqXEuKh_StPI,9882
171
+ novel_downloader/utils/epub/models.py,sha256=CppM1qIC_G53L-lbouJO-pBBKLMTRfMvOM2PUOSPT78,2489
172
+ novel_downloader/utils/epub/utils.py,sha256=7eRYXUZFZ3NQU69UDwLK_yxiPQWpRhxBPhzKkQSTS0s,5090
173
+ novel_downloader/utils/file_utils/__init__.py,sha256=PIE96UKkI73wNr5v8kbP159BIbkEwsOQa9iEFr5RGUw,366
174
+ novel_downloader/utils/file_utils/io.py,sha256=bF1q38BdwjTkM8ylfQGczWAcAMHI0gBB5xNkYwTYqrk,2167
175
+ novel_downloader/utils/file_utils/normalize.py,sha256=j8d6kmiQyafa-E8NjTv33uUrnNDoxyJ18orXfS5J_Gw,1708
176
+ novel_downloader/utils/file_utils/sanitize.py,sha256=IuJA2JjcrxxOnJtehPLBpBNOuyNbj97TUZvw-vXB9PE,1713
177
+ novel_downloader/utils/fontocr/__init__.py,sha256=lWT8hVKeuYatEanyw6EjlgPidlyWSMkgCiRliEG_VtA,314
178
+ novel_downloader/utils/fontocr/core.py,sha256=6-JhRo6fvdFxxJBsGSaKcyTh3PZSlGSkAIdJwzvShas,7475
179
+ novel_downloader/utils/fontocr/loader.py,sha256=TGSv9qq-jomky4h6ezr6uoUTgF3-FP385vP-LS7YlBY,1300
180
+ novel_downloader/utils/text_utils/__init__.py,sha256=cr0HCvgQFJE2ZEXqjkkmrOA7PnH50dKegrjdpIytUJs,601
181
+ novel_downloader/utils/text_utils/diff_display.py,sha256=5zvVtzsLbRxmUnn_dWUsXFaq6hch02OlOpqKYP8GB3g,2491
182
+ novel_downloader/utils/text_utils/numeric_conversion.py,sha256=RJ3L5GBxgNEQYJ7xFoihLVsjGcObBfpUAk_Gz5MxlkA,6627
183
+ novel_downloader/utils/text_utils/text_cleaner.py,sha256=9GbJChhZQGW06LApnHNzy6t5gS73AA9BTBigBn9qgcs,6410
184
+ novel_downloader/utils/text_utils/truncate_utils.py,sha256=xg5nlQvq6O1g3K-I64aTZvtnesN0P5QBGUVCPj09g8s,1284
185
+ novel_downloader/utils/time_utils/__init__.py,sha256=XbBeSbpNqiJy7Lsv-_udz29hPnIY53F0Drbuh730y44,331
186
+ novel_downloader/utils/time_utils/datetime_utils.py,sha256=ECidI5yvWVia8BWWLu7U0O0YYMIKgJwzWQmOuA_un3U,4499
187
+ novel_downloader/utils/time_utils/sleep_utils.py,sha256=uwQfnhFHqNOku8UwUJ7btD2N0NgDjY925QKDzT-9_sE,3000
188
+ novel_downloader/web/__init__.py,sha256=ga8qRQhYcGEiL0WKhSSyldLxkOEfrq-UU71T7MYv7EU,174
189
+ novel_downloader/web/main.py,sha256=ZzQcpJkAZb7tRlBkub6LGggNrbM4gtrI4nb-MyiUAlY,1783
190
+ novel_downloader/web/components/__init__.py,sha256=fxBI7rpAQvdZU3obR6_-bFqgmA7nzvRpW05Rw3b4jp8,193
191
+ novel_downloader/web/components/navigation.py,sha256=m-rjbNRlYjqXsu2dq5PdCzpqy7oW6_otra2ZufRsh1c,1156
192
+ novel_downloader/web/pages/__init__.py,sha256=KP_aH8y8dtCeRze8jDJ4tC3Ft7UTGhlW8ZKDdKPdwcM,383
193
+ novel_downloader/web/pages/download.py,sha256=Qqq4GAZaiMRAuCjBvWiof6kwzSz0yrAj5LWN5EEldqo,2600
194
+ novel_downloader/web/pages/progress.py,sha256=whWduqLvQ1PPZpDNVfvFCVaFgFhD87LT4CDb8JuqD_w,5207
195
+ novel_downloader/web/pages/search.py,sha256=qV_jgtQtNnzT_EWXUeEZfw1ieOxbaXcx4JSs-UQuS4Q,10235
196
+ novel_downloader/web/services/__init__.py,sha256=kLW0uyqudnlHtSsMrrghmL6P1-VDrseggNdB3cR5jLA,316
197
+ novel_downloader/web/services/client_dialog.py,sha256=JwYV8bjxPxLQsuheC8rk_jaeODolz5X9Wo64MsXZoyc,5679
198
+ novel_downloader/web/services/cred_broker.py,sha256=_R2Szqg5qRBHrFujTlPxrrMpQsnfNozjLUxJ5HhD8_c,2939
199
+ novel_downloader/web/services/cred_models.py,sha256=8nXbVoAIz3QokctrCVm-8lSnKgCIFhMM6TuaNq6bFGU,846
200
+ novel_downloader/web/services/task_manager.py,sha256=V6Pp92ZB9aNlliZbdwcaNUojioY1_BGAMGCo9Okob7w,8624
201
+ novel_downloader-2.0.1.dist-info/licenses/LICENSE,sha256=XgmnH0mBf-qEiizoVAfJQAKzPB9y3rBa-ni7M0Aqv4A,1066
202
+ novel_downloader-2.0.1.dist-info/METADATA,sha256=1Mw3aNRkbCiKXaTXJvxzICtInOZEVTpY4kGok3CZ19U,6502
203
+ novel_downloader-2.0.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
204
+ novel_downloader-2.0.1.dist-info/entry_points.txt,sha256=nIgnurS4J6_ce3oIBFV87I1pPwBofuRQvxkoRGn4yEU,112
205
+ novel_downloader-2.0.1.dist-info/top_level.txt,sha256=hP4jYWM2LTm1jxsW4hqEB8N0dsRvldO2QdhggJT917I,17
206
+ novel_downloader-2.0.1.dist-info/RECORD,,
@@ -1,3 +1,3 @@
1
1
  [console_scripts]
2
2
  novel-cli = novel_downloader.cli.main:cli_main
3
- novel-tui = novel_downloader.tui.main:tui_main
3
+ novel-web = novel_downloader.web.main:web_main
@@ -1,29 +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.downloaders.registry import register_downloader
10
- from novel_downloader.core.interfaces import (
11
- FetcherProtocol,
12
- ParserProtocol,
13
- )
14
- from novel_downloader.models import DownloaderConfig
15
-
16
-
17
- @register_downloader(site_keys=["biquge", "bqg"])
18
- class BiqugeDownloader(CommonDownloader):
19
- """
20
- Downloader for biquge (笔趣阁) novels.
21
- """
22
-
23
- def __init__(
24
- self,
25
- fetcher: FetcherProtocol,
26
- parser: ParserProtocol,
27
- config: DownloaderConfig,
28
- ):
29
- super().__init__(fetcher, parser, config, "biquge")
@@ -1,29 +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.downloaders.registry import register_downloader
10
- from novel_downloader.core.interfaces import (
11
- FetcherProtocol,
12
- ParserProtocol,
13
- )
14
- from novel_downloader.models import DownloaderConfig
15
-
16
-
17
- @register_downloader(site_keys=["esjzone"])
18
- class EsjzoneDownloader(CommonDownloader):
19
- """
20
- Downloader for ESJ Zone novels.
21
- """
22
-
23
- def __init__(
24
- self,
25
- fetcher: FetcherProtocol,
26
- parser: ParserProtocol,
27
- config: DownloaderConfig,
28
- ):
29
- super().__init__(fetcher, parser, config, "esjzone")
@@ -1,29 +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.downloaders.registry import register_downloader
10
- from novel_downloader.core.interfaces import (
11
- FetcherProtocol,
12
- ParserProtocol,
13
- )
14
- from novel_downloader.models import DownloaderConfig
15
-
16
-
17
- @register_downloader(site_keys=["linovelib"])
18
- class LinovelibDownloader(CommonDownloader):
19
- """
20
- Downloader for Linovelib (哔哩轻小说) novels.
21
- """
22
-
23
- def __init__(
24
- self,
25
- fetcher: FetcherProtocol,
26
- parser: ParserProtocol,
27
- config: DownloaderConfig,
28
- ):
29
- super().__init__(fetcher, parser, config, "linovelib")
@@ -1,29 +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.downloaders.registry import register_downloader
10
- from novel_downloader.core.interfaces import (
11
- FetcherProtocol,
12
- ParserProtocol,
13
- )
14
- from novel_downloader.models import DownloaderConfig
15
-
16
-
17
- @register_downloader(site_keys=["sfacg"])
18
- class SfacgDownloader(CommonDownloader):
19
- """
20
- Downloader for sfacg (SF 轻小说) novels.
21
- """
22
-
23
- def __init__(
24
- self,
25
- fetcher: FetcherProtocol,
26
- parser: ParserProtocol,
27
- config: DownloaderConfig,
28
- ):
29
- super().__init__(fetcher, parser, config, "sfacg")
@@ -1,29 +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.downloaders.registry import register_downloader
10
- from novel_downloader.core.interfaces import (
11
- FetcherProtocol,
12
- ParserProtocol,
13
- )
14
- from novel_downloader.models import DownloaderConfig
15
-
16
-
17
- @register_downloader(site_keys=["yamibo"])
18
- class YamiboDownloader(CommonDownloader):
19
- """
20
- Downloader for yamibo (百合会) novels.
21
- """
22
-
23
- def __init__(
24
- self,
25
- fetcher: FetcherProtocol,
26
- parser: ParserProtocol,
27
- config: DownloaderConfig,
28
- ):
29
- super().__init__(fetcher, parser, config, "yamibo")
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- novel_downloader.core.exporters.biquge
4
- --------------------------------------
5
-
6
- """
7
-
8
- __all__ = ["BiqugeExporter"]
9
-
10
- from novel_downloader.core.exporters.registry import register_exporter
11
- from novel_downloader.models import ExporterConfig
12
-
13
- from .common import CommonExporter
14
-
15
-
16
- @register_exporter(site_keys=["biquge", "bqg"])
17
- class BiqugeExporter(CommonExporter):
18
- def __init__(
19
- self,
20
- config: ExporterConfig,
21
- ):
22
- super().__init__(config, site="biquge")
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- novel_downloader.core.exporters.esjzone
4
- ---------------------------------------
5
-
6
- """
7
-
8
- __all__ = ["EsjzoneExporter"]
9
-
10
- from novel_downloader.core.exporters.registry import register_exporter
11
- from novel_downloader.models import ExporterConfig
12
-
13
- from .common import CommonExporter
14
-
15
-
16
- @register_exporter(site_keys=["esjzone"])
17
- class EsjzoneExporter(CommonExporter):
18
- def __init__(
19
- self,
20
- config: ExporterConfig,
21
- ):
22
- super().__init__(config, site="esjzone")
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- novel_downloader.core.exporters.qianbi
4
- --------------------------------------
5
-
6
- """
7
-
8
- __all__ = ["QianbiExporter"]
9
-
10
- from novel_downloader.core.exporters.registry import register_exporter
11
- from novel_downloader.models import ExporterConfig
12
-
13
- from .common import CommonExporter
14
-
15
-
16
- @register_exporter(site_keys=["qianbi"])
17
- class QianbiExporter(CommonExporter):
18
- def __init__(
19
- self,
20
- config: ExporterConfig,
21
- ):
22
- super().__init__(config, site="qianbi")
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- novel_downloader.core.exporters.sfacg
4
- -------------------------------------
5
-
6
- """
7
-
8
- __all__ = ["SfacgExporter"]
9
-
10
- from novel_downloader.core.exporters.registry import register_exporter
11
- from novel_downloader.models import ExporterConfig
12
-
13
- from .common import CommonExporter
14
-
15
-
16
- @register_exporter(site_keys=["sfacg"])
17
- class SfacgExporter(CommonExporter):
18
- def __init__(
19
- self,
20
- config: ExporterConfig,
21
- ):
22
- super().__init__(config, site="sfacg")
@@ -1,22 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- novel_downloader.core.exporters.yamibo
4
- --------------------------------------
5
-
6
- """
7
-
8
- __all__ = ["YamiboExporter"]
9
-
10
- from novel_downloader.core.exporters.registry import register_exporter
11
- from novel_downloader.models import ExporterConfig
12
-
13
- from .common import CommonExporter
14
-
15
-
16
- @register_exporter(site_keys=["yamibo"])
17
- class YamiboExporter(CommonExporter):
18
- def __init__(
19
- self,
20
- config: ExporterConfig,
21
- ):
22
- super().__init__(config, site="yamibo")