parsehub 2.0.18__tar.gz → 2.0.19__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.
- {parsehub-2.0.18/src/parsehub.egg-info → parsehub-2.0.19}/PKG-INFO +103 -93
- {parsehub-2.0.18 → parsehub-2.0.19}/README.md +98 -92
- {parsehub-2.0.18 → parsehub-2.0.19}/pyproject.toml +8 -1
- parsehub-2.0.19/src/parsehub/cli.py +661 -0
- parsehub-2.0.19/src/parsehub/cli_config.py +292 -0
- {parsehub-2.0.18 → parsehub-2.0.19/src/parsehub.egg-info}/PKG-INFO +103 -93
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub.egg-info/SOURCES.txt +2 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub.egg-info/requires.txt +5 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/test/test_cli.py +182 -6
- parsehub-2.0.19/test/test_cli_config.py +79 -0
- parsehub-2.0.18/src/parsehub/cli.py +0 -313
- {parsehub-2.0.18 → parsehub-2.0.19}/LICENSE +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/setup.cfg +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/__init__.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/__init__.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/config/__init__.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/config/config.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/errors.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/__init__.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/base/__init__.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/base/base.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/base/ytdlp.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/__init__.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/bilibili.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/coolapk.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/douyin.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/facebook.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/instagram.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/kuaishou.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/pipix.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/threads.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/tieba.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/tiktok.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/twitter.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/weibo.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/weixin.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/xhs.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/xiaoheihe.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/youtube.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/parsers/parser/zuiyou.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/__init__.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/bilibili.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/coolapk.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/douyin.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/instagram.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/kuaishou.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/pipix.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/threads.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/tieba.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/tiktok.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/twitter.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/weibo.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/weixin.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/xhs.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/xiaoheihe.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/provider_api/zuiyou.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/types/__init__.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/types/callback.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/types/media_file.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/types/media_ref.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/types/platform.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/types/post.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/types/result.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/utils/downloader.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/utils/media_info.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub/utils/utils.py +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub.egg-info/dependency_links.txt +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub.egg-info/entry_points.txt +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/src/parsehub.egg-info/top_level.txt +0 -0
- {parsehub-2.0.18 → parsehub-2.0.19}/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.
|
|
3
|
+
Version: 2.0.19
|
|
4
4
|
Summary: 轻量、异步、开箱即用的社交媒体聚合解析库
|
|
5
5
|
Author-email: 梓澪 <zilingmio@gmail.com>
|
|
6
6
|
License: MIT
|
|
@@ -35,6 +35,10 @@ Requires-Dist: python-slugify[unidecode]>=8.0.4
|
|
|
35
35
|
Requires-Dist: opencv-python-headless>=4.13.0.92
|
|
36
36
|
Requires-Dist: cryptography>=46.0.6
|
|
37
37
|
Requires-Dist: gmssl>=3.2.2
|
|
38
|
+
Provides-Extra: cli
|
|
39
|
+
Requires-Dist: argcomplete>=3.6.3; extra == "cli"
|
|
40
|
+
Requires-Dist: keyring>=25.6.0; extra == "cli"
|
|
41
|
+
Requires-Dist: platformdirs>=4.5.1; extra == "cli"
|
|
38
42
|
Dynamic: license-file
|
|
39
43
|
|
|
40
44
|
<div align="center">
|
|
@@ -50,7 +54,7 @@ Dynamic: license-file
|
|
|
50
54
|
|
|
51
55
|
轻量、异步、开箱即用的社交媒体解析与媒体下载库,支持 17+ 平台。
|
|
52
56
|
|
|
53
|
-
[
|
|
57
|
+
[安装](#-安装) · [CLI 快速使用](#-cli-快速使用) · [Python API](#-python-api-快速使用) · [支持平台](#-支持平台) · [高级用法](#-高级用法) · [TG Bot](https://github.com/z-mio/parse_hub_bot)
|
|
54
58
|
|
|
55
59
|
</div>
|
|
56
60
|
|
|
@@ -64,43 +68,94 @@ Dynamic: license-file
|
|
|
64
68
|
- 📦 **同步 / 异步 API** — 同时提供 `async/await` 与 `*_sync` 调用方式
|
|
65
69
|
- 🤖 **Telegram Bot** — 基于本项目的 Bot 已上线 → [@ParseHuBot](https://t.me/ParsehuBot)
|
|
66
70
|
|
|
67
|
-
##
|
|
71
|
+
## 📦 安装
|
|
68
72
|
|
|
69
|
-
|
|
70
|
-
|:----------------|:--:|:--:|:------|
|
|
71
|
-
| **Twitter / X** | ✅ | ✅ | |
|
|
72
|
-
| **Instagram** | ✅ | ✅ | |
|
|
73
|
-
| **YouTube** | ✅ | | 🎵 音乐 |
|
|
74
|
-
| **Facebook** | ✅ | | |
|
|
75
|
-
| **Threads** | ✅ | ✅ | |
|
|
76
|
-
| **Bilibili** | ✅ | | 📝 动态 |
|
|
77
|
-
| **抖音** | ✅ | ✅ | |
|
|
78
|
-
| **TikTok** | ✅ | ✅ | |
|
|
79
|
-
| **微博** | ✅ | ✅ | |
|
|
80
|
-
| **小红书** | ✅ | ✅ | |
|
|
81
|
-
| **贴吧** | ✅ | ✅ | |
|
|
82
|
-
| **微信公众号** | | ✅ | |
|
|
83
|
-
| **快手** | ✅ | | |
|
|
84
|
-
| **酷安** | | ✅ | |
|
|
85
|
-
| **皮皮虾** | ✅ | ✅ | |
|
|
86
|
-
| **最右** | ✅ | ✅ | |
|
|
87
|
-
| **小黑盒** | ✅ | ✅ | |
|
|
73
|
+
> Python ≥ 3.12
|
|
88
74
|
|
|
89
|
-
|
|
75
|
+
### 安装为命令行工具
|
|
90
76
|
|
|
91
|
-
|
|
77
|
+
如果主要把 ParseHub 当作 CLI 使用,推荐用 `pipx` 安装隔离的命令行环境:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
pipx install "parsehub[cli]"
|
|
81
|
+
ph --help
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 安装为 Python 库
|
|
85
|
+
|
|
86
|
+
如果要在项目代码中调用 Python API:
|
|
92
87
|
|
|
93
88
|
```bash
|
|
94
|
-
# uv
|
|
89
|
+
# uv
|
|
95
90
|
uv add parsehub
|
|
96
91
|
|
|
97
92
|
# pip
|
|
98
93
|
pip install parsehub
|
|
99
94
|
```
|
|
100
95
|
|
|
101
|
-
|
|
96
|
+
项目内也需要完整 CLI 配置能力时,可安装 `cli` 扩展:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# uv
|
|
100
|
+
uv add "parsehub[cli]"
|
|
101
|
+
|
|
102
|
+
# pip
|
|
103
|
+
pip install "parsehub[cli]"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## 🚀 CLI 快速使用
|
|
107
|
+
|
|
108
|
+
解析链接或分享文案:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
parsehub "https://example.com/post/1"
|
|
112
|
+
|
|
113
|
+
# 短命令等价写法
|
|
114
|
+
ph "https://example.com/post/1"
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
下载媒体:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
parsehub download "https://example.com/post/1" -o ./downloads
|
|
121
|
+
|
|
122
|
+
# 短命令等价写法
|
|
123
|
+
ph d "https://example.com/post/1" -o ./downloads
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
查看支持的平台:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
ph platforms
|
|
130
|
+
# 或
|
|
131
|
+
ph ls
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
配置某个平台的代理和 Cookie:
|
|
102
135
|
|
|
103
|
-
|
|
136
|
+
```bash
|
|
137
|
+
# 同时设置解析代理和下载代理
|
|
138
|
+
ph set proxy xhs http://127.0.0.1:7890
|
|
139
|
+
|
|
140
|
+
# 只设置下载代理
|
|
141
|
+
ph set proxy xhs http://127.0.0.1:7891 --for download
|
|
142
|
+
|
|
143
|
+
# 保存 Cookie,输入时不会显示在终端里
|
|
144
|
+
ph set cookie xhs
|
|
145
|
+
|
|
146
|
+
# 查看配置状态
|
|
147
|
+
ph set list
|
|
148
|
+
ph set show xhs
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
配置会自动按平台应用到后续解析和下载;临时覆盖时仍可直接传参数:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
ph "https://example.com/post/1" --proxy http://127.0.0.1:7890
|
|
155
|
+
ph d "https://example.com/post/1" --parse-proxy http://127.0.0.1:7890 --cookie "key=value"
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## 🐍 Python API 快速使用
|
|
104
159
|
|
|
105
160
|
### 同步解析
|
|
106
161
|
|
|
@@ -161,74 +216,29 @@ downloaded = ph.download_sync(
|
|
|
161
216
|
)
|
|
162
217
|
```
|
|
163
218
|
|
|
164
|
-
##
|
|
165
|
-
|
|
166
|
-
### 解析
|
|
167
|
-
|
|
168
|
-
```python
|
|
169
|
-
await ph.parse(url, proxy=None, cookie=None)
|
|
170
|
-
ph.parse_sync(url, proxy=None, cookie=None)
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
- `url`:分享文案或分享链接,支持自动提取文本中的第一个链接
|
|
174
|
-
- `proxy`:解析阶段使用的代理
|
|
175
|
-
- `cookie`:解析阶段使用的 Cookie,支持字符串、JSON 字符串或字典
|
|
176
|
-
|
|
177
|
-
### 下载
|
|
178
|
-
|
|
179
|
-
```python
|
|
180
|
-
await ph.download(
|
|
181
|
-
url,
|
|
182
|
-
path=None,
|
|
183
|
-
callback=None,
|
|
184
|
-
callback_args=(),
|
|
185
|
-
callback_kwargs=None,
|
|
186
|
-
proxy=None,
|
|
187
|
-
parse_proxy=None,
|
|
188
|
-
parse_cookie=None,
|
|
189
|
-
save_metadata=False,
|
|
190
|
-
)
|
|
191
|
-
|
|
192
|
-
ph.download_sync(
|
|
193
|
-
url,
|
|
194
|
-
path=None,
|
|
195
|
-
callback=None,
|
|
196
|
-
callback_args=(),
|
|
197
|
-
callback_kwargs=None,
|
|
198
|
-
proxy=None,
|
|
199
|
-
parse_proxy=None,
|
|
200
|
-
parse_cookie=None,
|
|
201
|
-
save_metadata=False,
|
|
202
|
-
)
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
- `path`:下载保存目录,默认使用 `GlobalConfig.default_save_dir`
|
|
206
|
-
- `proxy`:下载媒体时使用的代理
|
|
207
|
-
- `parse_proxy` / `parse_cookie`:下载前解析链接时使用的代理和 Cookie
|
|
208
|
-
- `save_metadata`:是否在输出目录保存 `metadata.json`
|
|
209
|
-
|
|
210
|
-
### 工具方法
|
|
211
|
-
|
|
212
|
-
```python
|
|
213
|
-
ph.get_platform(url)
|
|
214
|
-
ph.get_platforms()
|
|
215
|
-
await ph.get_raw_url(url, proxy=None, clean_all=True)
|
|
216
|
-
```
|
|
217
|
-
|
|
218
|
-
- `get_platform()`:返回匹配到的平台枚举,未匹配时返回 `None`
|
|
219
|
-
- `get_platforms()`:返回所有已注册平台的 `id`、名称和支持类型
|
|
220
|
-
- `get_raw_url()`:获取清理后的原始链接
|
|
219
|
+
## 🌐 支持平台
|
|
221
220
|
|
|
222
|
-
|
|
221
|
+
| 平台 | 视频 | 图文 | 其他 |
|
|
222
|
+
|:----------------|:--:|:--:|:------|
|
|
223
|
+
| **Twitter / X** | ✅ | ✅ | |
|
|
224
|
+
| **Instagram** | ✅ | ✅ | |
|
|
225
|
+
| **YouTube** | ✅ | | 🎵 音乐 |
|
|
226
|
+
| **Facebook** | ✅ | | |
|
|
227
|
+
| **Threads** | ✅ | ✅ | |
|
|
228
|
+
| **Bilibili** | ✅ | | 📝 动态 |
|
|
229
|
+
| **抖音** | ✅ | ✅ | |
|
|
230
|
+
| **TikTok** | ✅ | ✅ | |
|
|
231
|
+
| **微博** | ✅ | ✅ | |
|
|
232
|
+
| **小红书** | ✅ | ✅ | |
|
|
233
|
+
| **贴吧** | ✅ | ✅ | |
|
|
234
|
+
| **微信公众号** | | ✅ | |
|
|
235
|
+
| **快手** | ✅ | | |
|
|
236
|
+
| **酷安** | | ✅ | |
|
|
237
|
+
| **皮皮虾** | ✅ | ✅ | |
|
|
238
|
+
| **最右** | ✅ | ✅ | |
|
|
239
|
+
| **小黑盒** | ✅ | ✅ | |
|
|
223
240
|
|
|
224
|
-
|
|
225
|
-
- `result.type`:内容类型,如 `video`、`image`、`multimedia`、`richtext`
|
|
226
|
-
- `result.title`:标题
|
|
227
|
-
- `result.content`:纯文本正文
|
|
228
|
-
- `result.raw_url`:清理后的原始链接
|
|
229
|
-
- `result.media`:媒体引用或媒体引用列表
|
|
230
|
-
- `result.to_dict()`:转为可序列化字典
|
|
231
|
-
- `result.download()` / `result.download_sync()`:下载当前解析结果中的媒体
|
|
241
|
+
> 可通过 `ph ls` 或 `ParseHub().get_platforms()` 获取当前版本实际注册的平台列表。
|
|
232
242
|
|
|
233
243
|
## 🔑 高级用法
|
|
234
244
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
轻量、异步、开箱即用的社交媒体解析与媒体下载库,支持 17+ 平台。
|
|
13
13
|
|
|
14
|
-
[
|
|
14
|
+
[安装](#-安装) · [CLI 快速使用](#-cli-快速使用) · [Python API](#-python-api-快速使用) · [支持平台](#-支持平台) · [高级用法](#-高级用法) · [TG Bot](https://github.com/z-mio/parse_hub_bot)
|
|
15
15
|
|
|
16
16
|
</div>
|
|
17
17
|
|
|
@@ -25,43 +25,94 @@
|
|
|
25
25
|
- 📦 **同步 / 异步 API** — 同时提供 `async/await` 与 `*_sync` 调用方式
|
|
26
26
|
- 🤖 **Telegram Bot** — 基于本项目的 Bot 已上线 → [@ParseHuBot](https://t.me/ParsehuBot)
|
|
27
27
|
|
|
28
|
-
##
|
|
28
|
+
## 📦 安装
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|:----------------|:--:|:--:|:------|
|
|
32
|
-
| **Twitter / X** | ✅ | ✅ | |
|
|
33
|
-
| **Instagram** | ✅ | ✅ | |
|
|
34
|
-
| **YouTube** | ✅ | | 🎵 音乐 |
|
|
35
|
-
| **Facebook** | ✅ | | |
|
|
36
|
-
| **Threads** | ✅ | ✅ | |
|
|
37
|
-
| **Bilibili** | ✅ | | 📝 动态 |
|
|
38
|
-
| **抖音** | ✅ | ✅ | |
|
|
39
|
-
| **TikTok** | ✅ | ✅ | |
|
|
40
|
-
| **微博** | ✅ | ✅ | |
|
|
41
|
-
| **小红书** | ✅ | ✅ | |
|
|
42
|
-
| **贴吧** | ✅ | ✅ | |
|
|
43
|
-
| **微信公众号** | | ✅ | |
|
|
44
|
-
| **快手** | ✅ | | |
|
|
45
|
-
| **酷安** | | ✅ | |
|
|
46
|
-
| **皮皮虾** | ✅ | ✅ | |
|
|
47
|
-
| **最右** | ✅ | ✅ | |
|
|
48
|
-
| **小黑盒** | ✅ | ✅ | |
|
|
30
|
+
> Python ≥ 3.12
|
|
49
31
|
|
|
50
|
-
|
|
32
|
+
### 安装为命令行工具
|
|
51
33
|
|
|
52
|
-
|
|
34
|
+
如果主要把 ParseHub 当作 CLI 使用,推荐用 `pipx` 安装隔离的命令行环境:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
pipx install "parsehub[cli]"
|
|
38
|
+
ph --help
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 安装为 Python 库
|
|
42
|
+
|
|
43
|
+
如果要在项目代码中调用 Python API:
|
|
53
44
|
|
|
54
45
|
```bash
|
|
55
|
-
# uv
|
|
46
|
+
# uv
|
|
56
47
|
uv add parsehub
|
|
57
48
|
|
|
58
49
|
# pip
|
|
59
50
|
pip install parsehub
|
|
60
51
|
```
|
|
61
52
|
|
|
62
|
-
|
|
53
|
+
项目内也需要完整 CLI 配置能力时,可安装 `cli` 扩展:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# uv
|
|
57
|
+
uv add "parsehub[cli]"
|
|
58
|
+
|
|
59
|
+
# pip
|
|
60
|
+
pip install "parsehub[cli]"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 🚀 CLI 快速使用
|
|
64
|
+
|
|
65
|
+
解析链接或分享文案:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
parsehub "https://example.com/post/1"
|
|
69
|
+
|
|
70
|
+
# 短命令等价写法
|
|
71
|
+
ph "https://example.com/post/1"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
下载媒体:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
parsehub download "https://example.com/post/1" -o ./downloads
|
|
78
|
+
|
|
79
|
+
# 短命令等价写法
|
|
80
|
+
ph d "https://example.com/post/1" -o ./downloads
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
查看支持的平台:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
ph platforms
|
|
87
|
+
# 或
|
|
88
|
+
ph ls
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
配置某个平台的代理和 Cookie:
|
|
63
92
|
|
|
64
|
-
|
|
93
|
+
```bash
|
|
94
|
+
# 同时设置解析代理和下载代理
|
|
95
|
+
ph set proxy xhs http://127.0.0.1:7890
|
|
96
|
+
|
|
97
|
+
# 只设置下载代理
|
|
98
|
+
ph set proxy xhs http://127.0.0.1:7891 --for download
|
|
99
|
+
|
|
100
|
+
# 保存 Cookie,输入时不会显示在终端里
|
|
101
|
+
ph set cookie xhs
|
|
102
|
+
|
|
103
|
+
# 查看配置状态
|
|
104
|
+
ph set list
|
|
105
|
+
ph set show xhs
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
配置会自动按平台应用到后续解析和下载;临时覆盖时仍可直接传参数:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
ph "https://example.com/post/1" --proxy http://127.0.0.1:7890
|
|
112
|
+
ph d "https://example.com/post/1" --parse-proxy http://127.0.0.1:7890 --cookie "key=value"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## 🐍 Python API 快速使用
|
|
65
116
|
|
|
66
117
|
### 同步解析
|
|
67
118
|
|
|
@@ -122,74 +173,29 @@ downloaded = ph.download_sync(
|
|
|
122
173
|
)
|
|
123
174
|
```
|
|
124
175
|
|
|
125
|
-
##
|
|
126
|
-
|
|
127
|
-
### 解析
|
|
128
|
-
|
|
129
|
-
```python
|
|
130
|
-
await ph.parse(url, proxy=None, cookie=None)
|
|
131
|
-
ph.parse_sync(url, proxy=None, cookie=None)
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
- `url`:分享文案或分享链接,支持自动提取文本中的第一个链接
|
|
135
|
-
- `proxy`:解析阶段使用的代理
|
|
136
|
-
- `cookie`:解析阶段使用的 Cookie,支持字符串、JSON 字符串或字典
|
|
137
|
-
|
|
138
|
-
### 下载
|
|
139
|
-
|
|
140
|
-
```python
|
|
141
|
-
await ph.download(
|
|
142
|
-
url,
|
|
143
|
-
path=None,
|
|
144
|
-
callback=None,
|
|
145
|
-
callback_args=(),
|
|
146
|
-
callback_kwargs=None,
|
|
147
|
-
proxy=None,
|
|
148
|
-
parse_proxy=None,
|
|
149
|
-
parse_cookie=None,
|
|
150
|
-
save_metadata=False,
|
|
151
|
-
)
|
|
152
|
-
|
|
153
|
-
ph.download_sync(
|
|
154
|
-
url,
|
|
155
|
-
path=None,
|
|
156
|
-
callback=None,
|
|
157
|
-
callback_args=(),
|
|
158
|
-
callback_kwargs=None,
|
|
159
|
-
proxy=None,
|
|
160
|
-
parse_proxy=None,
|
|
161
|
-
parse_cookie=None,
|
|
162
|
-
save_metadata=False,
|
|
163
|
-
)
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
- `path`:下载保存目录,默认使用 `GlobalConfig.default_save_dir`
|
|
167
|
-
- `proxy`:下载媒体时使用的代理
|
|
168
|
-
- `parse_proxy` / `parse_cookie`:下载前解析链接时使用的代理和 Cookie
|
|
169
|
-
- `save_metadata`:是否在输出目录保存 `metadata.json`
|
|
170
|
-
|
|
171
|
-
### 工具方法
|
|
172
|
-
|
|
173
|
-
```python
|
|
174
|
-
ph.get_platform(url)
|
|
175
|
-
ph.get_platforms()
|
|
176
|
-
await ph.get_raw_url(url, proxy=None, clean_all=True)
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
- `get_platform()`:返回匹配到的平台枚举,未匹配时返回 `None`
|
|
180
|
-
- `get_platforms()`:返回所有已注册平台的 `id`、名称和支持类型
|
|
181
|
-
- `get_raw_url()`:获取清理后的原始链接
|
|
176
|
+
## 🌐 支持平台
|
|
182
177
|
|
|
183
|
-
|
|
178
|
+
| 平台 | 视频 | 图文 | 其他 |
|
|
179
|
+
|:----------------|:--:|:--:|:------|
|
|
180
|
+
| **Twitter / X** | ✅ | ✅ | |
|
|
181
|
+
| **Instagram** | ✅ | ✅ | |
|
|
182
|
+
| **YouTube** | ✅ | | 🎵 音乐 |
|
|
183
|
+
| **Facebook** | ✅ | | |
|
|
184
|
+
| **Threads** | ✅ | ✅ | |
|
|
185
|
+
| **Bilibili** | ✅ | | 📝 动态 |
|
|
186
|
+
| **抖音** | ✅ | ✅ | |
|
|
187
|
+
| **TikTok** | ✅ | ✅ | |
|
|
188
|
+
| **微博** | ✅ | ✅ | |
|
|
189
|
+
| **小红书** | ✅ | ✅ | |
|
|
190
|
+
| **贴吧** | ✅ | ✅ | |
|
|
191
|
+
| **微信公众号** | | ✅ | |
|
|
192
|
+
| **快手** | ✅ | | |
|
|
193
|
+
| **酷安** | | ✅ | |
|
|
194
|
+
| **皮皮虾** | ✅ | ✅ | |
|
|
195
|
+
| **最右** | ✅ | ✅ | |
|
|
196
|
+
| **小黑盒** | ✅ | ✅ | |
|
|
184
197
|
|
|
185
|
-
|
|
186
|
-
- `result.type`:内容类型,如 `video`、`image`、`multimedia`、`richtext`
|
|
187
|
-
- `result.title`:标题
|
|
188
|
-
- `result.content`:纯文本正文
|
|
189
|
-
- `result.raw_url`:清理后的原始链接
|
|
190
|
-
- `result.media`:媒体引用或媒体引用列表
|
|
191
|
-
- `result.to_dict()`:转为可序列化字典
|
|
192
|
-
- `result.download()` / `result.download_sync()`:下载当前解析结果中的媒体
|
|
198
|
+
> 可通过 `ph ls` 或 `ParseHub().get_platforms()` 获取当前版本实际注册的平台列表。
|
|
193
199
|
|
|
194
200
|
## 🔑 高级用法
|
|
195
201
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "parsehub"
|
|
3
|
-
version = "2.0.
|
|
3
|
+
version = "2.0.19"
|
|
4
4
|
description = "轻量、异步、开箱即用的社交媒体聚合解析库"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12.0"
|
|
@@ -44,6 +44,13 @@ dependencies = [
|
|
|
44
44
|
parsehub = "parsehub.cli:main"
|
|
45
45
|
ph = "parsehub.cli:main"
|
|
46
46
|
|
|
47
|
+
[project.optional-dependencies]
|
|
48
|
+
cli = [
|
|
49
|
+
"argcomplete>=3.6.3",
|
|
50
|
+
"keyring>=25.6.0",
|
|
51
|
+
"platformdirs>=4.5.1",
|
|
52
|
+
]
|
|
53
|
+
|
|
47
54
|
[dependency-groups]
|
|
48
55
|
dev = [
|
|
49
56
|
"ruff>=0.14.14",
|