
飞牛OS部署bili-sync自动化下载B站资源
bili-sync 是一款专为 NAS 用户编写的哔哩哔哩同步工具。
它的基本的工作原理是使用用户填写的凭据定期扫描视频合集、收藏夹等,获取到本地未下载过的内容并保存到本地,维持本地视频库与哔哩哔哩网站的同步。
下载的内容包括视频、封面、弹幕、标签与简介信息等,这些文件整体保持与 Emby、Jellyfin 等媒体服务器软件兼容的文件布局,使得目的文件夹可以直接被作为媒体库添加到这些软件中,无需干预自动识别。
Docker创建
compose配置文件:
services:
bili-sync-rs:
# 不推荐使用 latest 这种模糊的 tag,最好直接指明版本号
image: amtoaer/bili-sync-rs:latest
restart: unless-stopped
network_mode: bridge
# 该选项请仅在日志终端支持彩色输出时启用,否则日志中可能会出现乱码
tty: true
# 非必需设置项,推荐设置为宿主机用户的 uid 及 gid (`$uid:$gid`)
# 可以执行 id ${user} 获取 user 用户的 uid 及 gid
# 程序下载的所有文件权限将与此处的用户保持一致,不设置默认为 Root
user: 1000:1000
hostname: bili-sync-rs
container_name: bili-sync-rs
# 程序默认绑定 0.0.0.0:12345 运行 http 服务
# 可同时修改 compose 文件与 config.toml 变更服务运行的端口
ports:
- 12345:12345
volumes:
- ${你希望存储程序配置的目录}:/app/.config/bili-sync
# metadata/people 正确挂载才能在 Emby 或 Jellyfin 中显示 UP 主头像
# 右边的目标目录不固定,只需要确保目标目录与 bili-sync 中填写的“UP 主头像保存路径”保持一致即可
- ${Emby 或 Jellyfin 配置下的 metadata/people 目录}:/app/.config/bili-sync/upper_face
# 接下来可以挂载一系列用于保存视频的目录,接着在 bili-sync 中配置将视频下载到这些目录即可
# 例如:
# - /home/amtoaer/HDDs/Videos/Bilibilis/:/home/amtoaer/HDDs/Videos/Bilibilis/
# 如果你使用的是群晖系统,请移除最后的 logging 配置,否则会导致日志不显示
logging:
driver: "local"
运行成功后获得容器
进行必要配置
运行程序,应该可以在日志中看到:
Jul 12 16:11:10 INFO 欢迎使用 Bili-Sync,当前程序版本:xxxxx
Jul 12 16:11:10 INFO 项目地址:https://github.com/amtoaer/bili-sync
Jul 12 16:11:10 INFO 数据库初始化完成
Jul 12 17:17:50 WARN 生成 auth_token:xxxxxxxx,可使用该 token 登录 web UI,该信息仅在首次运行时打印
Jul 12 16:11:10 INFO 配置初始化完成
Jul 12 16:11:10 INFO 开始运行管理页: http://0.0.0.0:12345
中间应该会穿插一条 CONFIG 的报错,这是因为配置文件内容缺失导致视频下载任务未能运行,在初次启动时是正常现象。
自 2.6.0 版本开始,程序仅会创建一个数据库文件,配置同样在数据库表中进行维护。
数据库文件存储于 ${config_dir}/bili-sync/data.sqlite
。
CAUTION
请注意,config_dir
的实际位置与操作系统和用户名有关。
对于名为 Alice 的用户,config_dir
指向的位置是:
Lin:
/home/Alice/.config
Win:
C:\Users\Alice\AppData\Roaming
Mac:
/Users/Alice/Library/Application Support
特别的,在 Docker 环境中,config_dir
会被展开为 /app/.config
。
接着打开 WebUI,切换到设置页,输入日志中打印的 auth_token
,点击认证。
认证后会看到一系列的配置,除绑定地址外的选项基本都会实时生效。为避免意料外的情况,建议将配置文件一次修改完毕后再点击保存。
如无特殊需求,一般仅需修改“B站认证”与“视频质量”两个标签下的配置。
其中“B站认证”在一次填写后即可忽略,程序会在每日第一次运行视频下载任务时检查认证状态,并在有必要时自动刷新。
B 站认证
哔哩哔哩账号的身份凭据,请参考凭据获取流程获取并对应填写,后续 bili-sync 会在必要时自动刷新身份凭据,不再需要手动管理。
推荐使用匿名窗口获取,避免潜在的冲突。
获取 Credential 类所需信息
Credential 类实例化代码如下:
from bilibili_api import Credential
credential = Credential(sessdata="你的 SESSDATA", bili_jct="你的 bili_jct", buvid3="你的 buvid3", dedeuserid="你的 DedeUserID", ac_time_value="你的 ac_time_value")
sessdata bili_jct buvid3 和 dedeuserid 这四个参数的值均在浏览器的 Cookies 里头,下面说明获取方法。
火狐浏览器(Firefox)
按 F12 打开开发者工具。
在工具窗口上方找到 存储 选项卡。
展开左边的 Cookie 列表,选中任一b站域名。在右侧找到对应三项即可。
谷歌浏览器(Chrome)
按 F12 打开开发者工具。
在工具窗口上方找到 Application 选项卡。
在左侧找到 Storage/Cookies,并选中任一b站域名,在右侧找到对应三项即可。
微软 Edge
按 F12 打开开发者工具。
在工具窗口上方找到 应用程序 选项卡 。
在左侧找到 存储/Cookies,并选中任一b站域名,在右侧找到对应三项即可。
ac_time_value 相对特殊,仅用于刷新 Cookies,可以选择不获取,在 localStorage 中的ac_time_value 字段。
只需要打开 B 站,打开开发者工具,进入控制台,输入window.localStorage.ac_time_value即可获取值。
Cookies 值简介
常见的凭据 (Credential) 信息有 Cookie 值
SESSDATA
bili_jct
buvid3 / buvid4
dedeuserid
以及 Local Storage 中的
ac_time_value
下列一一介绍
SESSDATA
SESSDATA 用于一般在获取对应用户信息时提供,通常是 GET 操作下提供,此类操作一般不会进行操作,仅读取信息
如获取个人简介、获取个人空间信息等情况下需要提供
bili_jct
bili_jct 用于进行操作用户数据时提供,通常是 POST 操作下提供,此类操作会修改用户数据
如发送评论、点赞三连、上传视频等等情况下需要提供
buvid3 / buvid4
buvid3 / buvid4 是 设备验证码
通常不需要提供,但如放映室内部分接口需要提供,同时与风控有关
dedeuserid
dedeuserid 通常为用户 UID ,几乎不需要提供
ac_time_value
ac_time_value 在登录时获取,登录状态过期后用于刷新 Cookies,没有此值则只能重新登录,如不需要凭据刷新则不需要提供
添加视频源订阅
配置完毕后,我们便可以随时添加视频源订阅。
用户在正确填写“B站认证”后可以在“快捷订阅”部分查看自己创建的收藏夹、关注的合集与 UP 主一键订阅,也可以在“视频源”页手动添加并管理。
对于手动添加的视频源,可参考如下页面获取所需的参数:
收藏夹
合集 / 列表
用户投稿
添加完订阅就无需进行任何干预了,视频下载任务会在后台每隔特定时间(由配置中的“同步间隔”决定)自动运行一次,刷新并下载启用的视频源!
文章说明
该教程做了整合,项目本身的文档已经很详细,项目文档链接如下:
bili-sync | 由 Rust & Tokio 驱动的哔哩哔哩同步工具
另有二次开发作者的bili-sync-01(添加了番剧下载功能)