Skip to content

Commit 54685bf

Browse files
committed
feat: sort by fans and update
1 parent b9e5bbe commit 54685bf

File tree

1 file changed

+72
-9
lines changed

1 file changed

+72
-9
lines changed

scripts/ckylin-bilibili-unfollow.user.js

Lines changed: 72 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@
195195
}
196196
};
197197
const getUInfoURL = () => `https://api.bilibili.com/x/space/wbi/acc/info`;//wbi,mid
198+
const getUserCardInfo = uid => `https://api.bilibili.com/x/web-interface/card?mid=${uid}`;
198199
const getGroupURL = () => `https://api.bilibili.com/x/relation/tags`;
199200
const getWhispersURL = (pn, ps = 50) => `https://api.bilibili.com/x/relation/whispers?pn=${pn}&ps=${ps}&order=desc&order_type=attention`;// removed
200201
const getFetchURL = (uid, pn) => `https://api.bilibili.com/x/relation/followings?vmid=${uid}&pn=${pn}&ps=50&order=desc&order_type=attention`;
@@ -521,14 +522,15 @@
521522
return null;
522523
}
523524
}
524-
const getUserStats = async (uid, withraw = false) => {
525+
const getUserStats = async (uid, withraw = false, fast = false) => {
525526
try {
526-
const jsonData = await (await fetch(getRequest(getUInfoURL()+"?"+await getWbiSignedParams({mid:uid})))).json();
527+
const jsonData = fast? (await (await fetch(getRequest(getUserCardInfo(uid)))).json()) : (await (await fetch(getRequest(getUInfoURL()+"?"+await getWbiSignedParams({mid:uid})))).json());
527528
if (jsonData && jsonData.code === 0) {
528-
const udata = jsonData.data;
529+
// const udata = jsonData.data;
530+
const udata = fast? jsonData.data.card : jsonData.data;
529531
const parsedData = {
530532
ok: true,
531-
level: udata.level,
533+
level: udata.level ?? udata.level_info.current_level,
532534
banned: udata.silence === 1,
533535
RIP: udata.sys_notice === 20,
534536
disputed: udata.sys_notice === 8,
@@ -537,6 +539,7 @@
537539
cates: udata.tags,
538540
lives: udata.live_room,
539541
official_verify: udata.official_verify ?? udata.official,
542+
follower: udata.stats?.follower ?? udata.fans ?? jsonData.data?.follower
540543
};
541544
if (withraw) {
542545
return Object.assign({}, udata, parsedData);
@@ -548,15 +551,15 @@
548551
}
549552
return { ok: false }
550553
}
551-
const fillUserStatus = async (uid, refresh = false) => {
554+
const fillUserStatus = async (uid, refresh = false, fast = false) => {
552555
setInfoBar(`正在为${uid}填充用户信息`)
553556
uid = parseInt(uid);
554557
if (datas.mappings[uid] && datas.mappings[uid].filled) {
555558
log(uid, "already filled")
556559
resetInfoBar();
557560
return datas.mappings[uid];
558561
}
559-
const userinfo = await getUserStats(uid, refresh);
562+
let userinfo = await getUserStats(uid, refresh, fast);
560563
if (userinfo.ok) {
561564
if (refresh) datas.mappings[uid] = userinfo;
562565
datas.mappings[uid].level = userinfo.level;
@@ -567,7 +570,8 @@
567570
datas.mappings[uid].sign = userinfo.sign;
568571
datas.mappings[uid].cates = userinfo.cates;
569572
datas.mappings[uid].lives = userinfo.lives;
570-
datas.mappings[uid].filled = true;
573+
datas.mappings[uid].follower = userinfo.follower;
574+
datas.mappings[uid].filled = !fast;
571575
if (!userinfo.banned && !userinfo.RIP) {
572576
const lastUpdate = await getLatestVideoPublishDate(uid);
573577
log(uid, lastUpdate)
@@ -854,6 +858,16 @@
854858
setInfoBar(`正在查询悄悄关注数据:已获取 ${fetched} 条数据`);
855859
}
856860
}
861+
console.error("expermentals:",datas.settings.enableExpermentals);
862+
if(datas.settings.enableExpermentals){
863+
setInfoBar("正在填充更多信息");
864+
// let testcount = 5;
865+
for(let fo of datas.followings){
866+
// if(testcount--<0) break;
867+
let id = fo.mid ?? fo.uid;
868+
await fillUserStatus(id, false, true);
869+
}
870+
}
857871
CacheManager.save();
858872
} else {
859873
log("Using last result.");
@@ -1737,7 +1751,7 @@
17371751
openModal("启用实验性功能", await makeDom("div", async container => {
17381752
[
17391753
await makeDom("span", span => {
1740-
span.innerHTML = "你正在启用实验性功能。<br /><br />实验性功能意味着不稳定、不安全、结果可能非预期,并且有可能导致你的账号出现异常的功能。这些功能默认都是关闭的。<br /><br />如果你打开这些功能,就意味着你决定承担使用这些功能所导致的风险。<br /><br />你可以选择随时关闭实验性功能开关。";
1754+
span.innerHTML = "你正在启用实验性功能。<br /><br />实验性功能意味着不稳定、不安全、结果可能非预期,并且有可能导致你的账号出现异常的功能。这些功能默认都是关闭的。<br /><br />如果你打开这些功能,就意味着你决定承担使用这些功能所导致的风险。<br /><br />你可以选择随时关闭实验性功能开关。<br /><br />启用后会立刻重新进行数据获取。<br /><br />当前支持的功能:根据粉丝数和最后投稿时间排序";
17411755
}),
17421756
await makeDom("div", async btns => {
17431757
btns.style.display = "flex";
@@ -1748,6 +1762,7 @@
17481762
btn.onclick = () => {
17491763
datas.settings.enableExpermentals = true;
17501764
hideModal();
1765+
createMainWindow(true);
17511766
}
17521767
}),
17531768
await makeDom("button", btn => {
@@ -3104,6 +3119,54 @@
31043119
select.style.flexDirection = "row";
31053120
select.id = "CKFOMAN-sortbtns-container";
31063121
[
3122+
datas.settings.enableExpermentals &&
3123+
await makeDom("button", btn => {
3124+
btn.className = "CKFOMAN-toolbar-btns CKFOMAN-sortbtns";
3125+
btn.innerHTML = "按粉丝数排序 (实验)";
3126+
btn.onclick = async e => {
3127+
setInfoBar("正在按粉丝数排序...");
3128+
await alertModal("正在排序...", "请稍等...");
3129+
refreshChecked();
3130+
datas.followings.sort((a, b)=>{
3131+
const followerA = a.follower || 0;
3132+
const followerB = b.follower || 0;
3133+
3134+
if (followerA > followerB) {
3135+
return -1;
3136+
} else if (followerA < followerB) {
3137+
return 1;
3138+
} else {
3139+
return 0;
3140+
}
3141+
});
3142+
await renderListTo(get("#CKFOMAN-MAINLIST"), datas.followings, true);
3143+
hideModal();
3144+
}
3145+
}),
3146+
datas.settings.enableExpermentals &&
3147+
await makeDom("button", btn => {
3148+
btn.className = "CKFOMAN-toolbar-btns CKFOMAN-sortbtns";
3149+
btn.innerHTML = "按最后投稿日期排序 (实验)";
3150+
btn.onclick = async e => {
3151+
setInfoBar("正在按最后投稿日期排序...");
3152+
await alertModal("正在排序...", "请稍等...");
3153+
refreshChecked();
3154+
datas.followings.sort((a, b)=>{
3155+
const upA = a.lastUpdate || 0;
3156+
const upB = b.lastUpdate || 0;
3157+
3158+
if (upA > upB) {
3159+
return -1;
3160+
} else if (upA < upB) {
3161+
return 1;
3162+
} else {
3163+
return 0;
3164+
}
3165+
});
3166+
await renderListTo(get("#CKFOMAN-MAINLIST"), datas.followings, true);
3167+
hideModal();
3168+
}
3169+
}),
31073170
await makeDom("button", btn => {
31083171
btn.className = "CKFOMAN-toolbar-btns CKFOMAN-sortbtns";
31093172
btn.innerHTML = "反向当前排序";
@@ -3262,7 +3325,7 @@
32623325
btn.innerHTML = "不修改 | 取消";
32633326
btn.onclick = e => hideModal();
32643327
})
3265-
].forEach(el => select.appendChild(el));
3328+
].forEach(el => el && select.appendChild(el));
32663329
}));
32673330
}
32683331
}))

0 commit comments

Comments
 (0)