f2


Namef2 JSON
Version 0.0.1.7 PyPI version JSON
download
home_pageNone
Summary🚀Asynchronous based full-platform download tool
upload_time2024-12-31 20:06:56
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords async bark bilibili crawler douyin download downloader f2 http http proxy https internat netease tiktok twitter watermark websockets weibo ws wss x
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <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"
}
        
Elapsed time: 0.41409s