1. 项目概述一个魂的自动化守护者作为一个经常因为加班、开会而错过A-SOUL直播的“一个魂”我深知那种“今天又没挂上亲密度”的懊恼。粉丝牌暗了亲密度涨得慢明明心里惦记着但现实生活总有忙不完的事。手动去直播间挂着不现实用手机挂后台又耗电又可能被系统杀掉。市面上的一些工具要么依赖复杂的环境要么协议已经失效。于是我决定自己动手用最轻量、最稳定的方式打造一个纯粹的“赛博守候者”——这就是asoul-support项目的由来。简单说这是一个完全用 Python 编写的自动化工具包。它的核心目标就两个第一在成员开播时自动帮你完成“观看直播”这个动作稳定获取每日的亲密度上限第二自动发送弹幕点亮你的粉丝牌保持牌子的“常亮”状态。除此之外它还提供了视频点赞、动态点赞等锦上添花的功能。整个工具没有花哨的界面就是一系列脚本可以跑在你的电脑、服务器上或者利用 GitHub Actions 免费云服务来执行真正做到“设置一次安心守护”。这个工具特别适合那些和我一样工作学习繁忙但依然想默默支持A-SOUL的粉丝。你不用懂复杂的编程按照教程一步步来半小时内就能搭建好自己的自动化应援体系。下面我就把这套方案的里里外外、怎么搭建、怎么避坑毫无保留地分享出来。2. 核心原理与技术方案拆解在动手之前我们得先搞清楚B站亲密度和粉丝牌背后的运行机制以及我们的工具是如何模拟真人操作的。知其然更要知其所以然这样出了问题你才知道从哪里排查。2.1 B站亲密度与粉丝牌规则解析B站的亲密度系统本质上是平台为了鼓励用户深度参与互动而设计的。对于直播场景主要的增长途径就是“观看直播”。根据我的实测和官方规则的梳理其核心逻辑如下观看直播亲密度当你在一个直播间内持续观看系统会大约每5分钟进行一次“心跳”检测。每次有效心跳可以为你增加6点对该主播的亲密度。这里有个每日上限机制每个主播每天通过观看直播获得的亲密度上限是30点。这意味着你只需要挂机观看约25分钟5次心跳就能拿满当日的直播亲密度。超过这个时间继续挂机也不会再增加亲密度。粉丝牌点亮机制粉丝牌粉丝勋章点亮需要你在直播期间发送弹幕。通常发送约10条弹幕即可点亮。点亮后的粉丝牌会有一个持续约3天的“可见”有效期。如果在有效期内没有新的互动牌子就会“灰掉”对你不可见但亲密度等级和牌子本身还在。我们的工具就是通过自动发送弹幕来维持这个“常亮”状态。其他亲密度途径除了观看直播投币1硬币10亲密度、分享直播等也能增加亲密度。但我们的工具默认不进行投币操作因为这会消耗你账户里宝贵的硬币必须由用户显式授权开启。注意这些规则是B站平台制定的存在变更的可能。我们的工具实现是基于当前项目v4版本发布时有效的协议。如果未来B站调整规则工具可能需要相应更新。2.2 工具核心工作流程我们的工具要自动化完成上述任务需要解决几个关键问题如何知道主播开播了如何模拟“观看”行为如何安全地发送弹幕整个工作流可以拆解为以下几个核心环节开播检测工具会定期例如每30分钟查询预置的A-SOUL成员直播间状态。这是通过调用B站开放的直播间状态查询API实现的。如果检测到主播在线则触发后续流程。身份认证任何模拟用户的操作都需要身份凭证。这里我们使用从浏览器获取的B站登录Cookie主要是SESSDATA和bili_jct。工具会安全地存储和使用这些信息来代表“你”进行操作。心跳挂机这是最核心的技术点。工具需要模拟移动端App在直播间内发送的“心跳”包以告诉服务器“我还在看”。v4版本之前很多工具依赖的x25Kn协议已经失效。本项目v4升级到了mobileHeartBeat协议并实现了纯Python的请求签名算法确保了稳定性。弹幕发送为了点亮粉丝牌工具需要在开播期间以你的身份向直播间发送指定数量的弹幕。这里会控制发送频率避免被系统判定为刷屏或恶意行为。任务调度为了让以上流程自动、持续地运行我们需要一个“调度器”。你可以选择在本地电脑或服务器上用cronLinux/Mac或“任务计划程序”Windows来定时执行脚本也可以使用GitHub Actions利用其免费的云服务器来定时运行完全不需要自己的设备一直开机。2.3 技术选型与v4版本升级考量为什么选择纯Python方案这是我在迭代了多个版本后的决定。零外部依赖早期版本可能依赖Node.js环境或一些第三方系统服务如pm2。这增加了部署的复杂性对于不熟悉前后端技术的用户来说是个门槛。v4版本彻底抛弃了这些只使用Python 3.9的标准库如hashlib用于签名和requests库用于网络请求真正做到开箱即用。协议对抗与维护B站的反自动化策略在不断升级。mobileHeartBeat协议相比旧协议更稳定但其请求签名算法更为复杂。v4版本用Python实现了完整的签名链sha512 → sha3_512 → sha384 → sha3_384 → blake2b这是工具能持续工作的关键。纯Python实现也使得代码更透明更容易被社区审查和共同维护。跨平台与易集成Python环境在Windows、macOS、Linux以及各种云服务器、NAS上都非常容易安装。这也使得工具能轻松地被集成到各种AI Agent框架如OpenClaw、Hermes中实现“一句话部署”。安全优先所有敏感信息Cookie都采用加密方式存储在本地的配置文件里并且文件权限会被设置为仅当前用户可读。如果使用GitHub ActionsCookie存储在GitHub的Secrets中由平台提供加密管理不会暴露在公开的代码里。3. 从零开始详细部署与配置指南理论讲完了我们进入实战环节。我会提供两种主流的部署方式一种是使用AI Agent助手最简单另一种是纯命令行操作最可控。你可以根据自身情况选择。3.1 方案一使用AI Agent助手推荐给新手如果你已经在使用OpenClaw、Hermes、QClaw这类AI Agent框架那么部署过程会简单到不可思议。这相当于你有一个精通技术的助手帮你处理所有繁琐步骤。操作流程启动你的AI助手并确保它具备执行命令行和访问GitHub的能力。直接发送安装指令将下面这句话复制粘贴给你的助手。帮我安装这个项目并设置 A-SOUL 自动挂机https://github.com/XiaoYiWeio/asoul-support等待助手工作一个合格的助手会依次执行以下操作克隆项目代码到本地。检查并提示你安装必要的Python环境如果尚未安装。引导你获取B站Cookie。它可能会直接给你一个图文教程教你如何在浏览器开发者工具中找到SESSDATA和bili_jct。将你提供的Cookie安全地保存到项目的配置文件中。询问你是否要设置定时任务。设置定时任务安装完成后再给你的助手发送第二条指令帮我设置一个定时任务每 30 分钟检测 A-SOUL 成员是否在直播在播就帮我挂机涨亲密度并点亮粉丝牌助手会根据你的操作系统自动为你配置cron或“任务计划程序”让脚本定时运行。实操心得这是目前最省心的方式。好的Agent助手甚至能处理运行中的错误比如Cookie过期时提醒你更新。它的本质是把后面命令行方案的所有步骤用自然语言交互的方式帮你自动化完成了。3.2 方案二纯命令行部署适合喜欢动手的用户如果你没有使用Agent或者希望更清晰地了解每一个步骤那么请跟随这个手动教程。3.2.1 环境准备与代码获取首先确保你的电脑或服务器上安装了Python 3.9或更高版本。打开终端Windows用户建议使用PowerShell或WSL执行以下命令检查python3 --version # 或 python --version如果版本符合接下来获取项目代码# 克隆项目到本地 git clone https://github.com/XiaoYiWeio/asoul-support.git # 进入项目目录 cd asoul-support3.2.2 关键步骤获取并配置B站Cookie这是整个流程中最关键的一步Cookie相当于你的“门禁卡”。登录B站用你的浏览器以Chrome为例打开 bilibili.com 并确保已经登录了你想要挂机的账号。打开开发者工具在页面任意位置按F12键打开开发者工具。找到Cookie切换到Application应用程序标签页。在左侧导航栏中找到Storage-Cookies-https://www.bilibili.com。然后在右侧的表格中找到名为SESSDATA和bili_jct的行复制它们的Value值。SESSDATA是主要的登录会话凭证。bili_jct是用于防止跨站请求伪造CSRF的令牌。重要警告这两个字符串是高度敏感信息任何人获得它们都能以你的身份操作B站账号包括发弹幕、投币等。切勿在任何公开场合如聊天群、论坛分享也不要上传到任何公开的代码仓库如GitHub公开项目。使用脚本安全保存Cookie在项目目录下运行以下命令将你复制的值替换到引号中。python3 scripts/checkin.py --save-cookie --sessdata 你的SESSDATA值 --bili-jct 你的bili_jct值这个命令会做两件事第一验证你提供的Cookie是否有效第二将加密后的Cookie保存到项目根目录下一个名为.asoul_config的隐藏文件中并严格设置文件权限防止其他用户读取。3.2.3 功能测试与手动运行配置好Cookie后强烈建议先手动运行一下各个功能确保一切正常。测试开播检测与挂机# 检测当前谁在直播如果在播则开始挂机25分钟拿满今日亲密度 python3 scripts/heartbeat.py运行后观察终端输出。它会列出所有预设成员的开播状态并对正在直播的成员开始执行心跳任务。你会看到类似“正在向[嘉然]直播间发送心跳...”的日志并显示亲密度增加。测试粉丝牌点亮# 为当前正在直播的成员发送弹幕点亮粉丝牌 python3 scripts/checkin.py --live-only这个命令会为每个开播的成员发送约10条弹幕。请注意为了避免被风控脚本内置了延迟执行可能需要一两分钟。测试视频点赞# 为A-SOUL成员最近7天内发布的视频点赞 python3 scripts/videos.py --days 73.2.4 配置自动化定时任务手动测试无误后我们需要让脚本自动定时执行。这里以Linux/macOS系统的cron为例。打开当前用户的cron配置表crontab -e在打开的编辑器中添加一行配置。请将/path/to/asoul-support替换为你项目实际的绝对路径。*/30 * * * * cd /path/to/asoul-support /usr/bin/python3 scripts/heartbeat.py --until-offline /tmp/asoul_heartbeat.log 21*/30 * * * *表示每30分钟执行一次。cd /path/to/asoul-support确保在项目目录下执行命令。--until-offline参数表示只要检测到开播就会一直挂机直到主播下播为止。这比只挂25分钟更能应对长时间直播。 /tmp/asoul_heartbeat.log 21将脚本的输出和错误信息重定向到一个日志文件中方便日后查看。保存并退出编辑器。cron服务会自动加载新的配置。对于Windows用户可以使用“任务计划程序”来达到类似效果。创建一个基本任务触发器设置为“每天”重复任务间隔为30分钟持续24小时。操作为“启动程序”程序或脚本填写python.exe的完整路径参数填写scripts/heartbeat.py --until-offline起始于填写你的asoul-support项目目录。4. 高级使用与个性化配置基础功能跑通后你可以根据自己需求进行更精细化的控制。4.1 成员列表管理工具内置了A-SOUL五位成员的房间号和UID。如果你想支持其他主播或者只想关注其中某几位可以轻松修改。配置文件位于config/members.json。你可以看到如下结构的JSON数据{ 嘉然: { room_id: 22637261, uid: 672328094 }, 贝拉: { room_id: 22632424, uid: 672353429 }, ... }添加新成员只需按照相同格式添加新的昵称、房间号和UID即可。房间号可以在主播直播间网址中找到live.bilibili.com/后面的数字UID是个人空间网址中的数字。指定运行成员在运行脚本时可以使用--members参数指定只对某些成员生效用逗号分隔。# 只检测和挂机嘉然和贝拉的直播间 python3 scripts/heartbeat.py --members 嘉然,贝拉4.2 使用GitHub Actions实现“云挂机”如果你没有24小时开机的设备又不想折腾服务器那么GitHub Actions是绝佳的免费方案。它特别适合运行“视频/动态点赞”这类不需要实时响应、周期性执行的任务。重要提示由于GitHub Actions的运行环境是随用随建的虚拟机且每次运行IP都可能不同不适合用于需要维持长时间稳定会话的“直播心跳挂机”容易被B站风控。但它非常适合做每日/每两天的点赞任务。设置步骤Fork项目点击项目GitHub页面的右上角Fork按钮将仓库复制到你自己的账号下。配置Secrets进入你Fork后的仓库点击Settings-Secrets and variables-Actions。点击New repository secret。创建名为SESSDATA的Secret填入你的Cookie值。创建名为BILI_JCT的Secret填入你的另一个Cookie值。启用Actions点击仓库顶部的Actions标签页点击绿色按钮启用工作流。手动触发测试在Actions页面找到名为A-SOUL 自动应援的工作流点击Run workflow手动运行一次查看是否成功。配置成功后工作流会每两天自动运行一次为你点赞成员的新视频和动态。你可以在.github/workflows/daily.yml文件中调整执行频率和启用/禁用动态点赞功能。4.3 脚本命令参数详解了解各个脚本的参数可以让你更灵活地使用工具。heartbeat.py(心跳挂机脚本)--check-only仅检测开播状态不执行挂机。用于快速查看谁在直播。--members NAME1,NAME2指定成员多个用逗号隔开。--until-offline持续挂机直到目标主播下播。这是推荐用于定时任务的参数能最大化覆盖直播时段。--interval SECONDS自定义心跳间隔秒默认300秒5分钟。非特殊情况不建议修改。checkin.py(签到与粉丝牌脚本)--live-only仅对正在直播的成员发送弹幕点亮粉丝牌。--coin谨慎使用。启用此参数会在点亮粉丝牌的同时尝试为直播投币消耗你的硬币。默认关闭。videos.py(视频操作脚本)--days N处理最近N天内发布的视频。--coin为视频投币。--fav收藏视频。--like点赞视频默认行为通常不需要指定。5. 常见问题排查与实战经验即使按照教程一步步来在实际运行中也可能遇到各种问题。这里我把自己踩过的坑和解决方案总结出来。5.1 Cookie相关问题这是最高频的问题源。症状脚本运行后立即报错提示“登录失败”、“Cookie无效”或“请先登录”。排查Cookie过期B站Cookie的有效期大约为6个月。长时间未使用工具后再次运行很可能Cookie已失效。解决方案重新按照“3.2.2”节的步骤获取新的Cookie并运行--save-cookie命令更新。Cookie获取错误确保复制的是SESSDATA和bili_jct的Value而不是Name或其他Cookie。确保浏览器登录的是正确的账号。Cookie包含引号或特殊字符复制的Cookie值有时会包含首尾的引号或者在终端粘贴时出现格式问题。在--save-cookie命令中填入值时确保字符串本身没有多余的引号。最稳妥的方式是先将值复制到文本编辑器如记事本中检查再粘贴到终端。5.2 运行环境与依赖问题症状python3: command not found或ModuleNotFoundError: No module named requests。排查Python未安装或版本过低确认已安装Python 3.9。在终端输入python3 --version查看。Windows用户如果只安装了Python命令可能是python。依赖库缺失项目依赖requests库。在项目目录下运行pip3 install -r requirements.txt一键安装所有依赖。如果只有requests缺失也可以单独安装pip3 install requests。5.3 功能执行异常症状脚本能运行但日志显示“心跳失败”、“发送弹幕失败”或亲密度/粉丝牌没有变化。排查网络问题检查你的网络是否能正常访问B站。如果是服务器在国外可能会遇到连接超时。B站风控如果你的账号在短时间内有大量异常行为如频繁登录、异地访问可能会触发B站的风控策略导致临时限制。解决方案暂停使用工具24-48小时用正常设备登录B站看一会儿视频或直播解除风控状态。协议更新虽然概率较低但如果B站更新了心跳或弹幕协议工具可能会失效。关注项目GitHub仓库的Issue页面看是否有其他用户反馈类似问题。开发者通常会及时跟进修复。直播间状态判断极少数情况下B站API返回的开播状态可能有延迟或误差。可以手动打开直播间链接确认主播是否真的在播。5.4 定时任务不执行症状配置了cron或GitHub Actions但到了时间没有运行。排查Cron路径问题cron执行时的环境变量与你的终端环境不同。务必在命令中使用绝对路径如/usr/bin/python3和项目完整路径。使用which python3命令查看Python解释器的绝对路径。Cron日志检查我们之前设置的日志文件/tmp/asoul_heartbeat.log看是否有错误输出。GitHub Actions未触发检查仓库的Actions页面查看最近的工作流运行记录。如果是Fork的仓库默认不会自动运行你需要手动在Actions页面启用一次或者修改工作流文件的触发条件。GitHub Secrets配置错误确保Secrets的名字SESSDATA,BILI_JCT完全正确且没有多余的空格。5.5 安全与隐私提醒关于投币脚本的投币功能--coin参数默认是关闭的。开启前请务必确认这将会真实消耗你账户中的硬币。建议仅在特别日子或你想主动支持时手动开启一次而不是放在定时任务中。关于账号安全本项目所有代码开源运行在你自己的环境中。Cookie本地加密存储只要你不泄露配置文件账号就是安全的。绝对不要将包含Cookie的配置文件上传到任何公开的Git仓库、网盘或发送给他人。理性使用这个工具是为了弥补无法实时观看的遗憾而不是替代真正的互动。B站直播的乐趣在于弹幕互动、观看表演本身。请在有空的时候还是亲自去直播间支持你喜欢的成员那份快乐是任何工具都无法替代的。最后如果这个项目帮到了你欢迎到GitHub仓库点个Star这能让更多有需要的“一个魂”发现它。如果在使用中遇到任何问题或者有改进的想法也欢迎在仓库中提交Issue。技术或许冰冷但用它来守护的热爱始终温暖。