Bilibili-API

BilibiliAPI,PC端抓包研究所得

נכון ליום 03-02-2018. ראה הגרסה האחרונה.

אין להתקין סקריפט זה ישירות. זוהי ספריה עבור סקריפטים אחרים // @require https://update.greatest.deepsurf.us/scripts/38140/247719/Bilibili-API.js

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==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'
            });
        }
    }
};