洛谷粉丝统计脚本

分享洛谷账户统计脚本。脚本基于JavaScript语言,适用于洛谷。该脚本非洛谷官方制作,与洛谷官方无关。

脚本采用异步处理技术,由鏡音リン制作并授权转载。


function f_request_sync(url) {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, false);
    xhr.send(null);
    if (xhr.status != 200) return;
    return JSON.parse(xhr.response);
}
function f_request(url, id) {
    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            if (xhr.status == 200)
                f_handle(JSON.parse(xhr.response));
            else f_error(id);
        }
    }
    xhr.open("GET", url, true);
    xhr.send(null);
}
const f_uid = 108103;
var f_users = [];
var f_queue = [];
var f_id;
var f_succ = 0, f_pages;
function f_handle(data) {
    f_users.push.apply(f_users, data.users.result);
    f_succ++;
}
function f_error(id) {
    f_queue.push(id);
}
function f_work() {
    console.log(f_succ+'/'+f_pages);
    if (f_pages == f_succ) {
        clearInterval(f_id);
        f_info();
        return;
    }
    var t = 10;
    while (t > 0 && f_queue.length > 0) {
        t--;
        var id = f_queue.pop();
        f_request('https://www.luogu.com.cn/fe/api/user/followers?user='+f_uid+'&page='+id, id);
    }
}
function f_main() {
    var data = f_request_sync('https://www.luogu.com.cn/fe/api/user/followers?user='+f_uid+'&page=1');
    var count = data.users.count, per_page = data.users.perPage;
    f_pages = Math.ceil(data.users.count / data.users.perPage);
    for (var i = 1; i <= f_pages; i++)
        f_queue.push(i);
    f_id = setInterval(f_work, 1000);
}
function f_info() {
    var f_followers = f_users.length;
    var f_color = {Cheater:0,Gray:0,Blue:0,Green:0,Orange:0,Red:0,Purple:0};
    var f_ccflevel = {'0':0,'3':0,'4':0,'5':0,'6':0,'7':0,'8':0,'9':0,'10':0};
    var f_badge = 0;
    var f_banned = 0;
    var f_sum_follower = 0;
    var f_sum_following = 0;
    var f_sum_uid = 0;
    var f_friends = 0;
    for (var i = 0; i < f_followers; i++) {
        var c = f_users[i];
        f_color[c.color]++;
        f_ccflevel[c.ccfLevel]++;
        if (c.badge) f_badge++;
        if (c.isBanned) f_banned++;
        f_sum_follower += c.followerCount;
        f_sum_following += c.followingCount;
        f_sum_uid += c.uid;
        if (c.userRelationship) f_friends++;
    }
    console.log('followers: '+f_followers);
    console.log('color: ');
    for (var x in f_color)
        console.log('\t'+x+': '+f_color[x]);
    console.log('ccflevel: ');
    for (var x in f_ccflevel)
        console.log('\t'+x+': '+f_ccflevel[x]);
    console.log('has badge: '+f_badge);
    console.log('banned: '+f_banned);
    console.log('average follower count: '+f_sum_follower/f_followers);
    console.log('average following count: '+f_sum_following/f_followers);
    console.log('average uid: '+f_sum_uid/f_followers);
    console.log('friends: '+f_friends);
}
f_main();

使用方法:将 const f_uid = 108103; 中的 108103 改为你自己的用户id,将脚本复制到browser的console里运行。

注意:

  • 在Google Chrome macOS中console出于安全考虑自觉拒绝运行脚本。原因是:

    [Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user’s experience. For more help, check https://xhr.spec.whatwg.org/.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值