bilibili直播弹幕获取。通过读取右侧聊天框实现。
// ==UserScript==
// @name b站弹幕助手
// @namespace https://github.com/wanglz111
// @version 0.1
// @description bilibili直播弹幕获取。通过读取右侧聊天框实现。
// @author wlz
// @match https://live.bilibili.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
var m = new Map();
let style = document.createElement('style');
document.head.appendChild(style);
let width = document.body.clientWidth;
let from = `from { visibility: visible; -webkit-transform: translateX(${width}px); }`;
let to = `to { visibility: visible; -webkit-transform: translateX(-100%); }`;
style.sheet.insertRule(`@-webkit-keyframes barrage { ${from} ${to} }`, 0);
var int = self.setInterval(function() {
var canvas = document.getElementsByClassName("chat-item danmaku-item ");
let player = document.getElementsByClassName("bilibili-live-player-video-danmaku")[0];
var myDms = document.getElementsByClassName('youhoudanmu');
for(var i = 0; i < canvas.length; i++) {
var id = canvas[i].dataset["uid"];
if(!m.has(id)) {
if (m.length >= 100) {
m.clear();
}
m.set(canvas[i].dataset["uid"],canvas[i].dataset["danmaku"]);
let div = document.createElement('div');
let height = Number(Math.random() * 80).toFixed(1) + "%";
div.style= "position:absolute;left:0;top:" + height +";visibility:hidden;animation:barrage 10s linear 0s;color: white;font-size:22px;font-weight: blod;";
div.className = 'youhoudanmu';
div.innerText = canvas[i].dataset["danmaku"];
if (player != null) {
if(myDms.length > 100) {
for(var j = 0; j < myDms.length; j++) {
player.removeChild(myDms[j]);
}
}
player.appendChild(div);
}
}
}
}, 10);
// Your code here...
})();