parsehub 2.0.20__tar.gz → 2.0.22__tar.gz

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 (69) hide show
  1. {parsehub-2.0.20/src/parsehub.egg-info → parsehub-2.0.22}/PKG-INFO +88 -136
  2. {parsehub-2.0.20 → parsehub-2.0.22}/README.md +87 -135
  3. {parsehub-2.0.20 → parsehub-2.0.22}/pyproject.toml +1 -1
  4. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/cli.py +15 -22
  5. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/base/ytdlp.py +85 -49
  6. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/kuaishou.py +1 -1
  7. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/xhs.py +2 -2
  8. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/douyin.py +15 -5
  9. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/kuaishou.py +37 -17
  10. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/weixin.py +1 -1
  11. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/xhs.py +4 -3
  12. {parsehub-2.0.20 → parsehub-2.0.22/src/parsehub.egg-info}/PKG-INFO +88 -136
  13. {parsehub-2.0.20 → parsehub-2.0.22}/test/test_cli.py +37 -4
  14. {parsehub-2.0.20 → parsehub-2.0.22}/LICENSE +0 -0
  15. {parsehub-2.0.20 → parsehub-2.0.22}/setup.cfg +0 -0
  16. {parsehub-2.0.20 → parsehub-2.0.22}/src/__init__.py +0 -0
  17. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/__init__.py +0 -0
  18. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/cli_config.py +0 -0
  19. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/config/__init__.py +0 -0
  20. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/config/config.py +0 -0
  21. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/errors.py +0 -0
  22. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/__init__.py +0 -0
  23. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/base/__init__.py +0 -0
  24. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/base/base.py +0 -0
  25. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/__init__.py +0 -0
  26. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/bilibili.py +0 -0
  27. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/coolapk.py +0 -0
  28. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/douyin.py +0 -0
  29. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/facebook.py +0 -0
  30. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/instagram.py +0 -0
  31. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/pipix.py +0 -0
  32. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/threads.py +0 -0
  33. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/tieba.py +0 -0
  34. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/tiktok.py +0 -0
  35. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/twitter.py +0 -0
  36. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/weibo.py +0 -0
  37. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/weixin.py +0 -0
  38. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/xiaoheihe.py +0 -0
  39. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/youtube.py +0 -0
  40. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/parsers/parser/zuiyou.py +0 -0
  41. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/__init__.py +0 -0
  42. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/bilibili.py +0 -0
  43. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/coolapk.py +0 -0
  44. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/instagram.py +0 -0
  45. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/pipix.py +0 -0
  46. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/threads.py +0 -0
  47. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/tieba.py +0 -0
  48. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/tiktok.py +0 -0
  49. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/twitter.py +0 -0
  50. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/weibo.py +0 -0
  51. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/xiaoheihe.py +0 -0
  52. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/provider_api/zuiyou.py +0 -0
  53. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/types/__init__.py +0 -0
  54. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/types/callback.py +0 -0
  55. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/types/media_file.py +0 -0
  56. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/types/media_ref.py +0 -0
  57. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/types/platform.py +0 -0
  58. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/types/post.py +0 -0
  59. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/types/result.py +0 -0
  60. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/utils/downloader.py +0 -0
  61. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/utils/media_info.py +0 -0
  62. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub/utils/utils.py +0 -0
  63. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub.egg-info/SOURCES.txt +0 -0
  64. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub.egg-info/dependency_links.txt +0 -0
  65. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub.egg-info/entry_points.txt +0 -0
  66. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub.egg-info/requires.txt +0 -0
  67. {parsehub-2.0.20 → parsehub-2.0.22}/src/parsehub.egg-info/top_level.txt +0 -0
  68. {parsehub-2.0.20 → parsehub-2.0.22}/test/test_cli_config.py +0 -0
  69. {parsehub-2.0.20 → parsehub-2.0.22}/test/test_core_offline.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: parsehub
3
- Version: 2.0.20
3
+ Version: 2.0.22
4
4
  Summary: 轻量、异步、开箱即用的社交媒体聚合解析库
5
5
  Author-email: 梓澪 <zilingmio@gmail.com>
6
6
  License: MIT
@@ -51,9 +51,9 @@ Dynamic: license-file
51
51
  [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
52
52
  [![GitHub stars](https://img.shields.io/github/stars/z-mio/parsehub?style=social)](https://github.com/z-mio/parsehub)
53
53
 
54
- 轻量、异步、开箱即用的社交媒体解析与媒体下载库,支持 17+ 平台。
54
+ 轻量, 异步, 开箱即用的社交媒体解析与媒体下载库, 支持 17+ 平台
55
55
 
56
- [安装](#-安装) · [CLI 快速使用](#-cli-快速使用) · [Python API](#-python-api-快速使用) · [支持平台](#-支持平台) · [高级用法](#-高级用法) · [TG Bot](https://github.com/z-mio/parse_hub_bot)
56
+ [安装](#-安装) · [快速开始](#-快速开始) · [高级用法](#-高级用法) · [TG Bot](https://github.com/z-mio/parse_hub_bot)
57
57
 
58
58
  </div>
59
59
 
@@ -63,26 +63,43 @@ Dynamic: license-file
63
63
 
64
64
  - 🌍 **广泛的平台支持** — 覆盖国内外 17+ 主流社交媒体平台
65
65
  - 🧹 **链接清理** — 自动提取分享文案中的链接,并清除可移除的跟踪参数
66
- - 🎬 **多媒体解析** — 支持视频、图文、动图、实况照片和富文本文章
66
+ - 🎬 **多媒体解析** — 支持视频, 图文, 动图, 实况照片和富文本文章
67
67
  - 📦 **同步 / 异步 API** — 同时提供 `async/await` 与 `*_sync` 调用方式
68
+ - 🐚 **CLI 支持** — 命令行原生支持,轻量开箱即用
68
69
  - 🤖 **Telegram Bot** — 基于本项目的 Bot 已上线 → [@ParseHuBot](https://t.me/ParsehuBot)
69
70
 
70
- ## 📦 安装
71
+ ## 🌐 支持平台
71
72
 
72
- > Python 3.12
73
+ | 平台 | 视频 | 图文 | 其他 |
74
+ |-----------------|:--:|:--:|-------|
75
+ | **Twitter / X** | ✅ | ✅ | |
76
+ | **Instagram** | ✅ | ✅ | |
77
+ | **YouTube** | ✅ | | 🎵 音乐 |
78
+ | **Facebook** | ✅ | | |
79
+ | **Threads** | ✅ | ✅ | |
80
+ | **Bilibili** | ✅ | | 📝 动态 |
81
+ | **抖音** | ✅ | ✅ | |
82
+ | **TikTok** | ✅ | ✅ | |
83
+ | **微博** | ✅ | ✅ | |
84
+ | **小红书** | ✅ | ✅ | |
85
+ | **贴吧** | ✅ | ✅ | |
86
+ | **微信公众号** | | ✅ | |
87
+ | **快手** | ✅ | | |
88
+ | **酷安** | | ✅ | |
89
+ | **皮皮虾** | ✅ | ✅ | |
90
+ | **最右** | ✅ | ✅ | |
91
+ | **小黑盒** | ✅ | ✅ | |
73
92
 
74
- ### 安装为命令行工具
93
+ ## 📦 安装
75
94
 
76
- 如果主要把 ParseHub 当作 CLI 使用,推荐用 `pipx` 安装隔离的命令行环境:
95
+ ### CLI 安装
77
96
 
78
97
  ```bash
79
98
  pipx install "parsehub[cli]"
80
- ph --help
99
+ ph -v
81
100
  ```
82
101
 
83
- ### 安装为 Python
84
-
85
- 如果要在项目代码中调用 Python API:
102
+ ### Python 库安装
86
103
 
87
104
  ```bash
88
105
  # uv
@@ -90,21 +107,17 @@ uv add parsehub
90
107
 
91
108
  # pip
92
109
  pip install parsehub
93
- ```
94
110
 
95
- 项目内也需要完整 CLI 配置能力时,可安装 `cli` 扩展:
96
-
97
- ```bash
98
- # uv
111
+ # 需要完整 CLI 能力时,可安装 `cli` 扩展
99
112
  uv add "parsehub[cli]"
100
-
101
- # pip
102
113
  pip install "parsehub[cli]"
103
114
  ```
104
115
 
105
- ## 🚀 CLI 快速使用
116
+ ## 🚀 快速开始
117
+
118
+ ### CLI
106
119
 
107
- 解析链接或分享文案:
120
+ #### 解析链接或分享文案
108
121
 
109
122
  ```bash
110
123
  parsehub "https://example.com/post/1"
@@ -113,62 +126,49 @@ parsehub "https://example.com/post/1"
113
126
  ph "https://example.com/post/1"
114
127
  ```
115
128
 
116
- 下载媒体:
129
+ #### 下载媒体
117
130
 
118
131
  ```bash
119
- parsehub download "https://example.com/post/1" -o ./downloads
120
-
121
- # 短命令等价写法
122
- ph d "https://example.com/post/1" -o ./downloads
132
+ ph d "https://example.com/post/1"
123
133
  ```
124
134
 
125
- 查看支持的平台:
135
+ #### 常用命令
126
136
 
127
- ```bash
128
- ph platforms
129
- #
130
- ph ls
131
- ```
137
+ | 命令 | 说明 |
138
+ |--------------------------------------------------|-------------|
139
+ | `ph ls` | 查看支持的平台 |
140
+ | `ph set proxy <platform> <proxy>` | 设置解析代理和下载代理 |
141
+ | `ph set proxy <platform> <proxy> --for download` | 只设置下载代理 |
142
+ | `ph set cookie <platform>` | 保存平台 Cookie |
143
+ | `ph set list` | 查看配置列表 |
144
+ | `ph set show <platform>` | 查看平台配置 |
132
145
 
133
- 配置某个平台的代理和 Cookie:
134
-
135
- ```bash
136
- # 同时设置解析代理和下载代理
137
- ph set proxy xhs http://127.0.0.1:7890
138
-
139
- # 只设置下载代理
140
- ph set proxy xhs http://127.0.0.1:7891 --for download
141
-
142
- # 保存 Cookie,输入时不会显示在终端里
143
- ph set cookie xhs
144
-
145
- # 查看配置状态
146
- ph set list
147
- ph set show xhs
148
- ```
149
-
150
- 配置会自动按平台应用到后续解析和下载;临时覆盖时仍可直接传参数:
146
+ 配置会自动按平台应用到后续解析和下载; 临时覆盖时仍可直接传参数:
151
147
 
152
148
  ```bash
153
149
  ph "https://example.com/post/1" --proxy http://127.0.0.1:7890
154
150
  ph d "https://example.com/post/1" --parse-proxy http://127.0.0.1:7890 --cookie "key=value"
155
151
  ```
156
152
 
157
- ## 🐍 Python API 快速使用
153
+ ---
154
+
155
+ ### Python API
158
156
 
159
- ### 同步解析
157
+ #### 同步解析
160
158
 
161
159
  ```python
162
160
  from parsehub import ParseHub
163
161
 
164
162
  ph = ParseHub()
165
163
  result = ph.parse_sync("https://www.xiaoheihe.cn/app/bbs/link/174972336")
164
+ print(result)
165
+
166
+ dr = result.download_sync()
167
+ print(dr)
166
168
 
167
- print(result.title)
168
- print(result.raw_url)
169
169
  ```
170
170
 
171
- ### 异步解析
171
+ #### 异步解析
172
172
 
173
173
  ```python
174
174
  import asyncio
@@ -180,84 +180,39 @@ async def main():
180
180
  result = await ph.parse("https://tieba.baidu.com/p/9939510114")
181
181
  print(result)
182
182
 
183
+ dr = await result.download()
184
+ print(dr)
183
185
 
184
- asyncio.run(main())
185
- ```
186
186
 
187
- ### 下载媒体
188
-
189
- ```python
190
- from parsehub import ParseHub
191
-
192
- ph = ParseHub()
193
- result = ph.download_sync(
194
- "https://www.xiaoheihe.cn/app/bbs/link/174972336",
195
- path="./downloads",
196
- save_metadata=True,
197
- )
198
-
199
- print(result.output_dir)
200
- print(result.media)
187
+ asyncio.run(main())
201
188
  ```
202
189
 
203
- 需要 Cookie 登录或解析代理时,可以直接在下载时传入解析参数:
190
+ #### 下载媒体
204
191
 
205
192
  ```python
206
193
  from parsehub import ParseHub
207
194
 
208
195
  ph = ParseHub()
209
- downloaded = ph.download_sync(
210
- "https://example.com",
211
- path="./downloads",
212
- parse_cookie="key1=value1; key2=value2",
213
- parse_proxy="http://127.0.0.1:7890",
214
- save_metadata=True,
215
- )
196
+ result = ph.download_sync("https://www.xiaoheihe.cn/app/bbs/link/174972336")
197
+ print(result)
216
198
  ```
217
199
 
218
- ## 🌐 支持平台
219
-
220
- | 平台 | 视频 | 图文 | 其他 |
221
- |:----------------|:--:|:--:|:------|
222
- | **Twitter / X** | ✅ | ✅ | |
223
- | **Instagram** | ✅ | ✅ | |
224
- | **YouTube** | ✅ | | 🎵 音乐 |
225
- | **Facebook** | ✅ | | |
226
- | **Threads** | ✅ | ✅ | |
227
- | **Bilibili** | ✅ | | 📝 动态 |
228
- | **抖音** | ✅ | ✅ | |
229
- | **TikTok** | ✅ | ✅ | |
230
- | **微博** | ✅ | ✅ | |
231
- | **小红书** | ✅ | ✅ | |
232
- | **贴吧** | ✅ | ✅ | |
233
- | **微信公众号** | | ✅ | |
234
- | **快手** | ✅ | | |
235
- | **酷安** | | ✅ | |
236
- | **皮皮虾** | ✅ | ✅ | |
237
- | **最右** | ✅ | ✅ | |
238
- | **小黑盒** | ✅ | ✅ | |
239
-
240
- > 可通过 `ph ls` 或 `ParseHub().get_platforms()` 获取当前版本实际注册的平台列表。
241
-
242
200
  ## 🔑 高级用法
243
201
 
244
- ### 分享文案与平台识别
245
-
246
- `url` 参数可以直接传分享文案,ParseHub 会自动提取其中的第一个链接:
202
+ ### Cookie 登录与代理
247
203
 
248
- ```python
249
- from parsehub import ParseHub
204
+ 需要登录态的平台可传 Cookie, 解析入口使用 `cookie` / `proxy`, 下载入口使用 `parse_cookie` / `parse_proxy` 作为解析阶段参数
250
205
 
251
- ph = ParseHub()
252
- text = "复制这条分享 https://tieba.baidu.com/p/9939510114 后打开"
206
+ 当前支持 Cookie 的平台:
253
207
 
254
- print(ph.get_platform(text))
255
- print(ph.parse_sync(text).raw_url)
256
- ```
257
-
258
- ### Cookie 登录与代理
259
-
260
- 需要登录态的平台可传 Cookie;解析入口使用 `cookie` / `proxy`,下载入口使用 `parse_cookie` / `parse_proxy` 作为解析阶段参数。
208
+ - `Twitter / X`
209
+ - `Instagram`
210
+ - `YouTube`
211
+ - `Bilibili`
212
+ - `抖音`
213
+ - `TikTok`
214
+ - `快手`
215
+ - `小红书`
261
216
 
262
217
  ```python
263
218
  from parsehub import ParseHub
@@ -270,13 +225,9 @@ result = ph.parse_sync(
270
225
  )
271
226
  ```
272
227
 
273
- Cookie 支持多种格式:
228
+ Cookie 支持多种格式:
274
229
 
275
230
  ```python
276
- from parsehub import ParseHub
277
-
278
- ph = ParseHub()
279
-
280
231
  # Cookie header 字符串
281
232
  ph.parse_sync("https://example.com", cookie="key1=value1; key2=value2")
282
233
 
@@ -287,24 +238,17 @@ ph.parse_sync("https://example.com", cookie='{"key1": "value1", "key2": "value2"
287
238
  ph.parse_sync("https://example.com", cookie={"key1": "value1", "key2": "value2"})
288
239
  ```
289
240
 
290
- 当前支持 Cookie 的平台包括:
291
-
292
- - `Twitter / X`
293
- - `Instagram`
294
- - `YouTube`
295
- - `Bilibili`
296
- - `抖音`
297
- - `TikTok`
298
- - `快手`
241
+ ---
299
242
 
300
243
  ### 下载进度回调
301
244
 
302
245
  ```python
303
246
  from parsehub import ParseHub
247
+ from parsehub.types import ProgressUnit
304
248
 
305
249
 
306
250
  class ProgressTracker:
307
- async def __call__(self, current: int, total: int, unit: str, *args, task_name: str = "", **kwargs):
251
+ async def __call__(self, current: int, total: int, unit: ProgressUnit, *args, task_name: str = "", **kwargs):
308
252
  print(f"[{task_name}] {current}/{total} ({unit})")
309
253
 
310
254
 
@@ -317,10 +261,12 @@ result = ParseHub().download_sync(
317
261
  )
318
262
  ```
319
263
 
320
- `unit` 可能为:
264
+ `unit` 值:
265
+
266
+ - `bytes`: 单文件下载时的字节进度
267
+ - `count`: 多文件下载时的文件数量进度
321
268
 
322
- - `bytes`:单文件下载时的字节进度
323
- - `count`:多文件下载时的文件数量进度
269
+ ---
324
270
 
325
271
  ### 保存 metadata.json
326
272
 
@@ -336,6 +282,8 @@ result = ParseHub().download_sync(
336
282
  print(result.output_dir / "metadata.json")
337
283
  ```
338
284
 
285
+ ---
286
+
339
287
  ### 全局配置
340
288
 
341
289
  ```python
@@ -345,6 +293,8 @@ from parsehub.config import GlobalConfig
345
293
  GlobalConfig.default_save_dir = Path("./downloads")
346
294
  ```
347
295
 
296
+ ---
297
+
348
298
  ### 错误处理
349
299
 
350
300
  ```python
@@ -359,6 +309,8 @@ except ParseError as exc:
359
309
  print(f"解析失败: {exc}")
360
310
  ```
361
311
 
312
+ ---
313
+
362
314
  ## 🤝 参考项目
363
315
 
364
316
  - [Evil0ctal/Douyin_TikTok_Download_API](https://github.com/Evil0ctal/Douyin_TikTok_Download_API)
@@ -375,6 +327,6 @@ except ParseError as exc:
375
327
 
376
328
  <div align="center">
377
329
 
378
- **如果这个项目对你有帮助,欢迎点个 ⭐ Star!**
330
+ **如果这个项目对你有帮助,欢迎点个 ⭐ Star!**
379
331
 
380
332
  </div>