<p align="center">
<img src="https://github.com/Johnserf-Seed/f2/raw/main/docs/public/f2-logo-with-shadow-svg@0.5x.svg" alt="Logo">
</p>
[![Downloads](https://pepy.tech/badge/f2/month)](https://pepy.tech/project/f2)
[![PyPI version](https://badge.fury.io/py/f2.svg)](https://badge.fury.io/py/f2)
[![Dev Branch](https://badgen.net/badge/branch/v0.0.1.7-pw2/blue)](https://github.com/Johnserf-Seed/f2/tree/v0.0.1.7-pw2)
[![Discord](https://img.shields.io/discord/1146473603450282004?label=Discord)](https://discord.gg/3PhtPmgHf8)
[![codecov](https://codecov.io/gh/Johnserf-Seed/f2/graph/badge.svg?token=T9DH4QPZSS)](https://codecov.io/gh/Johnserf-Seed/f2)
[![TikHub](https://img.shields.io/badge/%E8%B5%9E%E5%8A%A9%E5%95%86-TikHub-orange?style=flat-square&logo=tiktok)](https://beta-web.tikhub.io/users/signup?referral_code=6hLcGD94)
[![APACHE-2.0](https://img.shields.io/github/license/johnserf-seed/f2)](https://github.com/Johnserf-Seed/f2/blob/main/LICENSE)
[简体中文 readme](https://github.com/Johnserf-Seed/f2/blob/main/README.md) • [English readme](https://github.com/Johnserf-Seed/f2/blob/main/README.en.md)
`F2` 是一个 [Python](https://pypi.org/project/f2/) 库,提供多平台的作品下载与接口数据处理。支持 `DouYin`、`TikTok`、`Twitter`、`WeiBo` 等平台,且方便适配更多平台。
<img src='https://github.com/user-attachments/assets/92a70f27-c93f-422e-ba9a-040060323654'>
## 🚀 快速入门
### ⚙️ 安装
- [必备条件](https://f2.wiki/install#%E5%BF%85%E5%A4%87%E6%9D%A1%E4%BB%B6)
- [包管理器安装](https://f2.wiki/install#%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8%E5%AE%89%E8%A3%85)
- [编译安装](https://f2.wiki/install#%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85)
### ⚡ 快速使用
- [启动和运行](https://f2.wiki/quick-start#%E5%90%AF%E5%8A%A8%E5%92%8C%E8%BF%90%E8%A1%8C)
- [下一步是什么?](https://f2.wiki/quick-start#%E4%B8%8B%E4%B8%80%E6%AD%A5%E6%98%AF%E4%BB%80%E4%B9%88)
### 📋 配置文件
- [主配置文件](https://f2.wiki/site-config#%E4%B8%BB%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)
- [初始化配置文件](https://f2.wiki/site-config#%E5%88%9D%E5%A7%8B%E5%8C%96%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)
- [自定义配置文件](https://f2.wiki/site-config#%E8%87%AA%E5%AE%9A%E4%B9%89%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)
- [配置Cookie](https://f2.wiki/site-config#%E9%85%8D%E7%BD%AECookie)
- [配置文件的位置](https://f2.wiki/site-config#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9A%84%E4%BD%8D%E7%BD%AE)
- [下一步是什么?](https://f2.wiki/site-config#%E4%B8%8B%E4%B8%80%E6%AD%A5%E6%98%AF%E4%BB%80%E4%B9%88)
### 💻 命令行
- [CLI临时配置](https://f2.wiki/cli#cli%E4%B8%B4%E6%97%B6%E9%85%8D%E7%BD%AE)
- [拓展](https://f2.wiki/cli#%E6%8B%93%E5%B1%95)
- [应用命令行](https://f2.wiki/cli#%E5%BA%94%E7%94%A8%E5%91%BD%E4%BB%A4%E8%A1%8C)
### 📚 进阶用法
- [DouYin 批量采集直播流](https://f2.wiki/advance-guide#%E6%89%B9%E9%87%8F%E9%87%87%E9%9B%86%E7%9B%B4%E6%92%AD%E6%B5%81)
- [DouYin 直播弹幕转发](https://f2.wiki/advance-guide#%E7%9B%B4%E6%92%AD%E5%BC%B9%E5%B9%95%E8%BD%AC%E5%8F%91)
- 文档还在进一步更新中...
## 🧐 FAQ
- [常见问题](https://f2.wiki/faq)
## 👏 团队
- [团队介绍](https://f2.wiki/team)
### 📘 开发指南
- [开发者必看](https://f2.wiki/guide/what-is-f2)
### 📝 API示例
- [使用示例](https://f2.wiki/guide/api-examples)
### 🧩 开发者接口
- [Bark](https://f2.wiki/guide/apps/bark/)
- [DouYin](https://f2.wiki/guide/apps/douyin/)
- [TikTok](https://f2.wiki/guide/apps/tiktok/)
- [Twitter](https://f2.wiki/guide/apps/twitter/)
- [WeiBo](https://f2.wiki/guide/apps/weibo/)
### 🖥️ 命令行指引
- [Bark](https://f2.wiki/guide/apps/bark/cli)
- [DouYin](https://f2.wiki/guide/apps/douyin/cli)
- [TikTok](https://f2.wiki/guide/apps/tiktok/cli)
- [Twitter](https://f2.wiki/guide/apps/twitter/cli)
- [WeiBo](https://f2.wiki/guide/apps/weibo/cli)
## ✨ 新变化
当下载或升级到 `F2` 的不同版本时,请注意以下关键的版本更新。
<details>
<summary>🛠️ v0.0.1.7-pw2</summary>
- 🚀 **新增 Bark 应用支持**
请前往 App Store 下载 [Bark](https://apps.apple.com/cn/app/id1403753865),并在 [F2 配置文件](https://f2.wiki/site-config#%E4%B8%BB%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6) 中完成相关配置。
- 🛡️ **开放 `ab` 算法**
已开源满血版 `ab` 算法,支持自定义 `UA`。请确保自定义 `UA` 符合规范。
- 📡 **新增直播弹幕转发功能**
支持 `douyin` 与 `tiktok` 直播弹幕转发,请根据 [WSS 配置指南](https://f2.wiki/guide/what-is-f2#wss%E9%85%8D%E7%BD%AE) 完成相应参数配置。
- 🔔 **启用通知推送**
如需启用应用通知推送,请在 [F2 配置文件](https://f2.wiki/site-config#%E4%B8%BB%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6) 中设置 `enable_bark` 参数为 `true`。
- 📄 **更多变更详情**
请查看完整的 [ChangeLog](https://github.com/Johnserf-Seed/f2/blob/main/CHANGELOG.md#0017---2024-12-31)。
</details>
<details>
<summary>📌 v0.0.1.6-pw2</summary>
- 🛠️ **配置文件格式已更新**
如果你使用旧版配置文件,请注意进行迁移。
- 🌍 **时区标准化**
所有时间戳的默认时区已设置为 `UTC/GMT+08:00`。
- 📁 **文件格式调整**
- `douyin` 直播流文件名调整为 `flv`。
- 图集格式调整回 `webp`。
- 🔄 **错误修复**
修复了 `tiktok` 视频地址 `403` 错误。
👉 [了解更多解决方案](https://f2.wiki/faq#tiktok-403-forbidden)
- 🛡️ **算法优化**
`douyin` 现在默认使用 `ab` 算法进行请求。(满血版 `ab` 算法即将开源)
- 📄 **更多变更详情**
👉 [查看 ChangeLog](https://github.com/Johnserf-Seed/f2/blob/main/CHANGELOG.md#0016---2024-05-04)
</details>
<details>
<summary>📡 v0.0.1.5-pw2</summary>
- 🛡️ **自定义 UA 支持**
`XBogus` 参数现在支持自定义 `UA`,请确保 `UA` 符合规范。
- 📊 **数据库重建**
重建后的数据库包含接口的原始数据。
👉 如需保留旧记录,请注意迁移或备份。
- 🔄 **返回类型统一**
所有 `fetch` 方法的返回类型已统一为过滤器类型,请注意相关变化。
- 🛠️ **新功能**
添加了 `_to_raw` 方法,可将过滤器转换为原始接口数据。
- 📝 **文件名模板更新**
如果文件名不符合新规范,将抛出异常,请检查并调整。
- 🔗 **链接解析修复**
修复了 `douyin` 合集页链接无法解析的问题。
👉 [了解更多](#抖音合集作品)
- 📄 **更多变更详情**
👉 [查看 ChangeLog](https://github.com/Johnserf-Seed/f2/blob/main/CHANGELOG.md#0015---2024-04-04)
</details>
## 📑 文档
`F2` 的目标是提供一个简单易用的接口,让用户可以快速获取作品数据。
在 `preview` 版本中很多功能没有完善,如果你发现了问题,请在 `F2` 项目中提交 `issue`。
[项目文档](https://f2.wiki/) 还在完善中,存在滞后的情况,请保持关注。
## 🗓️ Todo
- 将在 `0.0.1.8` 版本中添加 `BiliBili` & `NetEaseMusic` 支持。
- 将在 `0.0.1.8` 版本中维护更多的 `API` 与 `CLI` 功能。
- 优化 `F2` 的 `CLI` 体验。
- 添加 `Socket` 代理支持。
- 添加 `Cookie` 池,`Proxy` 池,`User-Agent` 池等支持。
- 添加 `F2` 的 `WebAPI` 版本。
- [更多计划](https://github.com/Johnserf-Seed/f2/discussions/203)
## 🐛 更新
[ChangeLog](https://github.com/Johnserf-Seed/f2/blob/main/CHANGELOG.md)
## 💡 应用&功能
功能状态:🟢代表已经实现,🟡代表正在实现,🟤代表暂时不实现,🔵代表未来实现,🔴代表将会弃用。
账号状态:⚪代表未知,🟣代表需要登录(无视自己账号隐私设置),⚫代表不需要登录(游客状态能看到的)。
完整的功能列表请查看 [API文档](https://f2.wiki/guide/api-examples)。
<details>
<summary> 📠 Bark </summary>
|功能|账号状态|接口|功能状态|
|---|---|---|---|
|发送通知(GET)|⚪|`fetch_bark_notification`|🟢|
|发送通知(POST)|⚪|`post_bark_notification`|🟢|
|发送加密通知|⚪|`cipher_bark_notification`|🟢|
|工具类|类名|接口|功能状态|
|---|---|---|---|
| 管理客户端配置 | `ClientConfManager` | - | 🟢 |
| 生成随机数字字节 | - | `generate_numeric_bytes` | 🟢 |
</details>
<details>
<summary> 📸 DouYin </summary>
- 🟣 表示需要登录才可以下载仅自己可见的作品、收藏作品、收藏夹作品或点赞作品等。(登录后无视自己的私密设置、可获取个性化内容)
- ⚫ 表示不需要登录下载公开的作品、收藏夹作品、点赞作品等。(仅下载他人公开可见作品与页面)
|功能|账号状态|接口|功能状态|
|---|---|---|---|
|用户信息|🟣⚫|`fetch_user_profile`|🟢|
|单个作品(视频、图集、日常)|🟣⚫|`fetch_one_video`|🟢|
|live图集|🟣⚫|`fetch_one_video`|🟢|
|主页作品|🟣⚫|`fetch_user_post_videos`|🟢|
|点赞作品|🟣⚫|`fetch_user_like_videos`|🟢|
|收藏夹作品|🟣⚫|`fetch_user_collects_videos`|🟢|
|收藏作品|🟣|`fetch_user_collection_videos`|🟢|
|收藏原声|🟣|`fetch_user_music_collection`|🟢|
|收藏合集|🟣|`fetch_user_mix_collection`|🔵|
|收藏短剧|🟣|`fetch_user_series_collection`|🟤|
|合集作品|⚫|`fetch_user_mix_videos`|🟢|
|首页推荐作品|🟣⚫|`fetch_user_feed_videos`|🟢|
|相似推荐作品|⚫|`fetch_related_videos`|🟢|
|直播间信息(流下载)|⚫|`fetch_user_live_videos`、`fetch_user_live_videos_by_room_id`|🟢|
|直播间弹幕负载|⚫|`fetch_live_im`|🟢|
|直播间弹幕|⚫|`fetch_live_danmaku`|🟢|
|查询用户基本信息|🟣⚫|`fetch_query_user`|🟢|
|关注用户开播|🟣⚫|`fetch_user_following_lives`|🟢|
|关注用户信息|🟣⚫|`fetch_user_following`|🟢|
|粉丝用户信息|🟣⚫|`fetch_user_follower`|🟢|
|关注用户作品|🟣⚫|`fetch_user_following_videos`|🟤|
|粉丝用户作品|🟣⚫|`fetch_user_follower_videos`|🟤|
|朋友作品|🟣|`fetch_friend_feed_videos`|🟢|
|增加播放量|🟣⚫|`fetch_post_stats`|🟢|
|搜索视频|⚫|`fetch_search_videos`|🔵|
|搜索用户|⚫|`fetch_search_users`|🔵|
|搜索直播|⚫|`fetch_search_lives`|🔵|
|猜你想搜(相关搜索)|⚫|`fetch_search_suggest`|🟤|
|抖音热点|⚫|`fetch_hot_search`|🟤|
|作品评论|🟣⚫|`fetch_video_comments`|🔵|
|观看历史|🟣|`fetch_user_history_read`|🟤|
|稍后再看|🟣|`fetch_user_watch_later`|🟤|
|...|...|...|...|
|工具类|类名|接口|功能状态|
|---|---|---|---|
| 管理客户端配置 | `ClientConfManager` | | 🟢 |
| 生成真实msToken | `TokenManager` | `gen_real_msToken` | 🟢 |
| 生成虚假msToken | `TokenManager` | `gen_false_msToken` | 🟢 |
| 生成ttwid | `TokenManager` | `gen_ttwid` | 🟢 |
| 生成webid | `TokenManager` | `gen_webid` | 🟢 |
| 生成verify_fp | `VerifyFpManager` | `gen_verify_fp` | 🟢 |
| 生成s_v_web_id | `VerifyFpManager` | `gen_s_v_web_id` | 🟢 |
| 生成直播signature | `DouyinWebcastSignature` | `get_signature` | 🟢 |
| ~~使用接口模型生成wss签名参数~~ | ~~`WebcastSignatureManager`~~ | ~~`model_2_endpoint`~~ | 🔴 |
| 使用接口地址生成Xb参数 | `XBogusManager` | `str_2_endpoint` | 🟢 |
| 使用接口模型生成Xb参数 | `XBogusManager` | `model_2_endpoint` | 🟢 |
| 使用接口地址生成Ab参数 | `ABogusManager` | `str_2_endpoint` | 🟢 |
| 使用接口模型生成Ab参数 | `ABogusManager` | `model_2_endpoint` | 🟢 |
| 提取单个用户id | `SecUserIdFetcher` | `get_sec_user_id` | 🟢 |
| 提取列表用户id | `SecUserIdFetcher` | `get_all_sec_user_id` | 🟢 |
| 提取单个作品id | `AwemeIdFetcher` | `get_aweme_id` | 🟢 |
| 提取列表作品id | `AwemeIdFetcher` | `get_all_aweme_id` | 🟢 |
| 提取单个合集id | `MixIdFetcher` | `get_mix_id` | 🟢 |
| 提取列表合集id | `MixIdFetcher` | `get_all_mix_id` | 🟢 |
| 提取单个直播间号 | `WebCastIdFetcher` | `get_webcast_id` | 🟢 |
| 提取列表直播间号 | `WebCastIdFetcher` | `get_all_webcast_id` | 🟢 |
| 全局格式化文件名 | - | `format_file_name` | 🟢 |
| 创建用户目录 | - | `create_user_folder` | 🟢 |
| 重命名用户目录 | - | `rename_user_folder` | 🟢 |
| 创建或重命名用户目录 | - | `create_or_rename_user_folder` | 🟢 |
| ~~显示二维码~~ | - | ~~`show_qrcode`~~ | 🔴 |
| json歌词转lrc歌词 | - | `json_2_lrc` | 🟢 |
</details>
<details>
<summary> 🎶 TikTok </summary>
- 🟣 表示需要登录才可以下载仅自己可见的作品、收藏作品、收藏夹作品或点赞作品等。(登录后无视自己的私密设置、可获取个性化内容)
- ⚫ 表示不需要登录下载公开的作品、收藏夹作品、点赞作品等。(仅下载他人公开可见作品与页面)
|功能|账号状态|接口|功能状态|
|---|---|---|---|
|用户信息|🟣⚫|`fetch_user_profile`|🟢|
|单个作品|🟣⚫|`fetch_one_video`|🟢|
|主页作品|🟣⚫|`fetch_user_post_videos`|🟢|
|点赞作品|🟣⚫|`fetch_user_like_videos`|🟢|
|收藏作品|🟣⚫|`fetch_user_collect_videos`|🟢|
|播放列表|🟣⚫|`fetch_play_list`|🟢|
|播放列表作品|🟣⚫|`fetch_user_mix_videos`|🟢|
|作品搜索|🟣⚫|`fetch_search_videos`|🟢|
|直播间信息(流下载)|⚫|`fetch_user_live_videos`|🟢|
|直播间弹幕负载|⚫|`fetch_live_im`|🟢|
|直播间弹幕|⚫|`fetch_live_danmaku`|🟢|
|检查开播|🟣⚫|`fetch_check_live_alive`|🟢|
|...|...|...|...|
|工具类|类名|接口|功能状态|
|---|---|---|---|
| 管理客户端配置 | `ClientConfManager` | | 🟢 |
| 生成真实msToken | `TokenManager` | `gen_real_msToken` | 🟢 |
| 生成虚假msToken | `TokenManager` | `gen_false_msToken` | 🟢 |
| 生成ttwid | `TokenManager` | `gen_ttwid` | 🟢 |
| 生成odin_tt | `TokenManager` | `gen_odin_tt` | 🟢 |
| 使用接口地址生成Xb参数 | `XBogusManager` | `str_2_endpoint` | 🟢 |
| 使用接口模型生成Xb参数 | `XBogusManager` | `model_2_endpoint` | 🟢 |
| 提取单个用户id | `SecUserIdFetcher` | `get_secuid` | 🟢 |
| 提取列表用户id | `SecUserIdFetcher` | `get_all_secuid` | 🟢 |
| 提取单个用户唯一id | `SecUserIdFetcher` | `get_uniqueid` | 🟢 |
| 提取列表用户唯一id | `SecUserIdFetcher` | `get_all_uniqueid` | 🟢 |
| 提取列表用户id | `SecUserIdFetcher` | `get_all_secUid` | 🟢 |
| 提取单个作品id | `AwemeIdFetcher` | `get_aweme_id` | 🟢 |
| 提取列表作品id | `AwemeIdFetcher` | `get_all_aweme_id` | 🟢 |
| 生成deviceId | `DeviceIdManager` | `gen_device_id` | 🟢 |
| 生成devideId列表 | `DeviceIdManager` | `gen_device_ids` | 🟢 |
| 全局格式化文件名 | - | `format_file_name` | 🟢 |
| 创建用户目录 | - | `create_user_folder` | 🟢 |
| 重命名用户目录 | - | `rename_user_folder` | 🟢 |
| 创建或重命名用户目录 | - | `create_or_rename_user_folder` | 🟢 |
</details>
<details>
<summary> 🐦 Twitter </summary>
|功能|账号状态|接口|功能状态|
|---|---|---|---|
|推文详情|🟣⚫|`fetch_tweet_detail`|🟢|
|用户信息|🟣⚫|`fetch_user_profile`|🟢|
|主页推文|🟣⚫|`fetch_post_tweet`|🟢|
|喜欢推文|🟣|`fetch_like_tweet`|🟢|
|收藏推文|🟣|`fetch_bookmark_tweet`|🟢|
|工具类|类名|接口|功能状态|
|---|---|---|---|
| 管理客户端配置 | `ClientConfManager` | | 🟢 |
| 提取用户唯一ID | `UniqueIdFetcher` | `get_unique_id` | 🟢 |
| 提取列表用户唯一ID | `UniqueIdFetcher` | `get_all_unique_ids` | 🟢 |
| 提取推文ID | `TweetIdFetcher` | `get_tweet_id` | 🟢 |
| 提取列表推文ID | `TweetIdFetcher` | `get_all_tweet_ids` | 🟢 |
| 全局格式化文件名 | - | `format_file_name` | 🟢 |
| 创建用户目录 | - | `create_user_folder` | 🟢 |
| 重命名用户目录 | - | `rename_user_folder` | 🟢 |
| 创建或重命名用户目录 | - | `create_or_rename_user_folder` | 🟢 |
| 提取推文文案 | - | `extract_desc` | 🟢 |
</details>
<details>
<summary> 📱 WeiBo </summary>
|功能|账号状态|接口|功能状态|
|---|---|---|---|
|用户信息|🟣⚫|`fetch_user_info`|🟢|
|用户详情|🟣⚫|`fetch_user_detail`|🟢|
|主页微博|🟣⚫|`fetch_user_weibo`|🟢|
|微博详情|🟣⚫|`fetch_weibo_detail`|🟢|
|工具类|类名|接口|功能状态|
|---|---|---|---|
| 管理客户端配置 | `ClientConfManager` | | 🟢 |
| 生成访客 Cookie | `VisitorManager` | `gen_visitor` | 🟢 |
| 提取微博 ID | `WeiboIdFetcher` | `get_weibo_id` | 🟢 |
| 提取列表微博 ID | `WeiboIdFetcher` | `get_all_weibo_id` | 🟢 |
| 提取微博用户 ID | `WeiboUidFetcher` | `get_weibo_uid` | 🟢 |
| 提取列表微博用户 ID | `WeiboUidFetcher` | `get_all_weibo_uid` | 🟢 |
| 提取微博用户昵称 | `WeiboScreenNameFetcher` | `get_weibo_screen_name` | 🟢 |
| 提取列表微博用户昵称 | `WeiboScreenNameFetcher` | `get_all_weibo_screen_name` | 🟢 |
| 全局格式化文件名 | - | `format_file_name` | 🟢 |
| 创建用户目录 | - | `create_user_folder` | 🟢 |
| 重命名用户目录 | - | `rename_user_folder` | 🟢 |
| 创建或重命名用户目录 | - | `create_or_rename_user_folder`| 🟢 |
| 提取微博文案 | - | `extract_desc` | 🟢 |
</details>
## 📸 截图
<details>
<summary> 🎬 Bark </summary>
### 发送通知(GET)
<img src='https://github.com/user-attachments/assets/9c977737-c172-420a-9d7f-6f05bc843957'>
<img src='https://github.com/user-attachments/assets/9a59f9d6-cc8a-48bb-9a75-d075a9e13498'>
### 发送通知(POST)
<img src='https://github.com/user-attachments/assets/7a3e9054-a156-4be7-bf93-90d0963f8390'>
<img src='https://github.com/user-attachments/assets/9a59f9d6-cc8a-48bb-9a75-d075a9e13498'>
### 发送加密通知
<img src='https://github.com/user-attachments/assets/8a3cb67d-e1b6-40d3-b4c1-543d098eb481'>
<img src='https://github.com/user-attachments/assets/9a59f9d6-cc8a-48bb-9a75-d075a9e13498'>
</details>
<details>
<summary> 🎬 DouYin </summary>
### 抖音单个作品
<img src='https://github.com/user-attachments/assets/01b62283-322a-42f1-96d7-bc1431cc0e1b'>
### 抖音主页作品
<img src='https://github.com/user-attachments/assets/6353a309-9f8d-4284-9f90-267d683ac9cd'>
### 抖音点赞作品
<img src='https://github.com/user-attachments/assets/018d2b6f-d874-41f9-9c20-e1a17bdf16e0'>
### 抖音收藏作品
<img src='https://github.com/user-attachments/assets/0334b1b0-1b61-4cbb-b47a-0ad0ce82e315'>
### 抖音收藏夹作品
<img src='https://github.com/user-attachments/assets/ef9fc0e4-5d4f-4ad6-9fa1-e305f9b60c83'>
### 抖音收藏原声
<img src='https://github.com/user-attachments/assets/414e20eb-0837-48b5-8a7b-622e4d0aafe1'>
### 抖音合集作品
支持合集里任意作品链接解析
<img src='https://github.com/user-attachments/assets/4cd85a9f-d684-4c02-8106-fce567f05f0b'>
合集链接解析
<img src='https://github.com/user-attachments/assets/04a3553b-93f8-4f99-a9f2-689bef881899'>
### 抖音直播录制
单个直播录制
<img src='https://github.com/user-attachments/assets/63c31ad3-3026-4ae8-8fc1-752ba2117915'>
批量直播录制
<img src='https://github.com/user-attachments/assets/6e8caaa7-2bfe-4542-b896-ae4f3c70877f'>
### 抖音相关推荐
<img src="https://github.com/user-attachments/assets/c64731a1-5383-4810-af15-8125330856a8">
### 抖音好友作品
<img src="https://github.com/user-attachments/assets/c73feec7-f158-4eb1-be3b-9a957507ef45">
### 抖音直播弹幕
<video src="https://github.com/Johnserf-Seed/f2/assets/40727745/500d1eaf-59ba-44ba-849b-666c0ddf8469" width="70%" height="auto" autoplay loop style="border-radius: 8px; overflow: hidden;"></video>
</details>
<details>
<summary> 🎬 TikTok </summary>
### TikTok单个作品
<img src='https://github.com/user-attachments/assets/1ddee9ec-cd4c-4dc0-81a0-970e5d1cb831'>
### TikTok主页作品
<img src='https://github.com/user-attachments/assets/a45f2186-cf0a-4c21-8502-267147936e06'>
### TikTok点赞作品
<img src='https://github.com/user-attachments/assets/11e8e70f-ee32-422e-a79d-f65276b12652'>
### TikTok收藏作品
<img src='https://github.com/user-attachments/assets/bcd584fa-8c8c-4846-8be0-3c7d2c85ec5d'>
### TikTok播放列表作品
<img src='https://github.com/user-attachments/assets/c7ba8740-b9a0-4a8d-98cc-ae8fab2393e2'>
### TikTok作品搜索
<img src='https://github.com/user-attachments/assets/c69b76e5-b168-4966-af5d-c9325af2015e'>
### TikTok直播弹幕
<video src="https://github.com/Johnserf-Seed/f2/assets/40727745/500d1eaf-59ba-44ba-849b-666c0ddf8469" width="70%" height="auto" autoplay loop style="border-radius: 8px; overflow: hidden;"></video>
ps. 懒得录了,放的douyin的弹幕,效果一样的。
</details>
<details>
<summary> 🎬 Twitter </summary>
### x单个推文
<img src='https://github.com/user-attachments/assets/5858e19f-e4e6-4279-a1a4-56ac2878afde'>
### x主页推文
<img src='https://github.com/user-attachments/assets/43f9665e-3086-4078-a093-59a8081bb77c'>
### x喜欢推文
<img src='https://github.com/user-attachments/assets/c8b592f6-84a5-4a7d-b8df-9a8f2e25abb0'>
### x收藏推文
<img src='https://github.com/user-attachments/assets/e4aa7adf-52de-4a7c-a1f4-f61423047ac8'>
</details>
<details>
<summary> 🎬 WeiBo </summary>
### WeiBo单个微博
<img src='https://github.com/user-attachments/assets/4038766d-d601-42a9-8f35-6243b3744bd7'>
### WeiBo主页微博
<img src='https://github.com/user-attachments/assets/e02c5007-4c17-4d97-a648-6aabb328a618'>
</details>
## 📦 结构
<details>
<summary>📁 项目目录</summary>
```bash
.
|___.coverage
|___.github
| |___dependabot.yml
| |___ISSUE_TEMPLATE
| | |___ask-question.md
| | |___bug-report.md
| | |___feature_request.md
| |___workflows
| | |___Codecov.yml
| | |___deploy.yml
| | |___issue_similarity.yml
|___.gitignore
|___.vscode
| |___launch.json
| |___settings.json
|___babel.cfg
|___CHANGELOG.md
|___CNAME
|___CODE_OF_CONDUCT.md
|___CONTRIBUTING.en.md
|___CONTRIBUTING.md
|___CONTRIBUTORS.en.md
|___CONTRIBUTORS.md
|___coverage.xml
|___docs
| |___.vitepress
| | |___config.mts
| | |___theme
| | | |___index.ts
| | | |___Layout.vue
| | | |___styles
| | | | |___vars.css
| |___advance-guide.md
| |___cli.md
| |___en
| | |___advance-guide.md
| | |___api-examples.md
| | |___cli.md
| | |___guide
| | | |___api-examples.md
| | | |___apps
| | | | |___bark
| | | | | |___cli.md
| | | | | |___index.md
| | | | |___douyin
| | | | | |___cli.md
| | | | | |___index.md
| | | | |___f2
| | | | | |___cli.md
| | | | | |___index.md
| | | | |___tiktok
| | | | | |___cli.md
| | | | | |___index.md
| | | | |___twitter
| | | | | |___cli.md
| | | | | |___index.md
| | | | |___weibo
| | | | | |___cli.md
| | | | | |___index.md
| | | |___what-is-f2.md
| | |___index.md
| | |___install.md
| | |___markdown-examples.md
| | |___question-answer
| | | |___qa.md
| | |___quick-start.md
| | |___site-config.md
| | |___snippets
| | | |___bark
| | | | |___ciphertext.sh
| | | | |___client-config.py
| | | | |___generate-bytes.py
| | | | |___notification.py
| | | |___douyin
| | | | |___abogus.py
| | | | |___aweme-id.py
| | | | |___aweme-related.py
| | | | |___client-config.py
| | | | |___format-file-name.py
| | | | |___json-2-lrc.py
| | | | |___mix-id.py
| | | | |___one-video.py
| | | | |___post-stats.py
| | | | |___query-user.py
| | | | |___sec-user-id.py
| | | | |___show-qrcode.py
| | | | |___sso-login.py
| | | | |___support-link.md
| | | | |___token-manager.py
| | | | |___user-collection.py
| | | | |___user-collects.py
| | | | |___user-feed.py
| | | | |___user-folder.py
| | | | |___user-follow-live.py
| | | | |___user-follower.py
| | | | |___user-following.py
| | | | |___user-friend.py
| | | | |___user-get-add.py
| | | | |___user-like.py
| | | | |___user-live-im-fetch.py
| | | | |___user-live-room-id.py
| | | | |___user-live.py
| | | | |___user-mix.py
| | | | |___user-post.py
| | | | |___user-profile.py
| | | | |___video-get-add.py
| | | | |___webcast-id.py
| | | | |___webcast-signature.py
| | | | |___xbogus.py
| | | |___QA.md
| | | |___set-debug.py
| | | |___tiktok
| | | | |___aweme-id.py
| | | | |___check-live-alive.py
| | | | |___client-config.py
| | | | |___device-id.py
| | | | |___format-file-name.py
| | | | |___one-video.py
| | | | |___sec-uid.py
| | | | |___token-manager.py
| | | | |___unique-id.py
| | | | |___user-collect.py
| | | | |___user-folder.py
| | | | |___user-get-add.py
| | | | |___user-like.py
| | | | |___user-live-im-fetch.py
| | | | |___user-mix.py
| | | | |___user-playlist.py
| | | | |___user-post.py
| | | | |___user-profile.py
| | | | |___video-get-add.py
| | | | |___xbogus.py
| | | |___twitter
| | | | |___client-config.py
| | | | |___extract-desc.py
| | | | |___format-file-name.py
| | | | |___one-tweet.py
| | | | |___tweet-ids.py
| | | | |___user-bookmark.py
| | | | |___user-folder.py
| | | | |___user-get-add.py
| | | | |___user-like.py
| | | | |___user-profile.py
| | | | |___user-tweet.py
| | | | |___user-unique-ids.py
| | | |___weibo
| | | | |___client-config.py
| | | | |___extract-desc.py
| | | | |___extract-uid.py
| | | | |___format-file-name.py
| | | | |___one-weibo.py
| | | | |___user-detail.py
| | | | |___user-folder.py
| | | | |___user-get-add.py
| | | | |___user-profile-by-name.py
| | | | |___user-profile.py
| | | | |___user-weibo.py
| | | | |___visitor-cookie.py
| | | | |___weibo-id.py
| | | | |___weibo-screen-name.py
| | | | |___weibo-uid.py
| | |___team.md
| |___faq.md
| |___guide
| | |___api-examples.md
| | |___apps
| | | |___bark
| | | | |___cli.md
| | | | |___index.md
| | | |___douyin
| | | | |___cli.md
| | | | |___index.md
| | | |___f2
| | | | |___cli.md
| | | | |___index.md
| | | |___tiktok
| | | | |___cli.md
| | | | |___index.md
| | | |___twitter
| | | | |___cli.md
| | | | |___index.md
| | | |___weibo
| | | | |___cli.md
| | | | |___index.md
| | |___what-is-f2.md
| |___index.md
| |___install.md
| |___package.json
| |___public
| | |___bark
| | | |___bark-ciphertext-setting.jpg
| | | |___bark-ciphertext.jpg
| | | |___bark-key.jpg
| | | |___bark-token.jpg
| | |___douyin
| | | |___batch-lives.png
| | | |___cli-start-2.png
| | | |___cli-start.png
| | | |___code-start-2.png
| | | |___code-start.png
| | | |___log-2-console.png
| | | |___pytest-ok.png
| | | |___set-debug.png
| | | |___wss-connect.png
| | |___f2-help.png
| | |___f2-logo-with-no-shadow.png
| | |___f2-logo-with-shadow-mini.png
| | |___f2-logo-with-shadow-svg@0.25x.svg
| | |___f2-logo-with-shadow-svg@0.5x.svg
| | |___f2-logo-with-shadow-svg@0.75x.svg
| | |___f2-logo-with-shadow-svg@1.0x.svg
| | |___f2-logo-with-shadow-svg@1.5x.svg
| | |___f2-logo-with-shadow-svg@2.0x.svg
| | |___f2-logo-with-shadow.png
| | |___f2-logo.ico
| |___quick-start.md
| |___site-config.md
| |___snippets
| | |___bark
| | | |___ciphertext.sh
| | | |___client-config.py
| | | |___generate-bytes.py
| | | |___notification.py
| | |___douyin
| | | |___abogus.py
| | | |___aweme-id.py
| | | |___aweme-related.py
| | | |___batch-lives.py
| | | |___client-config.py
| | | |___format-file-name.py
| | | |___json-2-lrc.py
| | | |___mix-id.py
| | | |___one-video.py
| | | |___post-stats.py
| | | |___query-user.py
| | | |___sec-user-id.py
| | | |___show-qrcode.py
| | | |___sso-login.py
| | | |___support-link.md
| | | |___token-manager.py
| | | |___user-collection.py
| | | |___user-collects.py
| | | |___user-feed.py
| | | |___user-folder.py
| | | |___user-follow-live.py
| | | |___user-follower.py
| | | |___user-following.py
| | | |___user-friend.py
| | | |___user-get-add.py
| | | |___user-like.py
| | | |___user-live-im-fetch.py
| | | |___user-live-room-id.py
| | | |___user-live.py
| | | |___user-mix.py
| | | |___user-post.py
| | | |___user-profile.py
| | | |___video-get-add.py
| | | |___webcast-id.py
| | | |___webcast-signature.py
| | | |___xbogus.py
| | |___set-debug.py
| | |___tiktok
| | | |___aweme-id.py
| | | |___check-live-alive.py
| | | |___client-config.py
| | | |___device-id.py
| | | |___format-file-name.py
| | | |___one-video.py
| | | |___sec-uid.py
| | | |___token-manager.py
| | | |___unique-id.py
| | | |___user-collect.py
| | | |___user-folder.py
| | | |___user-get-add.py
| | | |___user-like.py
| | | |___user-live-im-fetch.py
| | | |___user-mix.py
| | | |___user-playlist.py
| | | |___user-post.py
| | | |___user-profile.py
| | | |___video-get-add.py
| | | |___xbogus.py
| | |___twitter
| | | |___client-config.py
| | | |___extract-desc.py
| | | |___format-file-name.py
| | | |___one-tweet.py
| | | |___tweet-ids.py
| | | |___user-bookmark.py
| | | |___user-folder.py
| | | |___user-get-add.py
| | | |___user-like.py
| | | |___user-profile.py
| | | |___user-tweet.py
| | | |___user-unique-ids.py
| | |___weibo
| | | |___client-config.py
| | | |___extract-desc.py
| | | |___extract-uid.py
| | | |___format-file-name.py
| | | |___one-weibo.py
| | | |___user-detail.py
| | | |___user-folder.py
| | | |___user-get-add.py
| | | |___user-profile-by-name.py
| | | |___user-profile.py
| | | |___user-weibo.py
| | | |___visitor-cookie.py
| | | |___weibo-id.py
| | | |___weibo-screen-name.py
| | | |___weibo-uid.py
| |___team.md
|___f2
| |___apps
| | |___bark
| | | |___api.py
| | | |___cli.py
| | | |___crawler.py
| | | |___filter.py
| | | |___handler.py
| | | |___help.py
| | | |___model.py
| | | |___test
| | | | |___test_bark_crawler.py
| | | |___utils.py
| | |___douyin
| | | |___algorithm
| | | | |___webcast_signature.js
| | | | |___webcast_signature.py
| | | |___api.py
| | | |___cli.py
| | | |___crawler.py
| | | |___db.py
| | | |___dl.py
| | | |___filter.py
| | | |___handler.py
| | | |___help.py
| | | |___model.py
| | | |___proto
| | | | |___douyin_webcast.proto
| | | | |___douyin_webcast_pb2.py
| | | |___test
| | | | |___test_douyin_apps_model.py
| | | | |___test_douyin_aweme_id.py
| | | | |___test_douyin_crawler.py
| | | | |___test_douyin_handler.py
| | | | |___test_douyin_lrc.py
| | | | |___test_douyin_room_id.py
| | | | |___test_douyin_sec_user_id.py
| | | | |___test_douyin_token.py
| | | | |___test_douyin_webcast_id.py
| | | | |___test_douyin_webcast_signature.py
| | | |___utils.py
| | |___tiktok
| | | |___api.py
| | | |___cli.py
| | | |___crawler.py
| | | |___db.py
| | | |___dl.py
| | | |___filter.py
| | | |___handler.py
| | | |___help.py
| | | |___model.py
| | | |___proto
| | | | |___tiktok_webcast.proto
| | | | |___tiktok_webcast_pb2.py
| | | |___test
| | | | |___test_tiktok_aweme_id.py
| | | | |___test_tiktok_crawler.py
| | | | |___test_tiktok_device_id.py
| | | | |___test_tiktok_sec_user_id_fetcher.py
| | | | |___test_tiktok_token.py
| | | |___utils.py
| | |___twitter
| | | |___api.py
| | | |___cli.py
| | | |___crawler.py
| | | |___db.py
| | | |___dl.py
| | | |___filter.py
| | | |___handler.py
| | | |___help.py
| | | |___model.py
| | | |___test
| | | | |___test_model.py
| | | | |___test_tweet_desc.py
| | | | |___test_tweet_id.py
| | | | |___test_unique_id.py
| | | |___utils.py
| | |___weibo
| | | |___api.py
| | | |___cli.py
| | | |___crawler.py
| | | |___db.py
| | | |___dl.py
| | | |___filter.py
| | | |___handler.py
| | | |___help.py
| | | |___model.py
| | | |___test
| | | | |___test_gen_visitor.py
| | | | |___test_handler.py
| | | | |___test_weibo_desc.py
| | | | |___test_weibo_id.py
| | | | |___test_weibo_screen_name.py
| | | | |___test_weibo_uid.py
| | | |___utils.py
| | |_____apps__.py
| | |_____init__.py
| |___cli
| | |___cli_commands.py
| | |___cli_console.py
| | |_____init__.py
| |___conf
| | |___app.yaml
| | |___conf.yaml
| | |___defaults.yaml
| | |___test.yaml
| |___crawlers
| | |___base_crawler.py
| |___db
| | |___base_db.py
| |___dl
| | |___base_downloader.py
| |___exceptions
| | |___api_exceptions.py
| | |___conf_exceptions.py
| | |___db_exceptions.py
| | |___file_exceptions.py
| | |_____init__.py
| |___helps.py
| |___i18n
| | |___translator.py
| |___languages
| | |___en_US
| | | |___LC_MESSAGES
| | | | |___en_US.mo
| | |___zh_CN
| | | |___LC_MESSAGES
| | | | |___zh_CN.mo
| |___log
| | |___logger.py
| |___utils
| | |___abogus.py
| | |___conf_manager.py
| | |___decorators.py
| | |___json_filter.py
| | |___utils.py
| | |___xbogus.py
| | |____dl.py
| | |____signal.py
| | |____singleton.py
| | |_____init__.py
| |_____init__.py
| |_____main__.py
|___LICENSE
|___make_pot.bat
|___make_pot.sh
|___pnpm-lock.yaml
|___pyproject.toml
|___pytest.ini
|___README.en.md
|___README.md
|___SECURITY.md
|___tests
| |___data
| | |___douyin
| | | |___webcast
| | | | |___dict
| | | | | |___WebcastGiftMessage.json
| | | | | |___WebcastLiveShoppingMessage.json
| | | | | |___WebcastProductChangeMessage.json
| | | | | |___WebcastRoomUserSeqMessage.json
| | | | | |___WebcastSocialMessage.json
| | | | | |___WebcastStatsMessage.json
| | | | | |___WebcastUpdateFanTicketMessage.json
| | |___tiktok
| | | |___webcast
| | | | |___dict
| | | | | |___WebcastChatMessage.json
| | | | | |___WebcastGiftMessage.json
| | | | | |___WebcastLikeMessage.json
| | | | | |___WebcastLinkMicFanTicketMethod.json
| | | | | |___WebcastMemberMessage.json
| | | | | |___WebcastRoomStreamAdaptationMessage.json
| | | | | |___WebcastRoomUserSeqMessage.json
| | | | | |___WebcastSocialMessage.json
| | | | | |___WebcastStatsMessage.json
| | | | |___protobuf
| | | | | |___WebcastOecLiveShoppingMessage_0.bin
| | | | | |___WebcastOecLiveShoppingMessage_1.bin
| | | | | |___WebcastOecLiveShoppingMessage_2.bin
| |___package-lock.json
| |___test_abogus.py
| |___test_aes.py
| |___test_cli_commands.py
| |___test_cli_console.py
| |___test_desc_limit.py
| |___test_dl.py
| |___test_excetions.py
| |___test_gzip.py
| |___test_i18n.py
| |___test_json_filter.py
| |___test_logger.py
| |___test_py_version.py
| |___test_rsa.py
| |___test_signal.py
| |___test_singleton.py
| |___test_timestamp.py
| |___test_utils.py
| |___test_xbogus.py
```
</details>
## 💰 赞助商
<a href="https://tikhub.io/"><img style="border-radius:20px" src="https://github.com/Johnserf-Seed/f2/assets/40727745/70a67dd1-dccb-44a9-b635-c29a950f1daf"></a>
[TikHub](https://tikhub.io/) 是一家提供优质数据接口服务的供应商。通过每日签到,可以获取免费额度。可以使用我的注册邀请链接:[https://beta-web.tikhub.io/users/signup?referral_code=6hLcGD94](https://beta-web.tikhub.io/users/signup?referral_code=6hLcGD94) 或 邀请码:`6hLcGD94`,注册并充值即可获得`$2`额度。
[TikHub](https://tikhub.io/) 提供以下服务:
- 丰富的数据接口
- 每日签到免费获取额度
- 高质量的API服务
- 官网:https://tikhub.io/
- 项目地址:https://github.com/TikHubIO/
## 👨💻 贡献
如果你有兴趣为 `F2` 贡献代码,请查看[贡献指南](https://github.com/Johnserf-Seed/f2/blob/main/CONTRIBUTING.md)。
## 🙏 鸣谢
- [Windows Terminal](https://aka.ms/terminal)
- [Python](https://www.python.org/)
- [Nvm](https://github.com/nvm-sh/nvm)
- [Node.js](https://nodejs.org/)
- [Babel](https://babel.pocoo.org/)
- [click](https://github.com/pallets/click)
- [rich](https://github.com/Textualize/rich)
- [httpx](https://github.com/encode/httpx)
- [aiofiles](https://github.com/Tinche/aiofiles)
- [aiosqlite](https://github.com/omnilib/aiosqlite)
- [jsonpath-ng](https://github.com/h2non/jsonpath-ng)
- [importlib_resources](https://github.com/python/importlib_resources)
- [m3u8](https://github.com/globocom/m3u8)
- [pyyaml](https://github.com/yaml/pyyaml)
- [pytest](https://github.com/pytest-dev/pytest)
- [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio)
- [browser_cookie3](https://github.com/borisbabic/browser_cookie3)
- [pydantic](https://github.com/samuelcolvin/pydantic)
- [qrcode](https://github.com/lincolnloop/python-qrcode)
- [vitepress](https://github.com/vuejs/vitepress)
- [websockets](https://github.com/python-websockets/websockets)
- [websockets_proxy](https://github.com/racinette/websockets_proxy)
- [protobuf](https://github.com/protocolbuffers/protobuf)
- [PyExecJS](https://github.com/doloopwhile/PyExecJS)
- [gmssl](https://github.com/duanhongyi/gmssl)
- [cryptography](https://github.com/pyca/cryptography)
没有这些库和程序,`F2`将无法实现这些功能,对于他们的贡献和努力,表示由衷的感谢。
## ⚖️ 协议&声明
- **请严格遵守爬虫规范,不要使用此项目进行任何违法行为。**
- **不出售、共享、加密、上传、研究和传播任何个人信息。**
- **项目及其相关代码仅供学习与研究使用,不构成任何明示或暗示的保证。**
- **使用者因使用此项目及其代码可能造成的任何形式的损失,使用者应当自行承担一切风险。**
- **请遵守Apache-2.0开源协议,不要删除或修改代码中的任何版权信息。**
- **如果使用者需要商业化使用此项目,必须指定项目仓库地址,不得删除或修改项目中的任何版权信息。**
- **如果使用者使用此项目及其代码,即代表使用者同意遵守上述规定。**
## 📜 许可
[Apache-2.0 license](https://www.apache.org/licenses/LICENSE-2.0.html)
Copyright (c) 2023 JohnserfSeed
## 📧 联系
只回答关于`F2`的问题,可以通过以下方式联系我,请耐心等待,会尽快回复你。
- Mail:[support@f2.wiki](mailto:support@f2.wiki) (优先)
- Discord:[F2](https://discord.gg/3PhtPmgHf8)
Raw data
{
"_id": null,
"home_page": null,
"name": "f2",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "async, bark, bilibili, crawler, douyin, download, downloader, f2, http, http proxy, https, internat, netease, tiktok, twitter, watermark, websockets, weibo, ws, wss, x",
"author": null,
"author_email": "Johnserf-Seed <support@f2.wiki>",
"download_url": "https://files.pythonhosted.org/packages/24/5f/8eb4fe0f01361516b8fc93a668c7d19c0297712849e829d0816307b23921/f2-0.0.1.7.tar.gz",
"platform": null,
"description": "<p align=\"center\">\n <img src=\"https://github.com/Johnserf-Seed/f2/raw/main/docs/public/f2-logo-with-shadow-svg@0.5x.svg\" alt=\"Logo\">\n</p>\n\n[![Downloads](https://pepy.tech/badge/f2/month)](https://pepy.tech/project/f2)\n[![PyPI version](https://badge.fury.io/py/f2.svg)](https://badge.fury.io/py/f2)\n[![Dev Branch](https://badgen.net/badge/branch/v0.0.1.7-pw2/blue)](https://github.com/Johnserf-Seed/f2/tree/v0.0.1.7-pw2)\n[![Discord](https://img.shields.io/discord/1146473603450282004?label=Discord)](https://discord.gg/3PhtPmgHf8)\n[![codecov](https://codecov.io/gh/Johnserf-Seed/f2/graph/badge.svg?token=T9DH4QPZSS)](https://codecov.io/gh/Johnserf-Seed/f2)\n[![TikHub](https://img.shields.io/badge/%E8%B5%9E%E5%8A%A9%E5%95%86-TikHub-orange?style=flat-square&logo=tiktok)](https://beta-web.tikhub.io/users/signup?referral_code=6hLcGD94)\n[![APACHE-2.0](https://img.shields.io/github/license/johnserf-seed/f2)](https://github.com/Johnserf-Seed/f2/blob/main/LICENSE)\n\n\n[\u7b80\u4f53\u4e2d\u6587 readme](https://github.com/Johnserf-Seed/f2/blob/main/README.md) \u2022 [English readme](https://github.com/Johnserf-Seed/f2/blob/main/README.en.md)\n\n`F2` \u662f\u4e00\u4e2a [Python](https://pypi.org/project/f2/) \u5e93\uff0c\u63d0\u4f9b\u591a\u5e73\u53f0\u7684\u4f5c\u54c1\u4e0b\u8f7d\u4e0e\u63a5\u53e3\u6570\u636e\u5904\u7406\u3002\u652f\u6301 `DouYin`\u3001`TikTok`\u3001`Twitter`\u3001`WeiBo` \u7b49\u5e73\u53f0\uff0c\u4e14\u65b9\u4fbf\u9002\u914d\u66f4\u591a\u5e73\u53f0\u3002\n\n<img src='https://github.com/user-attachments/assets/92a70f27-c93f-422e-ba9a-040060323654'>\n\n## \ud83d\ude80 \u5feb\u901f\u5165\u95e8\n\n### \u2699\ufe0f \u5b89\u88c5\n\n- [\u5fc5\u5907\u6761\u4ef6](https://f2.wiki/install#%E5%BF%85%E5%A4%87%E6%9D%A1%E4%BB%B6)\n- [\u5305\u7ba1\u7406\u5668\u5b89\u88c5](https://f2.wiki/install#%E5%8C%85%E7%AE%A1%E7%90%86%E5%99%A8%E5%AE%89%E8%A3%85)\n- [\u7f16\u8bd1\u5b89\u88c5](https://f2.wiki/install#%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85)\n\n### \u26a1 \u5feb\u901f\u4f7f\u7528\n\n- [\u542f\u52a8\u548c\u8fd0\u884c](https://f2.wiki/quick-start#%E5%90%AF%E5%8A%A8%E5%92%8C%E8%BF%90%E8%A1%8C)\n- [\u4e0b\u4e00\u6b65\u662f\u4ec0\u4e48\uff1f](https://f2.wiki/quick-start#%E4%B8%8B%E4%B8%80%E6%AD%A5%E6%98%AF%E4%BB%80%E4%B9%88)\n\n### \ud83d\udccb \u914d\u7f6e\u6587\u4ef6\n\n- [\u4e3b\u914d\u7f6e\u6587\u4ef6](https://f2.wiki/site-config#%E4%B8%BB%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)\n- [\u521d\u59cb\u5316\u914d\u7f6e\u6587\u4ef6](https://f2.wiki/site-config#%E5%88%9D%E5%A7%8B%E5%8C%96%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)\n- [\u81ea\u5b9a\u4e49\u914d\u7f6e\u6587\u4ef6](https://f2.wiki/site-config#%E8%87%AA%E5%AE%9A%E4%B9%89%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6)\n- [\u914d\u7f6eCookie](https://f2.wiki/site-config#%E9%85%8D%E7%BD%AECookie)\n- [\u914d\u7f6e\u6587\u4ef6\u7684\u4f4d\u7f6e](https://f2.wiki/site-config#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9A%84%E4%BD%8D%E7%BD%AE)\n- [\u4e0b\u4e00\u6b65\u662f\u4ec0\u4e48\uff1f](https://f2.wiki/site-config#%E4%B8%8B%E4%B8%80%E6%AD%A5%E6%98%AF%E4%BB%80%E4%B9%88)\n\n### \ud83d\udcbb \u547d\u4ee4\u884c\n\n- [CLI\u4e34\u65f6\u914d\u7f6e](https://f2.wiki/cli#cli%E4%B8%B4%E6%97%B6%E9%85%8D%E7%BD%AE)\n- [\u62d3\u5c55](https://f2.wiki/cli#%E6%8B%93%E5%B1%95)\n- [\u5e94\u7528\u547d\u4ee4\u884c](https://f2.wiki/cli#%E5%BA%94%E7%94%A8%E5%91%BD%E4%BB%A4%E8%A1%8C)\n\n### \ud83d\udcda \u8fdb\u9636\u7528\u6cd5\n\n- [DouYin \u6279\u91cf\u91c7\u96c6\u76f4\u64ad\u6d41](https://f2.wiki/advance-guide#%E6%89%B9%E9%87%8F%E9%87%87%E9%9B%86%E7%9B%B4%E6%92%AD%E6%B5%81)\n- [DouYin \u76f4\u64ad\u5f39\u5e55\u8f6c\u53d1](https://f2.wiki/advance-guide#%E7%9B%B4%E6%92%AD%E5%BC%B9%E5%B9%95%E8%BD%AC%E5%8F%91)\n- \u6587\u6863\u8fd8\u5728\u8fdb\u4e00\u6b65\u66f4\u65b0\u4e2d...\n\n## \ud83e\uddd0 FAQ\n\n- [\u5e38\u89c1\u95ee\u9898](https://f2.wiki/faq)\n\n## \ud83d\udc4f \u56e2\u961f\n\n- [\u56e2\u961f\u4ecb\u7ecd](https://f2.wiki/team)\n\n### \ud83d\udcd8 \u5f00\u53d1\u6307\u5357\n\n- [\u5f00\u53d1\u8005\u5fc5\u770b](https://f2.wiki/guide/what-is-f2)\n\n### \ud83d\udcdd API\u793a\u4f8b\n\n- [\u4f7f\u7528\u793a\u4f8b](https://f2.wiki/guide/api-examples)\n\n### \ud83e\udde9 \u5f00\u53d1\u8005\u63a5\u53e3\n\n- [Bark](https://f2.wiki/guide/apps/bark/)\n- [DouYin](https://f2.wiki/guide/apps/douyin/)\n- [TikTok](https://f2.wiki/guide/apps/tiktok/)\n- [Twitter](https://f2.wiki/guide/apps/twitter/)\n- [WeiBo](https://f2.wiki/guide/apps/weibo/)\n\n### \ud83d\udda5\ufe0f \u547d\u4ee4\u884c\u6307\u5f15\n\n- [Bark](https://f2.wiki/guide/apps/bark/cli)\n- [DouYin](https://f2.wiki/guide/apps/douyin/cli)\n- [TikTok](https://f2.wiki/guide/apps/tiktok/cli)\n- [Twitter](https://f2.wiki/guide/apps/twitter/cli)\n- [WeiBo](https://f2.wiki/guide/apps/weibo/cli)\n\n## \u2728 \u65b0\u53d8\u5316\n\n\u5f53\u4e0b\u8f7d\u6216\u5347\u7ea7\u5230 `F2` \u7684\u4e0d\u540c\u7248\u672c\u65f6\uff0c\u8bf7\u6ce8\u610f\u4ee5\u4e0b\u5173\u952e\u7684\u7248\u672c\u66f4\u65b0\u3002\n\n<details>\n <summary>\ud83d\udee0\ufe0f v0.0.1.7-pw2</summary>\n\n - \ud83d\ude80 **\u65b0\u589e Bark \u5e94\u7528\u652f\u6301**\n \u8bf7\u524d\u5f80 App Store \u4e0b\u8f7d [Bark](https://apps.apple.com/cn/app/id1403753865)\uff0c\u5e76\u5728 [F2 \u914d\u7f6e\u6587\u4ef6](https://f2.wiki/site-config#%E4%B8%BB%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6) \u4e2d\u5b8c\u6210\u76f8\u5173\u914d\u7f6e\u3002\n - \ud83d\udee1\ufe0f **\u5f00\u653e `ab` \u7b97\u6cd5**\n \u5df2\u5f00\u6e90\u6ee1\u8840\u7248 `ab` \u7b97\u6cd5\uff0c\u652f\u6301\u81ea\u5b9a\u4e49 `UA`\u3002\u8bf7\u786e\u4fdd\u81ea\u5b9a\u4e49 `UA` \u7b26\u5408\u89c4\u8303\u3002\n - \ud83d\udce1 **\u65b0\u589e\u76f4\u64ad\u5f39\u5e55\u8f6c\u53d1\u529f\u80fd**\n \u652f\u6301 `douyin` \u4e0e `tiktok` \u76f4\u64ad\u5f39\u5e55\u8f6c\u53d1\uff0c\u8bf7\u6839\u636e [WSS \u914d\u7f6e\u6307\u5357](https://f2.wiki/guide/what-is-f2#wss%E9%85%8D%E7%BD%AE) \u5b8c\u6210\u76f8\u5e94\u53c2\u6570\u914d\u7f6e\u3002\n - \ud83d\udd14 **\u542f\u7528\u901a\u77e5\u63a8\u9001**\n \u5982\u9700\u542f\u7528\u5e94\u7528\u901a\u77e5\u63a8\u9001\uff0c\u8bf7\u5728 [F2 \u914d\u7f6e\u6587\u4ef6](https://f2.wiki/site-config#%E4%B8%BB%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6) \u4e2d\u8bbe\u7f6e `enable_bark` \u53c2\u6570\u4e3a `true`\u3002\n - \ud83d\udcc4 **\u66f4\u591a\u53d8\u66f4\u8be6\u60c5**\n \u8bf7\u67e5\u770b\u5b8c\u6574\u7684 [ChangeLog](https://github.com/Johnserf-Seed/f2/blob/main/CHANGELOG.md#0017---2024-12-31)\u3002\n</details>\n\n<details>\n <summary>\ud83d\udccc v0.0.1.6-pw2</summary>\n\n - \ud83d\udee0\ufe0f **\u914d\u7f6e\u6587\u4ef6\u683c\u5f0f\u5df2\u66f4\u65b0**\n \u5982\u679c\u4f60\u4f7f\u7528\u65e7\u7248\u914d\u7f6e\u6587\u4ef6\uff0c\u8bf7\u6ce8\u610f\u8fdb\u884c\u8fc1\u79fb\u3002\n - \ud83c\udf0d **\u65f6\u533a\u6807\u51c6\u5316**\n \u6240\u6709\u65f6\u95f4\u6233\u7684\u9ed8\u8ba4\u65f6\u533a\u5df2\u8bbe\u7f6e\u4e3a `UTC/GMT+08:00`\u3002\n - \ud83d\udcc1 **\u6587\u4ef6\u683c\u5f0f\u8c03\u6574**\n - `douyin` \u76f4\u64ad\u6d41\u6587\u4ef6\u540d\u8c03\u6574\u4e3a `flv`\u3002\n - \u56fe\u96c6\u683c\u5f0f\u8c03\u6574\u56de `webp`\u3002\n - \ud83d\udd04 **\u9519\u8bef\u4fee\u590d**\n \u4fee\u590d\u4e86 `tiktok` \u89c6\u9891\u5730\u5740 `403` \u9519\u8bef\u3002\n \ud83d\udc49 [\u4e86\u89e3\u66f4\u591a\u89e3\u51b3\u65b9\u6848](https://f2.wiki/faq#tiktok-403-forbidden)\n - \ud83d\udee1\ufe0f **\u7b97\u6cd5\u4f18\u5316**\n `douyin` \u73b0\u5728\u9ed8\u8ba4\u4f7f\u7528 `ab` \u7b97\u6cd5\u8fdb\u884c\u8bf7\u6c42\u3002\uff08\u6ee1\u8840\u7248 `ab` \u7b97\u6cd5\u5373\u5c06\u5f00\u6e90\uff09\n - \ud83d\udcc4 **\u66f4\u591a\u53d8\u66f4\u8be6\u60c5**\n \ud83d\udc49 [\u67e5\u770b ChangeLog](https://github.com/Johnserf-Seed/f2/blob/main/CHANGELOG.md#0016---2024-05-04)\n</details>\n\n<details>\n <summary>\ud83d\udce1 v0.0.1.5-pw2</summary>\n\n - \ud83d\udee1\ufe0f **\u81ea\u5b9a\u4e49 UA \u652f\u6301**\n `XBogus` \u53c2\u6570\u73b0\u5728\u652f\u6301\u81ea\u5b9a\u4e49 `UA`\uff0c\u8bf7\u786e\u4fdd `UA` \u7b26\u5408\u89c4\u8303\u3002\n - \ud83d\udcca **\u6570\u636e\u5e93\u91cd\u5efa**\n \u91cd\u5efa\u540e\u7684\u6570\u636e\u5e93\u5305\u542b\u63a5\u53e3\u7684\u539f\u59cb\u6570\u636e\u3002\n \ud83d\udc49 \u5982\u9700\u4fdd\u7559\u65e7\u8bb0\u5f55\uff0c\u8bf7\u6ce8\u610f\u8fc1\u79fb\u6216\u5907\u4efd\u3002\n - \ud83d\udd04 **\u8fd4\u56de\u7c7b\u578b\u7edf\u4e00**\n \u6240\u6709 `fetch` \u65b9\u6cd5\u7684\u8fd4\u56de\u7c7b\u578b\u5df2\u7edf\u4e00\u4e3a\u8fc7\u6ee4\u5668\u7c7b\u578b\uff0c\u8bf7\u6ce8\u610f\u76f8\u5173\u53d8\u5316\u3002\n - \ud83d\udee0\ufe0f **\u65b0\u529f\u80fd**\n \u6dfb\u52a0\u4e86 `_to_raw` \u65b9\u6cd5\uff0c\u53ef\u5c06\u8fc7\u6ee4\u5668\u8f6c\u6362\u4e3a\u539f\u59cb\u63a5\u53e3\u6570\u636e\u3002\n - \ud83d\udcdd **\u6587\u4ef6\u540d\u6a21\u677f\u66f4\u65b0**\n \u5982\u679c\u6587\u4ef6\u540d\u4e0d\u7b26\u5408\u65b0\u89c4\u8303\uff0c\u5c06\u629b\u51fa\u5f02\u5e38\uff0c\u8bf7\u68c0\u67e5\u5e76\u8c03\u6574\u3002\n - \ud83d\udd17 **\u94fe\u63a5\u89e3\u6790\u4fee\u590d**\n \u4fee\u590d\u4e86 `douyin` \u5408\u96c6\u9875\u94fe\u63a5\u65e0\u6cd5\u89e3\u6790\u7684\u95ee\u9898\u3002\n \ud83d\udc49 [\u4e86\u89e3\u66f4\u591a](#\u6296\u97f3\u5408\u96c6\u4f5c\u54c1)\n - \ud83d\udcc4 **\u66f4\u591a\u53d8\u66f4\u8be6\u60c5**\n \ud83d\udc49 [\u67e5\u770b ChangeLog](https://github.com/Johnserf-Seed/f2/blob/main/CHANGELOG.md#0015---2024-04-04)\n</details>\n\n## \ud83d\udcd1 \u6587\u6863\n\n`F2` \u7684\u76ee\u6807\u662f\u63d0\u4f9b\u4e00\u4e2a\u7b80\u5355\u6613\u7528\u7684\u63a5\u53e3\uff0c\u8ba9\u7528\u6237\u53ef\u4ee5\u5feb\u901f\u83b7\u53d6\u4f5c\u54c1\u6570\u636e\u3002\n\u5728 `preview` \u7248\u672c\u4e2d\u5f88\u591a\u529f\u80fd\u6ca1\u6709\u5b8c\u5584\uff0c\u5982\u679c\u4f60\u53d1\u73b0\u4e86\u95ee\u9898\uff0c\u8bf7\u5728 `F2` \u9879\u76ee\u4e2d\u63d0\u4ea4 `issue`\u3002\n[\u9879\u76ee\u6587\u6863](https://f2.wiki/) \u8fd8\u5728\u5b8c\u5584\u4e2d\uff0c\u5b58\u5728\u6ede\u540e\u7684\u60c5\u51b5\uff0c\u8bf7\u4fdd\u6301\u5173\u6ce8\u3002\n\n## \ud83d\uddd3\ufe0f Todo\n\n- \u5c06\u5728 `0.0.1.8` \u7248\u672c\u4e2d\u6dfb\u52a0 `BiliBili` & `NetEaseMusic` \u652f\u6301\u3002\n- \u5c06\u5728 `0.0.1.8` \u7248\u672c\u4e2d\u7ef4\u62a4\u66f4\u591a\u7684 `API` \u4e0e `CLI` \u529f\u80fd\u3002\n- \u4f18\u5316 `F2` \u7684 `CLI` \u4f53\u9a8c\u3002\n- \u6dfb\u52a0 `Socket` \u4ee3\u7406\u652f\u6301\u3002\n- \u6dfb\u52a0 `Cookie` \u6c60\uff0c`Proxy` \u6c60\uff0c`User-Agent` \u6c60\u7b49\u652f\u6301\u3002\n- \u6dfb\u52a0 `F2` \u7684 `WebAPI` \u7248\u672c\u3002\n- [\u66f4\u591a\u8ba1\u5212](https://github.com/Johnserf-Seed/f2/discussions/203)\n\n## \ud83d\udc1b \u66f4\u65b0\n\n[ChangeLog](https://github.com/Johnserf-Seed/f2/blob/main/CHANGELOG.md)\n\n## \ud83d\udca1 \u5e94\u7528&\u529f\u80fd\n\n\u529f\u80fd\u72b6\u6001\uff1a\ud83d\udfe2\u4ee3\u8868\u5df2\u7ecf\u5b9e\u73b0\uff0c\ud83d\udfe1\u4ee3\u8868\u6b63\u5728\u5b9e\u73b0\uff0c\ud83d\udfe4\u4ee3\u8868\u6682\u65f6\u4e0d\u5b9e\u73b0\uff0c\ud83d\udd35\u4ee3\u8868\u672a\u6765\u5b9e\u73b0\uff0c\ud83d\udd34\u4ee3\u8868\u5c06\u4f1a\u5f03\u7528\u3002\n\u8d26\u53f7\u72b6\u6001\uff1a\u26aa\u4ee3\u8868\u672a\u77e5\uff0c\ud83d\udfe3\u4ee3\u8868\u9700\u8981\u767b\u5f55\uff08\u65e0\u89c6\u81ea\u5df1\u8d26\u53f7\u9690\u79c1\u8bbe\u7f6e\uff09\uff0c\u26ab\u4ee3\u8868\u4e0d\u9700\u8981\u767b\u5f55\uff08\u6e38\u5ba2\u72b6\u6001\u80fd\u770b\u5230\u7684\uff09\u3002\n\n\u5b8c\u6574\u7684\u529f\u80fd\u5217\u8868\u8bf7\u67e5\u770b [API\u6587\u6863](https://f2.wiki/guide/api-examples)\u3002\n\n<details>\n <summary> \ud83d\udce0 Bark </summary>\n\n |\u529f\u80fd|\u8d26\u53f7\u72b6\u6001|\u63a5\u53e3|\u529f\u80fd\u72b6\u6001|\n |---|---|---|---|\n |\u53d1\u9001\u901a\u77e5\uff08GET\uff09|\u26aa|`fetch_bark_notification`|\ud83d\udfe2|\n |\u53d1\u9001\u901a\u77e5\uff08POST\uff09|\u26aa|`post_bark_notification`|\ud83d\udfe2|\n |\u53d1\u9001\u52a0\u5bc6\u901a\u77e5|\u26aa|`cipher_bark_notification`|\ud83d\udfe2|\n\n |\u5de5\u5177\u7c7b|\u7c7b\u540d|\u63a5\u53e3|\u529f\u80fd\u72b6\u6001|\n |---|---|---|---|\n | \u7ba1\u7406\u5ba2\u6237\u7aef\u914d\u7f6e | `ClientConfManager` | - | \ud83d\udfe2 |\n | \u751f\u6210\u968f\u673a\u6570\u5b57\u5b57\u8282 | - | `generate_numeric_bytes` | \ud83d\udfe2 |\n</details>\n\n<details>\n <summary> \ud83d\udcf8 DouYin </summary>\n\n - \ud83d\udfe3 \u8868\u793a\u9700\u8981\u767b\u5f55\u624d\u53ef\u4ee5\u4e0b\u8f7d\u4ec5\u81ea\u5df1\u53ef\u89c1\u7684\u4f5c\u54c1\u3001\u6536\u85cf\u4f5c\u54c1\u3001\u6536\u85cf\u5939\u4f5c\u54c1\u6216\u70b9\u8d5e\u4f5c\u54c1\u7b49\u3002\uff08\u767b\u5f55\u540e\u65e0\u89c6\u81ea\u5df1\u7684\u79c1\u5bc6\u8bbe\u7f6e\u3001\u53ef\u83b7\u53d6\u4e2a\u6027\u5316\u5185\u5bb9\uff09\n - \u26ab \u8868\u793a\u4e0d\u9700\u8981\u767b\u5f55\u4e0b\u8f7d\u516c\u5f00\u7684\u4f5c\u54c1\u3001\u6536\u85cf\u5939\u4f5c\u54c1\u3001\u70b9\u8d5e\u4f5c\u54c1\u7b49\u3002\uff08\u4ec5\u4e0b\u8f7d\u4ed6\u4eba\u516c\u5f00\u53ef\u89c1\u4f5c\u54c1\u4e0e\u9875\u9762\uff09\n\n |\u529f\u80fd|\u8d26\u53f7\u72b6\u6001|\u63a5\u53e3|\u529f\u80fd\u72b6\u6001|\n |---|---|---|---|\n |\u7528\u6237\u4fe1\u606f|\ud83d\udfe3\u26ab|`fetch_user_profile`|\ud83d\udfe2|\n |\u5355\u4e2a\u4f5c\u54c1\uff08\u89c6\u9891\u3001\u56fe\u96c6\u3001\u65e5\u5e38\uff09|\ud83d\udfe3\u26ab|`fetch_one_video`|\ud83d\udfe2|\n |live\u56fe\u96c6|\ud83d\udfe3\u26ab|`fetch_one_video`|\ud83d\udfe2|\n |\u4e3b\u9875\u4f5c\u54c1|\ud83d\udfe3\u26ab|`fetch_user_post_videos`|\ud83d\udfe2|\n |\u70b9\u8d5e\u4f5c\u54c1|\ud83d\udfe3\u26ab|`fetch_user_like_videos`|\ud83d\udfe2|\n |\u6536\u85cf\u5939\u4f5c\u54c1|\ud83d\udfe3\u26ab|`fetch_user_collects_videos`|\ud83d\udfe2|\n |\u6536\u85cf\u4f5c\u54c1|\ud83d\udfe3|`fetch_user_collection_videos`|\ud83d\udfe2|\n |\u6536\u85cf\u539f\u58f0|\ud83d\udfe3|`fetch_user_music_collection`|\ud83d\udfe2|\n |\u6536\u85cf\u5408\u96c6|\ud83d\udfe3|`fetch_user_mix_collection`|\ud83d\udd35|\n |\u6536\u85cf\u77ed\u5267|\ud83d\udfe3|`fetch_user_series_collection`|\ud83d\udfe4|\n |\u5408\u96c6\u4f5c\u54c1|\u26ab|`fetch_user_mix_videos`|\ud83d\udfe2|\n |\u9996\u9875\u63a8\u8350\u4f5c\u54c1|\ud83d\udfe3\u26ab|`fetch_user_feed_videos`|\ud83d\udfe2|\n |\u76f8\u4f3c\u63a8\u8350\u4f5c\u54c1|\u26ab|`fetch_related_videos`|\ud83d\udfe2|\n |\u76f4\u64ad\u95f4\u4fe1\u606f\uff08\u6d41\u4e0b\u8f7d\uff09|\u26ab|`fetch_user_live_videos`\u3001`fetch_user_live_videos_by_room_id`|\ud83d\udfe2|\n |\u76f4\u64ad\u95f4\u5f39\u5e55\u8d1f\u8f7d|\u26ab|`fetch_live_im`|\ud83d\udfe2|\n |\u76f4\u64ad\u95f4\u5f39\u5e55|\u26ab|`fetch_live_danmaku`|\ud83d\udfe2|\n |\u67e5\u8be2\u7528\u6237\u57fa\u672c\u4fe1\u606f|\ud83d\udfe3\u26ab|`fetch_query_user`|\ud83d\udfe2|\n |\u5173\u6ce8\u7528\u6237\u5f00\u64ad|\ud83d\udfe3\u26ab|`fetch_user_following_lives`|\ud83d\udfe2|\n |\u5173\u6ce8\u7528\u6237\u4fe1\u606f|\ud83d\udfe3\u26ab|`fetch_user_following`|\ud83d\udfe2|\n |\u7c89\u4e1d\u7528\u6237\u4fe1\u606f|\ud83d\udfe3\u26ab|`fetch_user_follower`|\ud83d\udfe2|\n |\u5173\u6ce8\u7528\u6237\u4f5c\u54c1|\ud83d\udfe3\u26ab|`fetch_user_following_videos`|\ud83d\udfe4|\n |\u7c89\u4e1d\u7528\u6237\u4f5c\u54c1|\ud83d\udfe3\u26ab|`fetch_user_follower_videos`|\ud83d\udfe4|\n |\u670b\u53cb\u4f5c\u54c1|\ud83d\udfe3|`fetch_friend_feed_videos`|\ud83d\udfe2|\n |\u589e\u52a0\u64ad\u653e\u91cf|\ud83d\udfe3\u26ab|`fetch_post_stats`|\ud83d\udfe2|\n |\u641c\u7d22\u89c6\u9891|\u26ab|`fetch_search_videos`|\ud83d\udd35|\n |\u641c\u7d22\u7528\u6237|\u26ab|`fetch_search_users`|\ud83d\udd35|\n |\u641c\u7d22\u76f4\u64ad|\u26ab|`fetch_search_lives`|\ud83d\udd35|\n |\u731c\u4f60\u60f3\u641c\uff08\u76f8\u5173\u641c\u7d22\uff09|\u26ab|`fetch_search_suggest`|\ud83d\udfe4|\n |\u6296\u97f3\u70ed\u70b9|\u26ab|`fetch_hot_search`|\ud83d\udfe4|\n |\u4f5c\u54c1\u8bc4\u8bba|\ud83d\udfe3\u26ab|`fetch_video_comments`|\ud83d\udd35|\n |\u89c2\u770b\u5386\u53f2|\ud83d\udfe3|`fetch_user_history_read`|\ud83d\udfe4|\n |\u7a0d\u540e\u518d\u770b|\ud83d\udfe3|`fetch_user_watch_later`|\ud83d\udfe4|\n |...|...|...|...|\n\n |\u5de5\u5177\u7c7b|\u7c7b\u540d|\u63a5\u53e3|\u529f\u80fd\u72b6\u6001|\n |---|---|---|---|\n | \u7ba1\u7406\u5ba2\u6237\u7aef\u914d\u7f6e | `ClientConfManager` | | \ud83d\udfe2 |\n | \u751f\u6210\u771f\u5b9emsToken | `TokenManager` | `gen_real_msToken` | \ud83d\udfe2 |\n | \u751f\u6210\u865a\u5047msToken | `TokenManager` | `gen_false_msToken` | \ud83d\udfe2 |\n | \u751f\u6210ttwid | `TokenManager` | `gen_ttwid` | \ud83d\udfe2 |\n | \u751f\u6210webid | `TokenManager` | `gen_webid` | \ud83d\udfe2 |\n | \u751f\u6210verify_fp | `VerifyFpManager` | `gen_verify_fp` | \ud83d\udfe2 |\n | \u751f\u6210s_v_web_id | `VerifyFpManager` | `gen_s_v_web_id` | \ud83d\udfe2 |\n | \u751f\u6210\u76f4\u64adsignature | `DouyinWebcastSignature` | `get_signature` | \ud83d\udfe2 |\n | ~~\u4f7f\u7528\u63a5\u53e3\u6a21\u578b\u751f\u6210wss\u7b7e\u540d\u53c2\u6570~~ | ~~`WebcastSignatureManager`~~ | ~~`model_2_endpoint`~~ | \ud83d\udd34 |\n | \u4f7f\u7528\u63a5\u53e3\u5730\u5740\u751f\u6210Xb\u53c2\u6570 | `XBogusManager` | `str_2_endpoint` | \ud83d\udfe2 |\n | \u4f7f\u7528\u63a5\u53e3\u6a21\u578b\u751f\u6210Xb\u53c2\u6570 | `XBogusManager` | `model_2_endpoint` | \ud83d\udfe2 |\n | \u4f7f\u7528\u63a5\u53e3\u5730\u5740\u751f\u6210Ab\u53c2\u6570 | `ABogusManager` | `str_2_endpoint` | \ud83d\udfe2 |\n | \u4f7f\u7528\u63a5\u53e3\u6a21\u578b\u751f\u6210Ab\u53c2\u6570 | `ABogusManager` | `model_2_endpoint` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5355\u4e2a\u7528\u6237id | `SecUserIdFetcher` | `get_sec_user_id` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u7528\u6237id | `SecUserIdFetcher` | `get_all_sec_user_id` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5355\u4e2a\u4f5c\u54c1id | `AwemeIdFetcher` | `get_aweme_id` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u4f5c\u54c1id | `AwemeIdFetcher` | `get_all_aweme_id` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5355\u4e2a\u5408\u96c6id | `MixIdFetcher` | `get_mix_id` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u5408\u96c6id | `MixIdFetcher` | `get_all_mix_id` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5355\u4e2a\u76f4\u64ad\u95f4\u53f7 | `WebCastIdFetcher` | `get_webcast_id` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u76f4\u64ad\u95f4\u53f7 | `WebCastIdFetcher` | `get_all_webcast_id` | \ud83d\udfe2 |\n | \u5168\u5c40\u683c\u5f0f\u5316\u6587\u4ef6\u540d | - | `format_file_name` | \ud83d\udfe2 |\n | \u521b\u5efa\u7528\u6237\u76ee\u5f55 | - | `create_user_folder` | \ud83d\udfe2 |\n | \u91cd\u547d\u540d\u7528\u6237\u76ee\u5f55 | - | `rename_user_folder` | \ud83d\udfe2 |\n | \u521b\u5efa\u6216\u91cd\u547d\u540d\u7528\u6237\u76ee\u5f55 | - | `create_or_rename_user_folder` | \ud83d\udfe2 |\n | ~~\u663e\u793a\u4e8c\u7ef4\u7801~~ | - | ~~`show_qrcode`~~ | \ud83d\udd34 |\n | json\u6b4c\u8bcd\u8f6clrc\u6b4c\u8bcd | - | `json_2_lrc` | \ud83d\udfe2 |\n</details>\n\n<details>\n <summary> \ud83c\udfb6 TikTok </summary>\n\n - \ud83d\udfe3 \u8868\u793a\u9700\u8981\u767b\u5f55\u624d\u53ef\u4ee5\u4e0b\u8f7d\u4ec5\u81ea\u5df1\u53ef\u89c1\u7684\u4f5c\u54c1\u3001\u6536\u85cf\u4f5c\u54c1\u3001\u6536\u85cf\u5939\u4f5c\u54c1\u6216\u70b9\u8d5e\u4f5c\u54c1\u7b49\u3002\uff08\u767b\u5f55\u540e\u65e0\u89c6\u81ea\u5df1\u7684\u79c1\u5bc6\u8bbe\u7f6e\u3001\u53ef\u83b7\u53d6\u4e2a\u6027\u5316\u5185\u5bb9\uff09\n - \u26ab \u8868\u793a\u4e0d\u9700\u8981\u767b\u5f55\u4e0b\u8f7d\u516c\u5f00\u7684\u4f5c\u54c1\u3001\u6536\u85cf\u5939\u4f5c\u54c1\u3001\u70b9\u8d5e\u4f5c\u54c1\u7b49\u3002\uff08\u4ec5\u4e0b\u8f7d\u4ed6\u4eba\u516c\u5f00\u53ef\u89c1\u4f5c\u54c1\u4e0e\u9875\u9762\uff09\n\n |\u529f\u80fd|\u8d26\u53f7\u72b6\u6001|\u63a5\u53e3|\u529f\u80fd\u72b6\u6001|\n |---|---|---|---|\n |\u7528\u6237\u4fe1\u606f|\ud83d\udfe3\u26ab|`fetch_user_profile`|\ud83d\udfe2|\n |\u5355\u4e2a\u4f5c\u54c1|\ud83d\udfe3\u26ab|`fetch_one_video`|\ud83d\udfe2|\n |\u4e3b\u9875\u4f5c\u54c1|\ud83d\udfe3\u26ab|`fetch_user_post_videos`|\ud83d\udfe2|\n |\u70b9\u8d5e\u4f5c\u54c1|\ud83d\udfe3\u26ab|`fetch_user_like_videos`|\ud83d\udfe2|\n |\u6536\u85cf\u4f5c\u54c1|\ud83d\udfe3\u26ab|`fetch_user_collect_videos`|\ud83d\udfe2|\n |\u64ad\u653e\u5217\u8868|\ud83d\udfe3\u26ab|`fetch_play_list`|\ud83d\udfe2|\n |\u64ad\u653e\u5217\u8868\u4f5c\u54c1|\ud83d\udfe3\u26ab|`fetch_user_mix_videos`|\ud83d\udfe2|\n |\u4f5c\u54c1\u641c\u7d22|\ud83d\udfe3\u26ab|`fetch_search_videos`|\ud83d\udfe2|\n |\u76f4\u64ad\u95f4\u4fe1\u606f\uff08\u6d41\u4e0b\u8f7d\uff09|\u26ab|`fetch_user_live_videos`|\ud83d\udfe2|\n |\u76f4\u64ad\u95f4\u5f39\u5e55\u8d1f\u8f7d|\u26ab|`fetch_live_im`|\ud83d\udfe2|\n |\u76f4\u64ad\u95f4\u5f39\u5e55|\u26ab|`fetch_live_danmaku`|\ud83d\udfe2|\n |\u68c0\u67e5\u5f00\u64ad|\ud83d\udfe3\u26ab|`fetch_check_live_alive`|\ud83d\udfe2|\n |...|...|...|...|\n\n |\u5de5\u5177\u7c7b|\u7c7b\u540d|\u63a5\u53e3|\u529f\u80fd\u72b6\u6001|\n |---|---|---|---|\n | \u7ba1\u7406\u5ba2\u6237\u7aef\u914d\u7f6e | `ClientConfManager` | | \ud83d\udfe2 |\n | \u751f\u6210\u771f\u5b9emsToken | `TokenManager` | `gen_real_msToken` | \ud83d\udfe2 |\n | \u751f\u6210\u865a\u5047msToken | `TokenManager` | `gen_false_msToken` | \ud83d\udfe2 |\n | \u751f\u6210ttwid | `TokenManager` | `gen_ttwid` | \ud83d\udfe2 |\n | \u751f\u6210odin_tt | `TokenManager` | `gen_odin_tt` | \ud83d\udfe2 |\n | \u4f7f\u7528\u63a5\u53e3\u5730\u5740\u751f\u6210Xb\u53c2\u6570 | `XBogusManager` | `str_2_endpoint` | \ud83d\udfe2 |\n | \u4f7f\u7528\u63a5\u53e3\u6a21\u578b\u751f\u6210Xb\u53c2\u6570 | `XBogusManager` | `model_2_endpoint` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5355\u4e2a\u7528\u6237id | `SecUserIdFetcher` | `get_secuid` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u7528\u6237id | `SecUserIdFetcher` | `get_all_secuid` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5355\u4e2a\u7528\u6237\u552f\u4e00id | `SecUserIdFetcher` | `get_uniqueid` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u7528\u6237\u552f\u4e00id | `SecUserIdFetcher` | `get_all_uniqueid` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u7528\u6237id | `SecUserIdFetcher` | `get_all_secUid` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5355\u4e2a\u4f5c\u54c1id | `AwemeIdFetcher` | `get_aweme_id` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u4f5c\u54c1id | `AwemeIdFetcher` | `get_all_aweme_id` | \ud83d\udfe2 |\n | \u751f\u6210deviceId | `DeviceIdManager` | `gen_device_id` | \ud83d\udfe2 |\n | \u751f\u6210devideId\u5217\u8868 | `DeviceIdManager` | `gen_device_ids` | \ud83d\udfe2 |\n | \u5168\u5c40\u683c\u5f0f\u5316\u6587\u4ef6\u540d | - | `format_file_name` | \ud83d\udfe2 |\n | \u521b\u5efa\u7528\u6237\u76ee\u5f55 | - | `create_user_folder` | \ud83d\udfe2 |\n | \u91cd\u547d\u540d\u7528\u6237\u76ee\u5f55 | - | `rename_user_folder` | \ud83d\udfe2 |\n | \u521b\u5efa\u6216\u91cd\u547d\u540d\u7528\u6237\u76ee\u5f55 | - | `create_or_rename_user_folder` | \ud83d\udfe2 |\n</details>\n\n<details>\n <summary> \ud83d\udc26 Twitter </summary>\n\n |\u529f\u80fd|\u8d26\u53f7\u72b6\u6001|\u63a5\u53e3|\u529f\u80fd\u72b6\u6001|\n |---|---|---|---|\n |\u63a8\u6587\u8be6\u60c5|\ud83d\udfe3\u26ab|`fetch_tweet_detail`|\ud83d\udfe2|\n |\u7528\u6237\u4fe1\u606f|\ud83d\udfe3\u26ab|`fetch_user_profile`|\ud83d\udfe2|\n |\u4e3b\u9875\u63a8\u6587|\ud83d\udfe3\u26ab|`fetch_post_tweet`|\ud83d\udfe2|\n |\u559c\u6b22\u63a8\u6587|\ud83d\udfe3|`fetch_like_tweet`|\ud83d\udfe2|\n |\u6536\u85cf\u63a8\u6587|\ud83d\udfe3|`fetch_bookmark_tweet`|\ud83d\udfe2|\n\n |\u5de5\u5177\u7c7b|\u7c7b\u540d|\u63a5\u53e3|\u529f\u80fd\u72b6\u6001|\n |---|---|---|---|\n | \u7ba1\u7406\u5ba2\u6237\u7aef\u914d\u7f6e | `ClientConfManager` | | \ud83d\udfe2 |\n | \u63d0\u53d6\u7528\u6237\u552f\u4e00ID | `UniqueIdFetcher` | `get_unique_id` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u7528\u6237\u552f\u4e00ID | `UniqueIdFetcher` | `get_all_unique_ids` | \ud83d\udfe2 |\n | \u63d0\u53d6\u63a8\u6587ID | `TweetIdFetcher` | `get_tweet_id` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u63a8\u6587ID | `TweetIdFetcher` | `get_all_tweet_ids` | \ud83d\udfe2 |\n | \u5168\u5c40\u683c\u5f0f\u5316\u6587\u4ef6\u540d | - | `format_file_name` | \ud83d\udfe2 |\n | \u521b\u5efa\u7528\u6237\u76ee\u5f55 | - | `create_user_folder` | \ud83d\udfe2 |\n | \u91cd\u547d\u540d\u7528\u6237\u76ee\u5f55 | - | `rename_user_folder` | \ud83d\udfe2 |\n | \u521b\u5efa\u6216\u91cd\u547d\u540d\u7528\u6237\u76ee\u5f55 | - | `create_or_rename_user_folder` | \ud83d\udfe2 |\n | \u63d0\u53d6\u63a8\u6587\u6587\u6848 | - | `extract_desc` | \ud83d\udfe2 |\n</details>\n\n<details>\n <summary> \ud83d\udcf1 WeiBo </summary>\n\n |\u529f\u80fd|\u8d26\u53f7\u72b6\u6001|\u63a5\u53e3|\u529f\u80fd\u72b6\u6001|\n |---|---|---|---|\n |\u7528\u6237\u4fe1\u606f|\ud83d\udfe3\u26ab|`fetch_user_info`|\ud83d\udfe2|\n |\u7528\u6237\u8be6\u60c5|\ud83d\udfe3\u26ab|`fetch_user_detail`|\ud83d\udfe2|\n |\u4e3b\u9875\u5fae\u535a|\ud83d\udfe3\u26ab|`fetch_user_weibo`|\ud83d\udfe2|\n |\u5fae\u535a\u8be6\u60c5|\ud83d\udfe3\u26ab|`fetch_weibo_detail`|\ud83d\udfe2|\n\n |\u5de5\u5177\u7c7b|\u7c7b\u540d|\u63a5\u53e3|\u529f\u80fd\u72b6\u6001|\n |---|---|---|---|\n | \u7ba1\u7406\u5ba2\u6237\u7aef\u914d\u7f6e | `ClientConfManager` | | \ud83d\udfe2 |\n | \u751f\u6210\u8bbf\u5ba2 Cookie | `VisitorManager` | `gen_visitor` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5fae\u535a ID | `WeiboIdFetcher` | `get_weibo_id` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u5fae\u535a ID | `WeiboIdFetcher` | `get_all_weibo_id` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5fae\u535a\u7528\u6237 ID | `WeiboUidFetcher` | `get_weibo_uid` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u5fae\u535a\u7528\u6237 ID | `WeiboUidFetcher` | `get_all_weibo_uid` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5fae\u535a\u7528\u6237\u6635\u79f0 | `WeiboScreenNameFetcher` | `get_weibo_screen_name` | \ud83d\udfe2 |\n | \u63d0\u53d6\u5217\u8868\u5fae\u535a\u7528\u6237\u6635\u79f0 | `WeiboScreenNameFetcher` | `get_all_weibo_screen_name` | \ud83d\udfe2 |\n | \u5168\u5c40\u683c\u5f0f\u5316\u6587\u4ef6\u540d | - | `format_file_name` | \ud83d\udfe2 |\n | \u521b\u5efa\u7528\u6237\u76ee\u5f55 | - | `create_user_folder` | \ud83d\udfe2 |\n | \u91cd\u547d\u540d\u7528\u6237\u76ee\u5f55 | - | `rename_user_folder` | \ud83d\udfe2 |\n | \u521b\u5efa\u6216\u91cd\u547d\u540d\u7528\u6237\u76ee\u5f55 | - | `create_or_rename_user_folder`| \ud83d\udfe2 |\n | \u63d0\u53d6\u5fae\u535a\u6587\u6848 | - | `extract_desc` | \ud83d\udfe2 |\n</details>\n\n## \ud83d\udcf8 \u622a\u56fe\n\n<details>\n <summary> \ud83c\udfac Bark </summary>\n\n ### \u53d1\u9001\u901a\u77e5\uff08GET\uff09\n\n <img src='https://github.com/user-attachments/assets/9c977737-c172-420a-9d7f-6f05bc843957'>\n\n <img src='https://github.com/user-attachments/assets/9a59f9d6-cc8a-48bb-9a75-d075a9e13498'>\n\n ### \u53d1\u9001\u901a\u77e5\uff08POST\uff09\n\n <img src='https://github.com/user-attachments/assets/7a3e9054-a156-4be7-bf93-90d0963f8390'>\n\n <img src='https://github.com/user-attachments/assets/9a59f9d6-cc8a-48bb-9a75-d075a9e13498'>\n\n ### \u53d1\u9001\u52a0\u5bc6\u901a\u77e5\n\n <img src='https://github.com/user-attachments/assets/8a3cb67d-e1b6-40d3-b4c1-543d098eb481'>\n\n <img src='https://github.com/user-attachments/assets/9a59f9d6-cc8a-48bb-9a75-d075a9e13498'>\n</details>\n\n<details>\n <summary> \ud83c\udfac DouYin </summary>\n\n ### \u6296\u97f3\u5355\u4e2a\u4f5c\u54c1\n\n <img src='https://github.com/user-attachments/assets/01b62283-322a-42f1-96d7-bc1431cc0e1b'>\n\n ### \u6296\u97f3\u4e3b\u9875\u4f5c\u54c1\n\n <img src='https://github.com/user-attachments/assets/6353a309-9f8d-4284-9f90-267d683ac9cd'>\n\n ### \u6296\u97f3\u70b9\u8d5e\u4f5c\u54c1\n\n <img src='https://github.com/user-attachments/assets/018d2b6f-d874-41f9-9c20-e1a17bdf16e0'>\n\n ### \u6296\u97f3\u6536\u85cf\u4f5c\u54c1\n\n <img src='https://github.com/user-attachments/assets/0334b1b0-1b61-4cbb-b47a-0ad0ce82e315'>\n\n ### \u6296\u97f3\u6536\u85cf\u5939\u4f5c\u54c1\n\n <img src='https://github.com/user-attachments/assets/ef9fc0e4-5d4f-4ad6-9fa1-e305f9b60c83'>\n\n ### \u6296\u97f3\u6536\u85cf\u539f\u58f0\n\n <img src='https://github.com/user-attachments/assets/414e20eb-0837-48b5-8a7b-622e4d0aafe1'>\n\n ### \u6296\u97f3\u5408\u96c6\u4f5c\u54c1\n\n \u652f\u6301\u5408\u96c6\u91cc\u4efb\u610f\u4f5c\u54c1\u94fe\u63a5\u89e3\u6790\n <img src='https://github.com/user-attachments/assets/4cd85a9f-d684-4c02-8106-fce567f05f0b'>\n\n \u5408\u96c6\u94fe\u63a5\u89e3\u6790\n <img src='https://github.com/user-attachments/assets/04a3553b-93f8-4f99-a9f2-689bef881899'>\n\n ### \u6296\u97f3\u76f4\u64ad\u5f55\u5236\n\n \u5355\u4e2a\u76f4\u64ad\u5f55\u5236\n <img src='https://github.com/user-attachments/assets/63c31ad3-3026-4ae8-8fc1-752ba2117915'>\n\n \u6279\u91cf\u76f4\u64ad\u5f55\u5236\n <img src='https://github.com/user-attachments/assets/6e8caaa7-2bfe-4542-b896-ae4f3c70877f'>\n\n ### \u6296\u97f3\u76f8\u5173\u63a8\u8350\n\n <img src=\"https://github.com/user-attachments/assets/c64731a1-5383-4810-af15-8125330856a8\">\n\n ### \u6296\u97f3\u597d\u53cb\u4f5c\u54c1\n\n <img src=\"https://github.com/user-attachments/assets/c73feec7-f158-4eb1-be3b-9a957507ef45\">\n\n ### \u6296\u97f3\u76f4\u64ad\u5f39\u5e55\n\n <video src=\"https://github.com/Johnserf-Seed/f2/assets/40727745/500d1eaf-59ba-44ba-849b-666c0ddf8469\" width=\"70%\" height=\"auto\" autoplay loop style=\"border-radius: 8px; overflow: hidden;\"></video>\n</details>\n\n<details>\n <summary> \ud83c\udfac TikTok </summary>\n\n ### TikTok\u5355\u4e2a\u4f5c\u54c1\n\n <img src='https://github.com/user-attachments/assets/1ddee9ec-cd4c-4dc0-81a0-970e5d1cb831'>\n\n ### TikTok\u4e3b\u9875\u4f5c\u54c1\n\n <img src='https://github.com/user-attachments/assets/a45f2186-cf0a-4c21-8502-267147936e06'>\n\n ### TikTok\u70b9\u8d5e\u4f5c\u54c1\n\n <img src='https://github.com/user-attachments/assets/11e8e70f-ee32-422e-a79d-f65276b12652'>\n\n ### TikTok\u6536\u85cf\u4f5c\u54c1\n\n <img src='https://github.com/user-attachments/assets/bcd584fa-8c8c-4846-8be0-3c7d2c85ec5d'>\n\n ### TikTok\u64ad\u653e\u5217\u8868\u4f5c\u54c1\n\n <img src='https://github.com/user-attachments/assets/c7ba8740-b9a0-4a8d-98cc-ae8fab2393e2'>\n\n ### TikTok\u4f5c\u54c1\u641c\u7d22\n <img src='https://github.com/user-attachments/assets/c69b76e5-b168-4966-af5d-c9325af2015e'>\n\n ### TikTok\u76f4\u64ad\u5f39\u5e55\n\n <video src=\"https://github.com/Johnserf-Seed/f2/assets/40727745/500d1eaf-59ba-44ba-849b-666c0ddf8469\" width=\"70%\" height=\"auto\" autoplay loop style=\"border-radius: 8px; overflow: hidden;\"></video>\n ps. \u61d2\u5f97\u5f55\u4e86\uff0c\u653e\u7684douyin\u7684\u5f39\u5e55\uff0c\u6548\u679c\u4e00\u6837\u7684\u3002\n</details>\n\n<details>\n <summary> \ud83c\udfac Twitter </summary>\n\n ### x\u5355\u4e2a\u63a8\u6587\n\n <img src='https://github.com/user-attachments/assets/5858e19f-e4e6-4279-a1a4-56ac2878afde'>\n\n ### x\u4e3b\u9875\u63a8\u6587\n\n <img src='https://github.com/user-attachments/assets/43f9665e-3086-4078-a093-59a8081bb77c'>\n\n ### x\u559c\u6b22\u63a8\u6587\n\n <img src='https://github.com/user-attachments/assets/c8b592f6-84a5-4a7d-b8df-9a8f2e25abb0'>\n\n ### x\u6536\u85cf\u63a8\u6587\n\n <img src='https://github.com/user-attachments/assets/e4aa7adf-52de-4a7c-a1f4-f61423047ac8'>\n</details>\n\n<details>\n <summary> \ud83c\udfac WeiBo </summary>\n\n ### WeiBo\u5355\u4e2a\u5fae\u535a\n\n <img src='https://github.com/user-attachments/assets/4038766d-d601-42a9-8f35-6243b3744bd7'>\n\n ### WeiBo\u4e3b\u9875\u5fae\u535a\n\n <img src='https://github.com/user-attachments/assets/e02c5007-4c17-4d97-a648-6aabb328a618'>\n</details>\n\n## \ud83d\udce6 \u7ed3\u6784\n\n<details>\n <summary>\ud83d\udcc1 \u9879\u76ee\u76ee\u5f55</summary>\n\n ```bash\n .\n |___.coverage\n |___.github\n | |___dependabot.yml\n | |___ISSUE_TEMPLATE\n | | |___ask-question.md\n | | |___bug-report.md\n | | |___feature_request.md\n | |___workflows\n | | |___Codecov.yml\n | | |___deploy.yml\n | | |___issue_similarity.yml\n |___.gitignore\n |___.vscode\n | |___launch.json\n | |___settings.json\n |___babel.cfg\n |___CHANGELOG.md\n |___CNAME\n |___CODE_OF_CONDUCT.md\n |___CONTRIBUTING.en.md\n |___CONTRIBUTING.md\n |___CONTRIBUTORS.en.md\n |___CONTRIBUTORS.md\n |___coverage.xml\n |___docs\n | |___.vitepress\n | | |___config.mts\n | | |___theme\n | | | |___index.ts\n | | | |___Layout.vue\n | | | |___styles\n | | | | |___vars.css\n | |___advance-guide.md\n | |___cli.md\n | |___en\n | | |___advance-guide.md\n | | |___api-examples.md\n | | |___cli.md\n | | |___guide\n | | | |___api-examples.md\n | | | |___apps\n | | | | |___bark\n | | | | | |___cli.md\n | | | | | |___index.md\n | | | | |___douyin\n | | | | | |___cli.md\n | | | | | |___index.md\n | | | | |___f2\n | | | | | |___cli.md\n | | | | | |___index.md\n | | | | |___tiktok\n | | | | | |___cli.md\n | | | | | |___index.md\n | | | | |___twitter\n | | | | | |___cli.md\n | | | | | |___index.md\n | | | | |___weibo\n | | | | | |___cli.md\n | | | | | |___index.md\n | | | |___what-is-f2.md\n | | |___index.md\n | | |___install.md\n | | |___markdown-examples.md\n | | |___question-answer\n | | | |___qa.md\n | | |___quick-start.md\n | | |___site-config.md\n | | |___snippets\n | | | |___bark\n | | | | |___ciphertext.sh\n | | | | |___client-config.py\n | | | | |___generate-bytes.py\n | | | | |___notification.py\n | | | |___douyin\n | | | | |___abogus.py\n | | | | |___aweme-id.py\n | | | | |___aweme-related.py\n | | | | |___client-config.py\n | | | | |___format-file-name.py\n | | | | |___json-2-lrc.py\n | | | | |___mix-id.py\n | | | | |___one-video.py\n | | | | |___post-stats.py\n | | | | |___query-user.py\n | | | | |___sec-user-id.py\n | | | | |___show-qrcode.py\n | | | | |___sso-login.py\n | | | | |___support-link.md\n | | | | |___token-manager.py\n | | | | |___user-collection.py\n | | | | |___user-collects.py\n | | | | |___user-feed.py\n | | | | |___user-folder.py\n | | | | |___user-follow-live.py\n | | | | |___user-follower.py\n | | | | |___user-following.py\n | | | | |___user-friend.py\n | | | | |___user-get-add.py\n | | | | |___user-like.py\n | | | | |___user-live-im-fetch.py\n | | | | |___user-live-room-id.py\n | | | | |___user-live.py\n | | | | |___user-mix.py\n | | | | |___user-post.py\n | | | | |___user-profile.py\n | | | | |___video-get-add.py\n | | | | |___webcast-id.py\n | | | | |___webcast-signature.py\n | | | | |___xbogus.py\n | | | |___QA.md\n | | | |___set-debug.py\n | | | |___tiktok\n | | | | |___aweme-id.py\n | | | | |___check-live-alive.py\n | | | | |___client-config.py\n | | | | |___device-id.py\n | | | | |___format-file-name.py\n | | | | |___one-video.py\n | | | | |___sec-uid.py\n | | | | |___token-manager.py\n | | | | |___unique-id.py\n | | | | |___user-collect.py\n | | | | |___user-folder.py\n | | | | |___user-get-add.py\n | | | | |___user-like.py\n | | | | |___user-live-im-fetch.py\n | | | | |___user-mix.py\n | | | | |___user-playlist.py\n | | | | |___user-post.py\n | | | | |___user-profile.py\n | | | | |___video-get-add.py\n | | | | |___xbogus.py\n | | | |___twitter\n | | | | |___client-config.py\n | | | | |___extract-desc.py\n | | | | |___format-file-name.py\n | | | | |___one-tweet.py\n | | | | |___tweet-ids.py\n | | | | |___user-bookmark.py\n | | | | |___user-folder.py\n | | | | |___user-get-add.py\n | | | | |___user-like.py\n | | | | |___user-profile.py\n | | | | |___user-tweet.py\n | | | | |___user-unique-ids.py\n | | | |___weibo\n | | | | |___client-config.py\n | | | | |___extract-desc.py\n | | | | |___extract-uid.py\n | | | | |___format-file-name.py\n | | | | |___one-weibo.py\n | | | | |___user-detail.py\n | | | | |___user-folder.py\n | | | | |___user-get-add.py\n | | | | |___user-profile-by-name.py\n | | | | |___user-profile.py\n | | | | |___user-weibo.py\n | | | | |___visitor-cookie.py\n | | | | |___weibo-id.py\n | | | | |___weibo-screen-name.py\n | | | | |___weibo-uid.py\n | | |___team.md\n | |___faq.md\n | |___guide\n | | |___api-examples.md\n | | |___apps\n | | | |___bark\n | | | | |___cli.md\n | | | | |___index.md\n | | | |___douyin\n | | | | |___cli.md\n | | | | |___index.md\n | | | |___f2\n | | | | |___cli.md\n | | | | |___index.md\n | | | |___tiktok\n | | | | |___cli.md\n | | | | |___index.md\n | | | |___twitter\n | | | | |___cli.md\n | | | | |___index.md\n | | | |___weibo\n | | | | |___cli.md\n | | | | |___index.md\n | | |___what-is-f2.md\n | |___index.md\n | |___install.md\n | |___package.json\n | |___public\n | | |___bark\n | | | |___bark-ciphertext-setting.jpg\n | | | |___bark-ciphertext.jpg\n | | | |___bark-key.jpg\n | | | |___bark-token.jpg\n | | |___douyin\n | | | |___batch-lives.png\n | | | |___cli-start-2.png\n | | | |___cli-start.png\n | | | |___code-start-2.png\n | | | |___code-start.png\n | | | |___log-2-console.png\n | | | |___pytest-ok.png\n | | | |___set-debug.png\n | | | |___wss-connect.png\n | | |___f2-help.png\n | | |___f2-logo-with-no-shadow.png\n | | |___f2-logo-with-shadow-mini.png\n | | |___f2-logo-with-shadow-svg@0.25x.svg\n | | |___f2-logo-with-shadow-svg@0.5x.svg\n | | |___f2-logo-with-shadow-svg@0.75x.svg\n | | |___f2-logo-with-shadow-svg@1.0x.svg\n | | |___f2-logo-with-shadow-svg@1.5x.svg\n | | |___f2-logo-with-shadow-svg@2.0x.svg\n | | |___f2-logo-with-shadow.png\n | | |___f2-logo.ico\n | |___quick-start.md\n | |___site-config.md\n | |___snippets\n | | |___bark\n | | | |___ciphertext.sh\n | | | |___client-config.py\n | | | |___generate-bytes.py\n | | | |___notification.py\n | | |___douyin\n | | | |___abogus.py\n | | | |___aweme-id.py\n | | | |___aweme-related.py\n | | | |___batch-lives.py\n | | | |___client-config.py\n | | | |___format-file-name.py\n | | | |___json-2-lrc.py\n | | | |___mix-id.py\n | | | |___one-video.py\n | | | |___post-stats.py\n | | | |___query-user.py\n | | | |___sec-user-id.py\n | | | |___show-qrcode.py\n | | | |___sso-login.py\n | | | |___support-link.md\n | | | |___token-manager.py\n | | | |___user-collection.py\n | | | |___user-collects.py\n | | | |___user-feed.py\n | | | |___user-folder.py\n | | | |___user-follow-live.py\n | | | |___user-follower.py\n | | | |___user-following.py\n | | | |___user-friend.py\n | | | |___user-get-add.py\n | | | |___user-like.py\n | | | |___user-live-im-fetch.py\n | | | |___user-live-room-id.py\n | | | |___user-live.py\n | | | |___user-mix.py\n | | | |___user-post.py\n | | | |___user-profile.py\n | | | |___video-get-add.py\n | | | |___webcast-id.py\n | | | |___webcast-signature.py\n | | | |___xbogus.py\n | | |___set-debug.py\n | | |___tiktok\n | | | |___aweme-id.py\n | | | |___check-live-alive.py\n | | | |___client-config.py\n | | | |___device-id.py\n | | | |___format-file-name.py\n | | | |___one-video.py\n | | | |___sec-uid.py\n | | | |___token-manager.py\n | | | |___unique-id.py\n | | | |___user-collect.py\n | | | |___user-folder.py\n | | | |___user-get-add.py\n | | | |___user-like.py\n | | | |___user-live-im-fetch.py\n | | | |___user-mix.py\n | | | |___user-playlist.py\n | | | |___user-post.py\n | | | |___user-profile.py\n | | | |___video-get-add.py\n | | | |___xbogus.py\n | | |___twitter\n | | | |___client-config.py\n | | | |___extract-desc.py\n | | | |___format-file-name.py\n | | | |___one-tweet.py\n | | | |___tweet-ids.py\n | | | |___user-bookmark.py\n | | | |___user-folder.py\n | | | |___user-get-add.py\n | | | |___user-like.py\n | | | |___user-profile.py\n | | | |___user-tweet.py\n | | | |___user-unique-ids.py\n | | |___weibo\n | | | |___client-config.py\n | | | |___extract-desc.py\n | | | |___extract-uid.py\n | | | |___format-file-name.py\n | | | |___one-weibo.py\n | | | |___user-detail.py\n | | | |___user-folder.py\n | | | |___user-get-add.py\n | | | |___user-profile-by-name.py\n | | | |___user-profile.py\n | | | |___user-weibo.py\n | | | |___visitor-cookie.py\n | | | |___weibo-id.py\n | | | |___weibo-screen-name.py\n | | | |___weibo-uid.py\n | |___team.md\n |___f2\n | |___apps\n | | |___bark\n | | | |___api.py\n | | | |___cli.py\n | | | |___crawler.py\n | | | |___filter.py\n | | | |___handler.py\n | | | |___help.py\n | | | |___model.py\n | | | |___test\n | | | | |___test_bark_crawler.py\n | | | |___utils.py\n | | |___douyin\n | | | |___algorithm\n | | | | |___webcast_signature.js\n | | | | |___webcast_signature.py\n | | | |___api.py\n | | | |___cli.py\n | | | |___crawler.py\n | | | |___db.py\n | | | |___dl.py\n | | | |___filter.py\n | | | |___handler.py\n | | | |___help.py\n | | | |___model.py\n | | | |___proto\n | | | | |___douyin_webcast.proto\n | | | | |___douyin_webcast_pb2.py\n | | | |___test\n | | | | |___test_douyin_apps_model.py\n | | | | |___test_douyin_aweme_id.py\n | | | | |___test_douyin_crawler.py\n | | | | |___test_douyin_handler.py\n | | | | |___test_douyin_lrc.py\n | | | | |___test_douyin_room_id.py\n | | | | |___test_douyin_sec_user_id.py\n | | | | |___test_douyin_token.py\n | | | | |___test_douyin_webcast_id.py\n | | | | |___test_douyin_webcast_signature.py\n | | | |___utils.py\n | | |___tiktok\n | | | |___api.py\n | | | |___cli.py\n | | | |___crawler.py\n | | | |___db.py\n | | | |___dl.py\n | | | |___filter.py\n | | | |___handler.py\n | | | |___help.py\n | | | |___model.py\n | | | |___proto\n | | | | |___tiktok_webcast.proto\n | | | | |___tiktok_webcast_pb2.py\n | | | |___test\n | | | | |___test_tiktok_aweme_id.py\n | | | | |___test_tiktok_crawler.py\n | | | | |___test_tiktok_device_id.py\n | | | | |___test_tiktok_sec_user_id_fetcher.py\n | | | | |___test_tiktok_token.py\n | | | |___utils.py\n | | |___twitter\n | | | |___api.py\n | | | |___cli.py\n | | | |___crawler.py\n | | | |___db.py\n | | | |___dl.py\n | | | |___filter.py\n | | | |___handler.py\n | | | |___help.py\n | | | |___model.py\n | | | |___test\n | | | | |___test_model.py\n | | | | |___test_tweet_desc.py\n | | | | |___test_tweet_id.py\n | | | | |___test_unique_id.py\n | | | |___utils.py\n | | |___weibo\n | | | |___api.py\n | | | |___cli.py\n | | | |___crawler.py\n | | | |___db.py\n | | | |___dl.py\n | | | |___filter.py\n | | | |___handler.py\n | | | |___help.py\n | | | |___model.py\n | | | |___test\n | | | | |___test_gen_visitor.py\n | | | | |___test_handler.py\n | | | | |___test_weibo_desc.py\n | | | | |___test_weibo_id.py\n | | | | |___test_weibo_screen_name.py\n | | | | |___test_weibo_uid.py\n | | | |___utils.py\n | | |_____apps__.py\n | | |_____init__.py\n | |___cli\n | | |___cli_commands.py\n | | |___cli_console.py\n | | |_____init__.py\n | |___conf\n | | |___app.yaml\n | | |___conf.yaml\n | | |___defaults.yaml\n | | |___test.yaml\n | |___crawlers\n | | |___base_crawler.py\n | |___db\n | | |___base_db.py\n | |___dl\n | | |___base_downloader.py\n | |___exceptions\n | | |___api_exceptions.py\n | | |___conf_exceptions.py\n | | |___db_exceptions.py\n | | |___file_exceptions.py\n | | |_____init__.py\n | |___helps.py\n | |___i18n\n | | |___translator.py\n | |___languages\n | | |___en_US\n | | | |___LC_MESSAGES\n | | | | |___en_US.mo\n | | |___zh_CN\n | | | |___LC_MESSAGES\n | | | | |___zh_CN.mo\n | |___log\n | | |___logger.py\n | |___utils\n | | |___abogus.py\n | | |___conf_manager.py\n | | |___decorators.py\n | | |___json_filter.py\n | | |___utils.py\n | | |___xbogus.py\n | | |____dl.py\n | | |____signal.py\n | | |____singleton.py\n | | |_____init__.py\n | |_____init__.py\n | |_____main__.py\n |___LICENSE\n |___make_pot.bat\n |___make_pot.sh\n |___pnpm-lock.yaml\n |___pyproject.toml\n |___pytest.ini\n |___README.en.md\n |___README.md\n |___SECURITY.md\n |___tests\n | |___data\n | | |___douyin\n | | | |___webcast\n | | | | |___dict\n | | | | | |___WebcastGiftMessage.json\n | | | | | |___WebcastLiveShoppingMessage.json\n | | | | | |___WebcastProductChangeMessage.json\n | | | | | |___WebcastRoomUserSeqMessage.json\n | | | | | |___WebcastSocialMessage.json\n | | | | | |___WebcastStatsMessage.json\n | | | | | |___WebcastUpdateFanTicketMessage.json\n | | |___tiktok\n | | | |___webcast\n | | | | |___dict\n | | | | | |___WebcastChatMessage.json\n | | | | | |___WebcastGiftMessage.json\n | | | | | |___WebcastLikeMessage.json\n | | | | | |___WebcastLinkMicFanTicketMethod.json\n | | | | | |___WebcastMemberMessage.json\n | | | | | |___WebcastRoomStreamAdaptationMessage.json\n | | | | | |___WebcastRoomUserSeqMessage.json\n | | | | | |___WebcastSocialMessage.json\n | | | | | |___WebcastStatsMessage.json\n | | | | |___protobuf\n | | | | | |___WebcastOecLiveShoppingMessage_0.bin\n | | | | | |___WebcastOecLiveShoppingMessage_1.bin\n | | | | | |___WebcastOecLiveShoppingMessage_2.bin\n | |___package-lock.json\n | |___test_abogus.py\n | |___test_aes.py\n | |___test_cli_commands.py\n | |___test_cli_console.py\n | |___test_desc_limit.py\n | |___test_dl.py\n | |___test_excetions.py\n | |___test_gzip.py\n | |___test_i18n.py\n | |___test_json_filter.py\n | |___test_logger.py\n | |___test_py_version.py\n | |___test_rsa.py\n | |___test_signal.py\n | |___test_singleton.py\n | |___test_timestamp.py\n | |___test_utils.py\n | |___test_xbogus.py\n ```\n</details>\n\n## \ud83d\udcb0 \u8d5e\u52a9\u5546\n\n<a href=\"https://tikhub.io/\"><img style=\"border-radius:20px\" src=\"https://github.com/Johnserf-Seed/f2/assets/40727745/70a67dd1-dccb-44a9-b635-c29a950f1daf\"></a>\n\n[TikHub](https://tikhub.io/) \u662f\u4e00\u5bb6\u63d0\u4f9b\u4f18\u8d28\u6570\u636e\u63a5\u53e3\u670d\u52a1\u7684\u4f9b\u5e94\u5546\u3002\u901a\u8fc7\u6bcf\u65e5\u7b7e\u5230\uff0c\u53ef\u4ee5\u83b7\u53d6\u514d\u8d39\u989d\u5ea6\u3002\u53ef\u4ee5\u4f7f\u7528\u6211\u7684\u6ce8\u518c\u9080\u8bf7\u94fe\u63a5\uff1a[https://beta-web.tikhub.io/users/signup?referral_code=6hLcGD94](https://beta-web.tikhub.io/users/signup?referral_code=6hLcGD94) \u6216 \u9080\u8bf7\u7801\uff1a`6hLcGD94`\uff0c\u6ce8\u518c\u5e76\u5145\u503c\u5373\u53ef\u83b7\u5f97`$2`\u989d\u5ea6\u3002\n\n[TikHub](https://tikhub.io/) \u63d0\u4f9b\u4ee5\u4e0b\u670d\u52a1\uff1a\n\n- \u4e30\u5bcc\u7684\u6570\u636e\u63a5\u53e3\n- \u6bcf\u65e5\u7b7e\u5230\u514d\u8d39\u83b7\u53d6\u989d\u5ea6\n- \u9ad8\u8d28\u91cf\u7684API\u670d\u52a1\n- \u5b98\u7f51\uff1ahttps://tikhub.io/\n- \u9879\u76ee\u5730\u5740\uff1ahttps://github.com/TikHubIO/\n\n## \ud83d\udc68\u200d\ud83d\udcbb \u8d21\u732e\n\n\u5982\u679c\u4f60\u6709\u5174\u8da3\u4e3a `F2` \u8d21\u732e\u4ee3\u7801\uff0c\u8bf7\u67e5\u770b[\u8d21\u732e\u6307\u5357](https://github.com/Johnserf-Seed/f2/blob/main/CONTRIBUTING.md)\u3002\n\n## \ud83d\ude4f \u9e23\u8c22\n\n- [Windows Terminal](https://aka.ms/terminal)\n- [Python](https://www.python.org/)\n- [Nvm](https://github.com/nvm-sh/nvm)\n- [Node.js](https://nodejs.org/)\n- [Babel](https://babel.pocoo.org/)\n- [click](https://github.com/pallets/click)\n- [rich](https://github.com/Textualize/rich)\n- [httpx](https://github.com/encode/httpx)\n- [aiofiles](https://github.com/Tinche/aiofiles)\n- [aiosqlite](https://github.com/omnilib/aiosqlite)\n- [jsonpath-ng](https://github.com/h2non/jsonpath-ng)\n- [importlib_resources](https://github.com/python/importlib_resources)\n- [m3u8](https://github.com/globocom/m3u8)\n- [pyyaml](https://github.com/yaml/pyyaml)\n- [pytest](https://github.com/pytest-dev/pytest)\n- [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio)\n- [browser_cookie3](https://github.com/borisbabic/browser_cookie3)\n- [pydantic](https://github.com/samuelcolvin/pydantic)\n- [qrcode](https://github.com/lincolnloop/python-qrcode)\n- [vitepress](https://github.com/vuejs/vitepress)\n- [websockets](https://github.com/python-websockets/websockets)\n- [websockets_proxy](https://github.com/racinette/websockets_proxy)\n- [protobuf](https://github.com/protocolbuffers/protobuf)\n- [PyExecJS](https://github.com/doloopwhile/PyExecJS)\n- [gmssl](https://github.com/duanhongyi/gmssl)\n- [cryptography](https://github.com/pyca/cryptography)\n\n\u6ca1\u6709\u8fd9\u4e9b\u5e93\u548c\u7a0b\u5e8f\uff0c`F2`\u5c06\u65e0\u6cd5\u5b9e\u73b0\u8fd9\u4e9b\u529f\u80fd\uff0c\u5bf9\u4e8e\u4ed6\u4eec\u7684\u8d21\u732e\u548c\u52aa\u529b\uff0c\u8868\u793a\u7531\u8877\u7684\u611f\u8c22\u3002\n\n## \u2696\ufe0f \u534f\u8bae&\u58f0\u660e\n\n- **\u8bf7\u4e25\u683c\u9075\u5b88\u722c\u866b\u89c4\u8303\uff0c\u4e0d\u8981\u4f7f\u7528\u6b64\u9879\u76ee\u8fdb\u884c\u4efb\u4f55\u8fdd\u6cd5\u884c\u4e3a\u3002**\n- **\u4e0d\u51fa\u552e\u3001\u5171\u4eab\u3001\u52a0\u5bc6\u3001\u4e0a\u4f20\u3001\u7814\u7a76\u548c\u4f20\u64ad\u4efb\u4f55\u4e2a\u4eba\u4fe1\u606f\u3002**\n- **\u9879\u76ee\u53ca\u5176\u76f8\u5173\u4ee3\u7801\u4ec5\u4f9b\u5b66\u4e60\u4e0e\u7814\u7a76\u4f7f\u7528\uff0c\u4e0d\u6784\u6210\u4efb\u4f55\u660e\u793a\u6216\u6697\u793a\u7684\u4fdd\u8bc1\u3002**\n- **\u4f7f\u7528\u8005\u56e0\u4f7f\u7528\u6b64\u9879\u76ee\u53ca\u5176\u4ee3\u7801\u53ef\u80fd\u9020\u6210\u7684\u4efb\u4f55\u5f62\u5f0f\u7684\u635f\u5931\uff0c\u4f7f\u7528\u8005\u5e94\u5f53\u81ea\u884c\u627f\u62c5\u4e00\u5207\u98ce\u9669\u3002**\n- **\u8bf7\u9075\u5b88Apache-2.0\u5f00\u6e90\u534f\u8bae\uff0c\u4e0d\u8981\u5220\u9664\u6216\u4fee\u6539\u4ee3\u7801\u4e2d\u7684\u4efb\u4f55\u7248\u6743\u4fe1\u606f\u3002**\n- **\u5982\u679c\u4f7f\u7528\u8005\u9700\u8981\u5546\u4e1a\u5316\u4f7f\u7528\u6b64\u9879\u76ee\uff0c\u5fc5\u987b\u6307\u5b9a\u9879\u76ee\u4ed3\u5e93\u5730\u5740\uff0c\u4e0d\u5f97\u5220\u9664\u6216\u4fee\u6539\u9879\u76ee\u4e2d\u7684\u4efb\u4f55\u7248\u6743\u4fe1\u606f\u3002**\n- **\u5982\u679c\u4f7f\u7528\u8005\u4f7f\u7528\u6b64\u9879\u76ee\u53ca\u5176\u4ee3\u7801\uff0c\u5373\u4ee3\u8868\u4f7f\u7528\u8005\u540c\u610f\u9075\u5b88\u4e0a\u8ff0\u89c4\u5b9a\u3002**\n\n## \ud83d\udcdc \u8bb8\u53ef\n\n[Apache-2.0 license](https://www.apache.org/licenses/LICENSE-2.0.html)\n\nCopyright (c) 2023 JohnserfSeed\n\n## \ud83d\udce7 \u8054\u7cfb\n\n\u53ea\u56de\u7b54\u5173\u4e8e`F2`\u7684\u95ee\u9898\uff0c\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\u8054\u7cfb\u6211\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\uff0c\u4f1a\u5c3d\u5feb\u56de\u590d\u4f60\u3002\n\n- Mail\uff1a[support@f2.wiki](mailto:support@f2.wiki) \uff08\u4f18\u5148\uff09\n- Discord\uff1a[F2](https://discord.gg/3PhtPmgHf8)",
"bugtrack_url": null,
"license": null,
"summary": "\ud83d\ude80Asynchronous based full-platform download tool",
"version": "0.0.1.7",
"project_urls": {
"Chat": "https://discord.gg//3PhtPmgHf8",
"Documentation": "https://f2.wiki/",
"Homepage": "https://github.com/Johnserf-Seed/f2",
"Issue Tracker": "https://github.com/Johnserf-Seed/f2/issues",
"Source Code": "https://github.com/Johnserf-Seed/f2"
},
"split_keywords": [
"async",
" bark",
" bilibili",
" crawler",
" douyin",
" download",
" downloader",
" f2",
" http",
" http proxy",
" https",
" internat",
" netease",
" tiktok",
" twitter",
" watermark",
" websockets",
" weibo",
" ws",
" wss",
" x"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "255a1662a88819443ff46e84f35c189e302938971e796656a9884fb4199c301c",
"md5": "bf667550f8ebacecbfabc32b7f2aff28",
"sha256": "e7a317cd43d88aeff320801c674e622f0e8826b391bc89ed5c120e273aa0c1b5"
},
"downloads": -1,
"filename": "f2-0.0.1.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "bf667550f8ebacecbfabc32b7f2aff28",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 461649,
"upload_time": "2024-12-31T20:06:53",
"upload_time_iso_8601": "2024-12-31T20:06:53.000997Z",
"url": "https://files.pythonhosted.org/packages/25/5a/1662a88819443ff46e84f35c189e302938971e796656a9884fb4199c301c/f2-0.0.1.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "245f8eb4fe0f01361516b8fc93a668c7d19c0297712849e829d0816307b23921",
"md5": "dd48ac8a83e17c4924f070cc4b4d3c79",
"sha256": "beaf9dbc38352a7105c1a487d8c57cf98907c2cf55a83e4353b4520cb6934ca8"
},
"downloads": -1,
"filename": "f2-0.0.1.7.tar.gz",
"has_sig": false,
"md5_digest": "dd48ac8a83e17c4924f070cc4b4d3c79",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 423893,
"upload_time": "2024-12-31T20:06:56",
"upload_time_iso_8601": "2024-12-31T20:06:56.986112Z",
"url": "https://files.pythonhosted.org/packages/24/5f/8eb4fe0f01361516b8fc93a668c7d19c0297712849e829d0816307b23921/f2-0.0.1.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-31 20:06:56",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Johnserf-Seed",
"github_project": "f2",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "f2"
}