Bilibili 动态页显示当前所有直播

显示当前所有直播

< Părere la script-ul Bilibili 动态页显示当前所有直播

Întrebare/comentariu

§
Postat în: 09-06-2024

换了个api用gpt修改了一下,把334-408行function loadContent()函数换成下面的内容,测试过是能用的,可以暂时用着,感谢作者的源码

function loadContent() {
    var livepanel = document.querySelector('#sml-livepanel');
    livepanel.innerHTML = '';
    var titlesp2 = document.querySelector('#sml-titlesp2');
    let page = 1;
    let pageSize = 29;
    let liveUsers = [];

    function fetchLiveUsers(page) {
        getJSON(`https://api.live.bilibili.com/xlive/web-ucenter/user/following?page=${page}&page_size=${pageSize}`).then(xhr => {
            var jsondata = xhr.response.data;
            var currentLiveUsers = jsondata.list.filter(user => user.live_status === 1);
            liveUsers = liveUsers.concat(currentLiveUsers);

            // If all users in the current page have live_status != 1, stop fetching
            if (jsondata.list.every(user => user.live_status !== 1) || page >= jsondata.totalPage) {
                displayLiveUsers();
            } else {
                fetchLiveUsers(page + 1);
            }
        }, xhr => {
            var err = document.createElement('p');
            err.className = 'sml-center';
            err.innerText = "直播数据获取失败!(" + xhr.status + " " + xhr.statusText + ")";
            livepanel.appendChild(err);
        });
    }

    function displayLiveUsers() {
        titlesp2.innerText = '(' + liveUsers.length + ')'; // 人数

        if (liveUsers.length > 0) {
            liveUsers.forEach(user => {
                // 容器div
                let livecontainer = document.createElement('div');
                livecontainer.className = 'sml-livecontainer';

                // UP主头像a
                let a1 = document.createElement('a');
                a1.className = 'sml-block sml-a1';
                a1.style = 'background-image:url("' + user.face + '@50w_50h.png");';
                a1.href = 'https://live.bilibili.com/' + user.roomid;
                a1.target = '_blank';

                // 直播信息a
                let a2 = document.createElement('a');
                a2.className = 'sml-block sml-a2';
                a2.href = 'https://live.bilibili.com/' + user.roomid;
                a2.target = '_blank';

                // UP主名称div
                let upname = document.createElement('div');
                upname.className = 'sml-word sml-block sml-upname';
                upname.innerText = user.uname;

                // 分区名称div
                let areaname = document.createElement('a');
                areaname.className = 'sml-word sml-block sml-areaname';
                areaname.innerText = user.area_name_v2;
                areaname.href = 'https://live.bilibili.com/p/eden/area-tags?parentAreaId=' + user.parent_area_id + '&areaId=' + user.area_id;
                areaname.target = '_blank';

                // 直播名称div
                let livename = document.createElement('div');
                livename.className = 'sml-word sml-block sml-livename';
                livename.innerText = user.title;

                a2.appendChild(upname);
                a2.appendChild(areaname);
                a2.appendChild(livename);

                livecontainer.appendChild(a1);
                livecontainer.appendChild(a2);

                livepanel.appendChild(livecontainer);
            });
        } else {
            var err = document.createElement('p');
            err.className = 'sml-center';
            err.innerText = "当前无直播";
            livepanel.appendChild(err);
        }
    }

    fetchLiveUsers(page);
}
§
Postat în: 09-06-2024

感谢,可以了

§
Postat în: 11-06-2024

亲测可用 感谢

§
Postat în: 14-06-2024

感谢分享新api!另外捉个虫,分区信息无法正常显示可以在此基础上把“分区名称div”模块的代码修改如下:

                // 分区名称div
                let areaname = document.createElement('a');
                areaname.className = 'sml-word sml-block sml-areaname';
                var roomid = user.roomid;
                getJSON('https://api.live.bilibili.com/xlive/web-room/v1/index/getInfoByRoom?room_id=' + roomid).then(xhr => {
                    var jsondata = xhr.response.data.room_info;
                    // 获取房间信息
                    areaname.innerText = jsondata.area_name;
                    areaname.href = 'https://live.bilibili.com/p/eden/area-tags?parentAreaId=' + jsondata.parent_area_id + '&areaId=' + jsondata.area_id;
                    areaname.target = '_blank';
                    }, xhr => { // 房间信息获取失败(非200)
                });
§
Postat în: 16-06-2024

感谢

Postează un raspuns

Autentifică-te pentru a posta un răspuns.