// ==UserScript==
// @name B站主播后台助手
// @namespace http://tampermonkey.net/
// @version 0.2
// @description 功能:一键导出单日直播礼物数据。使用方式:登录b站后进入用户中心,网页左下角会出现控制台。
// @author 小长长
// @include /^https?:\/\/link\.bilibili\.com\/p\/center\/index(.*?)$/
// @require https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
// @grant GM_addStyle
// @downloadURL none
// ==/UserScript==
(function() {
'use strict';
// Your code here...
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
function get_received_gift_list(d, csv, page_num) {
var url = "https://api.live.bilibili.com/xlive/revenue/v1/giftStream/getReceivedGiftStreamList?page_num="+page_num+"&page_size=20&coin_type=0&gift_id=&begin_time="+d+"&uname=";
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onload = function () {
var resp = JSON.parse(this.responseText);
if (resp.data.list.length === 0) {
download(`直播礼物统计${d}.csv`, csv);
} else {
for (var i in resp.data.list) {
var g = resp.data.list[i];
csv += `${g.uid},${g.uname},${g.time},${g.gift_name},${g.gift_num},${g.hamster},${g.normal_gold},${g.silver}\n`;
}
get_received_gift_list(d, csv, page_num+1);
}
};
xhr.withCredentials = true;
xhr.send();
}
window.addEventListener('load', function() {
var zNode = document.createElement ('div');
zNode.innerHTML = '下载当日收益';
zNode.setAttribute ('id', 'myContainer');
document.body.appendChild (zNode);
//--- Activate the newly added button.
document.getElementById ("myButton").addEventListener (
"click", ButtonClickAction, false
);
function ButtonClickAction (zEvent) {
var date = $('#input-date')[0].value;
if (date === '') return;
get_received_gift_list(date, "\ufeff送礼用户uid,送礼用户昵称,收礼时间,礼物名称,数量,金仓鼠数,金瓜子数,银瓜子数\n", 1);
}
//--- Style our newly added elements using CSS.
GM_addStyle ( `
#myContainer {
position: fixed;
top: 85%;
left: 0;
font-size: 20px;
background: #4fc1e9;
border: 3px outset black;
margin: 5px;
opacity: 0.8;
z-index: 1100;
padding: 5px 20px;
width: 200px;
}
#myButton {
cursor: pointer;
}
.ld-input {
width: 60px;
}
` );
}, false);
})();