【奇怪的东西】关于关注我的人的统计

鏡音リン

2020-06-27 23:26:46

Personal

## 管理员已明确表示该脚本被滥用导致卡服,且相关接口功能也遭到阉割,故此代码现仅供考古。 2020/6/27 400粉祭 2020/7/21 500粉祭 2020/8/1 600粉祭(反正脚本已经废了 感谢大家的支持!! 无聊写了个脚本统计一下所有粉丝的数据,看看都是什么人关注我 ### 截至2020/7/21 17:38 (直接取的脚本输出,能看得懂啥意思吧) ``` followers: 500 color: Cheater: 3 Gray: 23 Blue: 137 Green: 133 Orange: 97 Red: 103 Purple: 4 ccflevel: 0: 356 3: 13 4: 31 5: 44 6: 23 7: 31 8: 2 9: 0 10: 0 has badge: 7 banned: 5 average follower count: 109.886 average following count: 96.576 average uid: 198898.96 friends: 47 ``` 以后涨粉了可能会更新的。 ### 脚本 应大家要求重造了一遍脚本然后发出来了…… 由于不会JS所以粗制滥造,勿喷,嫌差就自己写去 7/22:已更新,以下为异步版本 使用方法:把第 20 行的 uid 改成你的然后扔到浏览器控制台里 如果爆了503/504什么的无视就行,会自动重试 ~~跑粉丝较多的人效果还是很差,疑似服务端问题(响应时间明显延长,难道是服务端对粉丝暴力排序?),我这里无能为力了~~ **疑似相关接口遭到阉割,只能看前20页,所以理论上只能正常跑400粉以下的** ```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 = 90893; 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(); ```