PHP-Bilibili-Danmu 是一个高级集成框架,连接到Bilibili的直播平台,实时处理、记录和互动弹幕(子弹评论/聊天消息)以及其他直播事件。
该系统基于 PHP 高性能 Webman 框架构建,为监控和响应Bilibili直播活动提供了全面的解决方案。
这个框架充当PHP应用程序和Bilibili直播生态系统之间的桥梁,使开发者能够:
该项目利用 Protocol Buffers 进行高效、结构化的消息处理,使其能够可靠地处理大量流数据。
Protocol Buffers 是谷歌开发的一种语言中立、平台中立、可扩展的序列化结构化数据的机制。可以将其视为XML或JSON,但更小、更快,并且能自动生成数据访问代码。
PHP-Bilibili-Danmu 为 Bilibili 直播集成提供了强大的功能集。
功能 | 描述 |
---|---|
弹幕处理 | 捕获、解析和存储来自直播的聊天消息 |
礼物追踪 | 记录和处理直播中的礼物交易 |
直播集成 | 同时连接到多个直播间 |
用户管理 | 跟踪用户互动并维护用户数据 |
管理仪表盘 | 提供全面的监控和配置界面 |
基于角色的访问控制 | 通过可配置的角色管理权限 |
国际化 | 通过翻译系统支持多种语言 |
克隆仓库
git clone https://github.com/zxc7563598/php-bilibili-danmu.git
使用Composer安装依赖
cd php-bilibili-danmu
composer install
这将安装所有必需的依赖项,包括Bilibili直播集成库和Webman框架
设置环境变量
在根目录下创建一个.env
文件,包含以下最小配置:
APP_DEBUG=true
APP_DEFAULT_TIMEZONE=Asia/Shanghai
# 数据库配置
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=bilibili_danmu
DB_USERNAME=root
DB_PASSWORD=your_password
# Redis配置
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
准备Bilibili cookies
您需要将Bilibili cookies保存到配置文件中。创建运行时目录和cookie文件:
mkdir -p runtime/tmp
touch runtime/tmp/cookie.cfg
然后将您的Bilibili cookies添加到这个文件中。系统将自动处理bili_ticket
的刷新。
运行数据库迁移以创建必要的表:
vendor/bin/phinx migrate
这将创建所有必需的表,包括用于存储弹幕消息的bl_danmu_logs
和用于跟踪直播流的bl_lives
。
创建一个简单的脚本来连接到Bilibili直播流。以下是一个基本示例:
<?php
require_once__DIR__ . '/vendor/autoload.php';
use app\core\RobotServices;
use Hejunjie\Bililive;
// 从命令行获取房间ID或直接设置
$roomId = $argv[1] ?? 123456; // 替换为实际的房间ID
// 获取身份验证cookie
$cookie = RobotServices::getCookie();
// 连接到直播房间
$client = new Bililive\Client([
'room_id' => $roomId,
'cookie' => $cookie
]);
echo"正在连接到房间 $roomId...\n";
// 启动客户端
$client->start();
将其保存为connect.php
,并使用php connect.php [ROOM_ID]
运行以测试连接。
要处理弹幕消息,我们需要向客户端添加事件处理器。扩展之前的脚本:
<?php
require_once__DIR__ . '/vendor/autoload.php';
use app\core\RobotServices;
use Hejunjie\Bililive;
use app\model\DanmuLogs;
use Google\Protobuf\Internal\CodedInputStream;
use app\Protobuf\InteractWordV2\InteractWordV2;
// 从命令行获取房间ID或直接设置
$roomId = $argv[1] ?? 123456; // 替换为实际的房间ID
// 获取身份验证cookie
$cookie = RobotServices::getCookie();
// 连接到直播房间
$client = new Bililive\Client([
'room_id' => $roomId,
'cookie' => $cookie
]);
echo"正在连接到房间 $roomId...\n";
// 添加事件处理器
$client->on('DANMU_MSG', function($data) {
echo"收到来自{$data['info'][2][1]}的弹幕: {$data['info'][1]}\n";
// 保存到数据库
$danmu = new DanmuLogs();
$danmu->uid = $data['info'][2][0];
$danmu->uname = $data['info'][2][1];
$danmu->content = $data['info'][1];
$danmu->roomid = $data['roomid'];
$danmu->save();
});
// 处理INTERACT_WORD消息(进入、关注等)
$client->on('INTERACT_WORD_V2', function($data) {
$stream = new CodedInputStream($data['data']);
$message = new InteractWordV2();
$message->mergeFromStream($stream);
echo"用户互动: {$message->getUname()} (类型: {$message->getMsgType()})\n";
});
// 启动客户端
$client->start();
此脚本连接到直播房间,监听弹幕消息,并将它们存储在数据库中。
以下是系统处理弹幕消息的基本流程:
启动webman HTTP服务器:
php start.php start
对于生产环境,建议以守护进程模式运行:
php start.php start -d
验证安装
启动服务器后,通过以下方式验证安装: