探索 F2:一个多平台内容下载和数据处理的 Python 库

你是否曾经想过,如何轻松从像抖音、TikTok、Twitter 和微博这样的平台获取视频、图片或其他内容?如果你是开发者,或者只是对自动化下载感兴趣的人,F2 这个 Python 库可能会成为你的好帮手。它提供了一个统一的接口,让你能处理多个平台的作品下载和数据操作。今天,我们就来聊聊 F2 是怎么回事,怎么用它,以及它能帮你做什么。

F2 是一个开源的 Python 库,专注于多平台的作品下载和接口数据处理。它支持抖音(DouYin)、TikTok、Twitter 和微博(WeiBo),而且设计得容易扩展到更多平台。简单来说,它帮你简化了从这些平台抓取和下载内容的流程,而不用自己从头写代码处理每个平台的 API 差异。

F2 示例图

如果你是第一次接触这样的工具,别担心。我们会一步步走下去,从安装开始,到实际使用,再到一些高级技巧。我会试着预测你可能有的问题,比如“F2 怎么安装?”或者“它支持哪些功能?”,并直接给你答案。

F2 是什么?它能做什么?

想象一下,你想下载一个抖音视频,或者批量获取 Twitter 上的推文。手动操作太麻烦,对吧?F2 就是为此而生的。它是一个 Python 库,能通过 API 调用来获取数据,然后处理成你需要的格式,比如下载视频、提取用户信息,或者甚至转发直播弹幕。

F2 的核心优势在于它的多平台支持。你可以用相同的代码结构来处理不同平台的任务,这节省了很多时间。它还包括一些实用工具,比如生成必要的 token、处理文件名,或者管理客户端配置。

这里有个快速概览:F2 支持的作品类型包括视频、图集、直播流等。它有命令行界面(CLI),也有 API 接口,适合脚本化使用。加上,它是开源的,基于 Apache-2.0 许可,你可以自由修改和贡献。

如何开始使用 F2?

如果你想试试 F2,第一步是安装它。别急,我们一步步来。

安装 F2

安装前,确保你的环境准备好。F2 需要 Python 环境,最好是 3.12 或更高版本。它依赖一些库,但安装过程会自动处理大部分。

有几种安装方式:

  1. 通过包管理器安装:最简单的方法是用 pip。

    • 🍄
      打开终端,运行:pip install f2
    • 🍄
      这会从 PyPI 下载最新版本。
  2. 编译安装:如果你想从源代码构建。

    • 🍄
      先克隆仓库:git clone https://github.com/Johnserf-Seed/f2.git
    • 🍄
      进入目录:cd f2
    • 🍄
      安装依赖:pip install -r requirements.txt
    • 🍄
      构建并安装:python setup.py install

安装后,验证一下:运行 f2 --version,如果显示版本号,就成功了。

你可能会问:“安装需要什么前提条件?” F2 假设你有基本的 Python 环境。如果你是 Windows 用户,建议用 Windows Terminal;Mac 或 Linux 就用默认终端。记住,F2 没有互联网访问来安装额外包,所以依赖的库如 httpx、pydantic 等已经在要求中列出。

快速启动和运行

安装好了,怎么用?F2 有 CLI 和 API 两种方式。我们先看 CLI,因为它更直观。

  • 🍄
    启动 CLI:运行 f2 命令,你会看到帮助信息。
  • 🍄
    运行一个简单任务:比如下载一个抖音视频。运行 f2 douyin one-video -u "视频链接"
  • 🍄
    下一步:熟悉配置文件,这样你可以自定义行为,比如设置下载路径或 cookie。

如果你是代码爱好者,用 API 更灵活。比如:

from f2.apps.douyin.handler import DouyinHandler

# 初始化处理器
handler = DouyinHandler()

# 获取单个视频数据
video_data = handler.fetch_one_video("视频ID")

这只是起点。接下来,我们聊聊配置文件,因为它控制了很多行为。

配置 F2:如何设置你的偏好?

F2 的配置文件是 YAML 格式的,让你能自定义一切,从下载路径到 cookie。

主配置文件

默认配置文件在用户目录下,比如 ~/.f2/conf.yaml。它包括 app 配置,如下载文件夹、日志级别等。

初始化配置文件

第一次运行 F2 时,它会自动创建默认配置。你可以用 f2 init-config 来重置或生成。

自定义配置文件

想改设置?编辑 conf.yaml。比如:

  • 🍄
    设置下载路径:download_path: "/path/to/downloads"
  • 🍄
    启用通知:enable_bark: true

配置 Cookie

有些功能需要登录,比如下载私有内容。怎么加 cookie?

  • 🍄
    从浏览器复制 cookie(用 browser_cookie3 库自动获取)。
  • 🍄
    在配置文件中添加:cookie: "你的cookie字符串"

配置文件的位置:通常在用户 home 目录下的 .f2 文件夹。如果你移动了它,用环境变量 F2_CONFIG_PATH 指定。

下一步是什么?试试 CLI 临时配置,比如 f2 douyin --cookie "temp_cookie" 来覆盖默认。

使用 F2 的命令行界面

CLI 是 F2 的强大工具,让你不用写代码就能下载内容。

CLI 临时配置

运行命令时加参数:f2 douyin user-post -u "用户ID" --path "/custom/path"

扩展 CLI

F2 的 CLI 支持子命令,每个平台有自己的,比如 f2 douyinf2 tiktok 等。

应用命令行示例

  • 🍄
    下载抖音主页作品:f2 douyin user-post -u "sec_user_id"
  • 🍄
    下载 TikTok 直播:f2 tiktok user-live -u "用户链接"

详细帮助:f2 <app> --help,比如 f2 douyin --help

进阶用法:更复杂的任务

一旦熟悉基础,你可以试试高级功能。

批量采集抖音直播流

想同时下载多个直播?用 fetch_user_live_videos API,或者 CLI 的批量模式。

步骤:

  1. 准备直播间 ID 列表。
  2. 用循环调用 API:for room_id in ids: handler.fetch_user_live_videos_by_room_id(room_id)
  3. 下载流文件,通常是 FLV 格式。

抖音直播弹幕转发

F2 支持转发弹幕到 WebSocket。

  • 🍄
    配置 WSS:在 conf.yaml 中设置 wss 参数。
  • 🍄
    fetch_live_danmaku 获取弹幕,然后转发。

文档还在更新,但这些是核心。

F2 的新变化:保持更新

F2 不断演进。看看最近版本:

v0.0.1.7-pw2

  • 🍄
    新增 Bark 支持:从 App Store 下载 Bark app,配置 key 来发送通知。
  • 🍄
    开放 ab 算法:支持自定义 UA,但确保规范。
  • 🍄
    新增直播弹幕转发:支持 douyin 和 tiktok。
  • 🍄
    启用通知:设置 enable_bark 为 true。
  • 🍄
    更多:查看 ChangeLog。

v0.0.1.6-pw2

  • 🍄
    更新配置文件格式:迁移旧配置。
  • 🍄
    时区标准化到 UTC/GMT+08:00。
  • 🍄
    文件格式调整:直播流为 FLV,图集为 webp。
  • 🍄
    修复 TikTok 403 错误。
  • 🍄
    默认用 ab 算法。

v0.0.1.5-pw2

  • 🍄
    自定义 UA 在 XBogus。
  • 🍄
    重建数据库包含原始数据。
  • 🍄
    统一返回类型。
  • 🍄
    新方法 _to_raw。
  • 🍄
    文件名模板更新。
  • 🍄
    修复 douyin 合集链接。

升级时注意这些变化,以避免兼容问题。

文档和未来计划

F2 的文档在 https://f2.wiki/,包括安装、API 示例等。虽然还在完善,但覆盖了基础。

Todo 列表:

  • 🍄
    0.0.1.8 中加 BiliBili 和 NetEaseMusic 支持。
  • 🍄
    维护更多 API 和 CLI。
  • 🍄
    优化 CLI 体验。
  • 🍄
    加 Socket 代理、Cookie 池等。
  • 🍄
    加 WebAPI 版本。
  • 🍄
    更多在 discussions/203。

更新日志在 ChangeLog.md。

F2 的应用和功能

F2 分平台支持不同功能。以下是表格总结。

功能状态:🟢 已实现,🟡 正在实现,🟤 暂时不实现,🔵 未来实现,🔴 将弃用。

账号状态:⚪ 未知,🟣 需要登录,⚫ 不需要登录。

Bark

功能 账号状态 接口 功能状态
发送通知(GET) fetch_bark_notification 🟢
发送通知(POST) post_bark_notification 🟢
发送加密通知 cipher_bark_notification 🟢

工具类:

工具类 类名 接口 功能状态
管理客户端配置 ClientConfManager 🟢
生成随机数字字节 generate_numeric_bytes 🟢

DouYin

功能 账号状态 接口 功能状态
用户信息 🟣⚫ 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 🟢
使用接口地址生成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 🟢
json歌词转lrc歌词 json_2_lrc 🟢

TikTok

功能 账号状态 接口 功能状态
用户信息 🟣⚫ 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 🟢

Twitter

功能 账号状态 接口 功能状态
推文详情 🟣⚫ 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 🟢

WeiBo

功能 账号状态 接口 功能状态
用户信息 🟣⚫ 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 🟢

完整 API 示例在 https://f2.wiki/guide/api-examples。

截图示例:看看实际效果

这里有些截图,展示 F2 在不同平台的使用。

Bark

发送通知(GET):

Bark GET 通知
Bark 通知示例

发送通知(POST):

Bark POST 通知

发送加密通知:

Bark 加密通知

DouYin

抖音单个作品:

DouYin 单个作品

抖音主页作品:

DouYin 主页作品

抖音点赞作品:

DouYin 点赞作品

抖音收藏作品:

DouYin 收藏作品

抖音收藏夹作品:

DouYin 收藏夹作品

抖音收藏原声:

DouYin 收藏原声

抖音合集作品:

DouYin 合集作品
DouYin 合集链接

抖音直播录制:

DouYin 单个直播
DouYin 批量直播

抖音相关推荐:

DouYin 相关推荐

抖音好友作品:

DouYin 好友作品

抖音直播弹幕:

TikTok

TikTok 单个作品:

TikTok 单个作品

TikTok 主页作品:

TikTok 主页作品

TikTok 点赞作品:

TikTok 点赞作品

TikTok 收藏作品:

TikTok 收藏作品

TikTok 播放列表作品:

TikTok 播放列表

TikTok 作品搜索:

TikTok 搜索

TikTok 直播弹幕:效果类似 DouYin。

Twitter

x 单个推文:

Twitter 单个推文

x 主页推文:

Twitter 主页推文

x 喜欢推文:

Twitter 喜欢推文

x 收藏推文:

Twitter 收藏推文

WeiBo

WeiBo 单个微博:

WeiBo 单个微博

WeiBo 主页微博:

WeiBo 主页微博

项目结构

F2 的代码结构清晰,便于开发者导航。根目录包括 docs、f2 核心、tests 等。详细目录树在 README 中,但核心是 apps 文件夹,每个平台一个子模块。

赞助和贡献

F2 有赞助商如 TikHub,提供数据接口服务。用邀请码 6hLcGD94 注册可获额外额度。

想贡献?查看 CONTRIBUTING.md。提交 issue 或 PR 欢迎。

鸣谢:感谢 Python、click、rich 等库的支持。

协议:Apache-2.0。严格遵守爬虫规范,不用于违法。

联系:Mail support@f2.wiki 或 Discord。

FAQ

F2 如何处理 cookie?

用配置文件添加,或 CLI 临时参数。需要登录的功能如私有内容提取会用它。

为什么 TikTok 下载报 403?

检查版本,v0.0.1.6-pw2 已修复。见 FAQ 页。

如何自定义 UA?

在 ab 或 xb 算法中支持,确保 UA 规范。

F2 支持哪些平台?

当前 DouYin、TikTok、Twitter、WeiBo。未来加更多。

怎么调试?

用 set-debug.py 或日志配置。

直播弹幕怎么转发?

配置 WSS,用 fetch_live_danmaku。

这些问题覆盖了常见疑问。如果你有更多,欢迎反馈。

通过这篇文章,你应该对 F2 有全面了解。它不是万能工具,但对于多平台数据处理,它提供了可靠基础。试试看,或许它能简化你的工作流。