// ==UserScript==
// @name Bilibili-API
// @namespace SeaLoong
// @version 1.0.0
// @description BilibiliAPI,PC端抓包研究所得
// @author SeaLoong
// @license MIT License
// ==/UserScript==
var BilibiliAPI = {
last_ajax: 0,
cnt_frequently_ajax: 0,
ajax: function(settings) {
if (Date.now() - BilibiliAPI.last_ajax < 20) {
BilibiliAPI.cnt_frequently_ajax++;
} else {
BilibiliAPI.cnt_frequently_ajax = 0;
}
BilibiliAPI.last_ajax = Date.now();
if (BilibiliAPI.cnt_frequently_ajax > 5) throw new Error('调用Bilibili API太快,可能出现了bug');
if (settings.xhrFields) {
$.extend(settings.xhrFields, {
withCredentials: true
});
} else {
settings.xhrFields = {
withCredentials: true
};
}
$.extend(settings, {
url: (settings.url.substr(0, 2) === '//' ? '' : '//api.live.bilibili.com/') + settings.url,
type: settings.type || 'GET',
crossDomain: true,
dataType: settings.dataType || 'json'
});
return $.ajax(settings);
},
ajaxGetCaptchaKey: function() {
return BilibiliAPI.ajax({
url: '//www.bilibili.com/plus/widget/ajaxGetCaptchaKey.php?js'
});
},
msg: function(roomid, csrf_token) {
return BilibiliAPI.ajax({
type: 'POST',
url: 'ajax/msg',
data: {
roomid: roomid,
csrf_token: typeof csrf_token === 'function' ? csrf_token() : csrf_token
}
});
},
ajaxCapsule: function(id, ts, platform, player_type) {
return BilibiliAPI.ajax({
url: 'api/ajaxCapsule'
});
},
player: function(id, ts, platform, player_type) { //获取直播流相关信息
return BilibiliAPI.ajax({
url: 'api/player',
data: {
id: id,
ts: ts, // HEX
platform: platform || 'pc',
player_type: player_type || 'web'
},
dataType: 'text'
});
},
create: function(width, height) { // 生成一个验证码
return BilibiliAPI.ajax({
url: 'captcha/v1/Captcha/create',
data: {
width: width,
height: height,
_: ts_ms()
}
});
},
topList: function(roomid, page, ruid) {
return BilibiliAPI.ajax({
url: 'guard/topList',
data: {
roomid: roomid,
page: page,
ruid: ruid
}
});
},
getSuser: function() {
return BilibiliAPI.ajax({
url: 'msg/getSuser'
});
},
refresh: function(area) {
return BilibiliAPI.ajax({
url: 'index/refresh?area=' + area || 'all'
});
},
get_ip_addr: function() {
return BilibiliAPI.ajax({
url: 'ip_service/v1/ip_service/get_ip_addr'
});
},
ajaxGetMyMedalList: function() {
return BilibiliAPI.ajax({
url: '//live.bilibili.com/i/ajaxGetMyMedalList'
});
},
getuserinfo: function() {
return BilibiliAPI.ajax({
url: '//live.bilibili.com/user/getuserinfo'
});
},
MyInfo: function() {
return BilibiliAPI.ajax({
url: '//space.bilibili.com/ajax/member/MyInfo'
});
},
activity: {
mobileActivity: function() {
return BilibiliAPI.ajax({
url: 'activity/v1/Common/mobileActivity'
});
},
roomInfo: function(roomid, ruid) {
return BilibiliAPI.ajax({
url: 'activity/v1/Common/roomInfo',
data: {
roomid: roomid,
ruid: ruid
}
});
},
welcomeInfo: function(roomid) {
return BilibiliAPI.ajax({
url: 'activity/v1/Common/welcomeInfo?roomid=' + roomid
});
},
master_invite_task: function() {
return BilibiliAPI.ajax({
url: 'activity/v1/invite/master_invite_task'
});
},
check: function(roomid) {
return BilibiliAPI.ajax({
url: 'activity/v1/Raffle/check?roomid=' + roomid
});
},
join: function(roomid, raffleId) {
return BilibiliAPI.ajax({
url: 'activity/v1/Raffle/join',
data: {
roomid: roomid,
raffleId: raffleId
}
});
},
notice: function(roomid, raffleId) {
return BilibiliAPI.ajax({
url: 'activity/v1/Raffle/notice',
data: {
roomid: roomid,
raffleId: raffleId
}
});
},
master_limit_tasks: function() {
return BilibiliAPI.ajax({
url: 'activity/v1/task/master_limit_tasks'
});
},
receive_award: function(task_id, csrf_token) {
return BilibiliAPI.ajax({
type: 'POST',
url: 'activity/v1/task/receive_award',
data: {
task_id: task_id,
csrf_token: typeof csrf_token === 'function' ? csrf_token() : csrf_token
}
});
},
user_limit_tasks: function() {
return BilibiliAPI.ajax({
url: 'activity/v1/task/user_limit_tasks'
});
}
},
feed: {
getList: function(page, page_size) {
return BilibiliAPI.ajax({
url: 'feed/v1/feed/getList',
data: {
page: page,
page_size: page_size,
_: ts_ms()
}
});
},
heartBeat: function(_cb) {
return BilibiliAPI.ajax({
url: 'feed/v1/feed/heartBeat',
data: {
_cb: _cb
}
});
},
GetUserFc: function(follow) { // follow: 主播uid===ruid
return BilibiliAPI.ajax({
url: 'feed/v1/Feed/GetUserFc?follow=' + follow
});
},
IsUserFollow: function(follow) { // follow: 主播uid===ruid
return BilibiliAPI.ajax({
url: 'feed/v1/Feed/IsUserFollow?follow=' + follow
});
},
},
feed_svr: {
notice: function(csrf_token) {
return BilibiliAPI.ajax({
type: 'POST',
url: 'feed_svr/v1/feed_svr/notice',
data: {
csrf_token: typeof csrf_token === 'function' ? csrf_token() : csrf_token
}
});
},
my: function(page_size, csrf_token, live_status, type, offset) {
return BilibiliAPI.ajax({
type: 'POST',
url: 'feed_svr/v1/feed_svr/my',
data: {
live_status: live_status || 0,
type: type || 0,
page_size: page_size,
offset: offset || 0,
csrf_token: typeof csrf_token === 'function' ? csrf_token() : csrf_token
}
});
}
},
FreeSilver: {
getSurplus: function() {
return BilibiliAPI.ajax({
url: 'FreeSilver/getSurplus'
});
},
getAward: function(time_start, end_time, captcha) {
return BilibiliAPI.ajax({
url: 'FreeSilver/getAward',
data: {
time_start: time_start,
end_time: end_time,
captcha: captcha
}
});
},
getCurrentTask: function() {
return BilibiliAPI.ajax({
url: 'FreeSilver/getCurrentTask'
});
},
getCaptcha: function(ts, callback) {
getBlobDataURL("//api.live.bilibili.com/freeSilver/getCaptcha?ts=" + ts, callback);
}
},
gift: {
bag_list: function() {
return BilibiliAPI.ajax({
url: 'gift/v2/gift/bag_list'
});
},
send: function(uid, gift_id, ruid, gift_num, coin_type, biz_id, rnd, csrf_token, platform, biz_code, storm_beat_id) {
return BilibiliAPI.ajax({
type: 'POST',
url: 'gift/v2/gift/send',
data: {
uid: uid,
gift_id: gift_id,
ruid: ruid,
gift_num: gift_num,
coin_type: coin_type || 'silver',
bag_id: 0,
platform: platform || 'pc',
biz_code: biz_code || 'live',
biz_id: biz_id, //roomid
rnd: rnd,
storm_beat_id: storm_beat_id || 0,
// metadata: metadata,
csrf_token: typeof csrf_token === 'function' ? csrf_token() : csrf_token
}
});
},
bag_send: function(uid, gift_id, ruid, gift_num, bag_id, biz_id, rnd, csrf_token, platform, biz_code, storm_beat_id) {
return BilibiliAPI.ajax({
type: 'POST',
url: 'gift/v2/live/bag_send',
data: {
uid: uid,
gift_id: gift_id,
ruid: ruid,
gift_num: gift_num,
bag_id: bag_id,
platform: platform || 'pc',
biz_code: biz_code || 'live',
biz_id: biz_id, //roomid
rnd: rnd,
storm_beat_id: storm_beat_id || 0,
// metadata: metadata,
csrf_token: typeof csrf_token === 'function' ? csrf_token() : csrf_token
}
});
},
heart_gift_receive: function(roomid, area_v2_id) {
return BilibiliAPI.ajax({
url: 'gift/v2/live/heart_gift_receive',
data: {
roomid: roomid,
area_v2_id: area_v2_id
}
});
},
heart_gift_status: function(roomid, area_v2_id) {
return BilibiliAPI.ajax({
url: 'gift/v2/live/heart_gift_status',
data: {
roomid: roomid,
area_v2_id: area_v2_id
}
});
},
receive_daily_bag: function() {
return BilibiliAPI.ajax({
url: 'gift/v2/live/receive_daily_bag'
});
},
room_gift_list: function(roomid, area_v2_id) {
return BilibiliAPI.ajax({
url: 'gift/v2/live/room_gift_list',
data: {
roomid: roomid,
area_v2_id: area_v2_id
}
});
},
smalltv: {
check: function(roomid) {
return BilibiliAPI.ajax({
url: 'gift/v2/smalltv/check',
data: {
roomid: roomid
}
});
},
join: function(roomid, raffleId) {
return BilibiliAPI.ajax({
url: 'gift/v2/smalltv/join',
data: {
roomid: roomid,
raffleId: raffleId
}
});
},
notice: function(roomid, raffleId) {
return BilibiliAPI.ajax({
url: 'gift/v2/smalltv/notice',
data: {
roomid: roomid,
raffleId: raffleId
}
});
}
}
},
giftBag: {
getSendGift: function() {
return BilibiliAPI.ajax({
url: 'giftBag/getSendGift'
});
},
sendDaily: function() {
return BilibiliAPI.ajax({
url: 'giftBag/sendDaily'
});
}
},
i: {
ajaxGetAchieve: function(page, pageSize, type, status, category, keywords) {
return BilibiliAPI.ajax({
url: 'i/api/ajaxGetAchieve',
data: {
type: type || 'normal', // or'legend'
status: status || 0,
category: category || 'all',
keywords: keywords,
page: page,
pageSize: pageSize || 6
}
});
},
ajaxCancelWear: function() {
return BilibiliAPI.ajax({
url: 'i/ajaxCancelWear'
});
},
ajaxWearFansMedal: function(medal_id) {
return BilibiliAPI.ajax({
url: 'i/ajaxWearFansMedal?medal_id=' + medal_id
});
},
following: function(page, pageSize) {
return BilibiliAPI.ajax({
url: 'i/api/following',
data: {
page: page,
pageSize: pageSize
}
});
},
guard: function(page, pageSize) {
return BilibiliAPI.ajax({
url: 'i/api/guard',
data: {
page: page,
pageSize: pageSize
}
});
},
liveinfo: function() {
return BilibiliAPI.ajax({
url: 'i/api/liveinfo'
});
},
medal: function(page, pageSize) {
return BilibiliAPI.ajax({
url: 'i/api/medal',
data: {
page: page,
pageSize: pageSize
}
});
},
operation: function(page) {
return BilibiliAPI.ajax({
url: 'i/api/operation?page=' + page
});
},
taskInfo: function() {
return BilibiliAPI.ajax({
url: 'i/api/taskInfo'
});
}
},
live: {
getRoomKanBanModel: function(roomid) {
return BilibiliAPI.ajax({
url: 'live/getRoomKanBanModel?roomid' + roomid
});
},
rankTab: function(roomid) {
return BilibiliAPI.ajax({
url: 'live/rankTab?roomid=' + roomid
});
},
roomAdList: function() {
return BilibiliAPI.ajax({
url: 'live/roomAdList'
});
}
},
live_user: {
get_anchor_in_room: function(roomid) {
return BilibiliAPI.ajax({
url: 'live_user/v1/UserInfo/get_anchor_in_room?roomid=' + roomid
});
},
get_info_in_room: function(roomid) {
return BilibiliAPI.ajax({
url: 'live_user/v1/UserInfo/get_info_in_room?roomid=' + roomid
});
},
get_weared_medal: function(uid, target_id, csrf_token, source) {
return BilibiliAPI.ajax({
type: 'POST',
url: 'live_user/v1/UserInfo/get_weared_medal',
data: {
source: source || 1,
uid: uid,
target_id: target_id, // roomid
csrf_token: typeof csrf_token === 'function' ? csrf_token() : csrf_token
}
});
}
},
lottery: {
getRoomActivityByRoomid: function(roomid) {
return BilibiliAPI.ajax({
url: 'lottery/v1/box/getRoomActivityByRoomid?roomid=' + roomid
});
},
check: function(roomid) {
return BilibiliAPI.ajax({
url: 'lottery/v1/Storm/check?roomid=' + roomid
});
},
join: function(id, captcha_token, captcha_phrase, csrf_token, color) { // 参加节奏风暴
return BilibiliAPI.ajax({
type: 'POST',
url: 'lottery/v1/Storm/join',
data: {
id: id,
color: color || 16777215,
captcha_token: captcha_token,
captcha_phrase: captcha_phrase,
csrf_token: typeof csrf_token === 'function' ? csrf_token() : csrf_token
}
});
}
},
rankdb: {
roomInfo: function(ruid, roomid, areaId) {
return BilibiliAPI.ajax({
url: 'rankdb/v1/Common/roomInfo',
data: {
ruid: ruid,
roomid: roomid,
areaId: areaId
}
});
}
},
room: {
get_info: function(room_id, from) {
return BilibiliAPI.ajax({
url: 'room/v1/Room/get_info',
data: {
room_id: room_id,
from: from || 'room'
}
});
},
playUrl: function(cid, quality, platform) {
return BilibiliAPI.ajax({
url: 'room/v1/Room/playUrl',
data: {
cid: cid, // roomid
quality: quality || '0',
platform: platform || 'web'
}
});
},
room_entry_action: function(room_id, csrf_token, platform) {
return BilibiliAPI.ajax({
type: 'POST',
url: 'room/v1/Room/room_entry_action',
data: {
room_id: room_id,
platform: platform || 'pc',
csrf_token: typeof csrf_token === 'function' ? csrf_token() : csrf_token
}
});
},
room_init: function(id) {
return BilibiliAPI.ajax({
url: 'room/v1/Room/room_init?id=' + id
});
}
},
sign: {
doSign: function() {
return BilibiliAPI.ajax({
url: 'sign/doSign'
});
},
GetSignInfo: function() {
return BilibiliAPI.ajax({
url: 'sign/GetSignInfo'
});
},
getLastMonthSignDays: function() {
return BilibiliAPI.ajax({
url: 'sign/getLastMonthSignDays'
});
}
},
user: {
getWear: function(uid) {
return BilibiliAPI.ajax({
url: 'user/v1/user_title/getWear?uid=' + uid
});
},
userOnlineHeart: function() {
return BilibiliAPI.ajax({
type: 'POST',
url: 'User/userOnlineHeart'
});
},
getUserInfo: function(ts) { // ms
return BilibiliAPI.ajax({
url: 'User/getUserInfo?ts=' + ts
});
}
},
YearWelfare: {
checkFirstCharge: function() {
return BilibiliAPI.ajax({
url: 'YearWelfare/checkFirstCharge'
});
},
inviteUserList: function() {
return BilibiliAPI.ajax({
url: 'YearWelfare/inviteUserList/1'
});
}
}
};