bili-sync 是一款专为 NAS 用户编写的哔哩哔哩同步工具。

它的基本的工作原理是使用用户填写的凭据定期扫描视频合集、收藏夹等,获取到本地未下载过的内容并保存到本地,维持本地视频库与哔哩哔哩网站的同步。

下载的内容包括视频、封面、弹幕、标签与简介信息等,这些文件整体保持与 Emby、Jellyfin 等媒体服务器软件兼容的文件布局,使得目的文件夹可以直接被作为媒体库添加到这些软件中,无需干预自动识别。

Docker创建

image-kpuv.png

image-tqhh.png

image-wfiw.png

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 驱动的哔哩哔哩同步工具

获取 Credential 类所需信息

另有二次开发作者的bili-sync-01(添加了番剧下载功能)

bili-sync | 由 Rust & Tokio 驱动的哔哩哔哩同步工具