|
195 | 195 | } |
196 | 196 | }; |
197 | 197 | 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}`; |
198 | 199 | const getGroupURL = () => `https://api.bilibili.com/x/relation/tags`; |
199 | 200 | const getWhispersURL = (pn, ps = 50) => `https://api.bilibili.com/x/relation/whispers?pn=${pn}&ps=${ps}&order=desc&order_type=attention`;// removed |
200 | 201 | const getFetchURL = (uid, pn) => `https://api.bilibili.com/x/relation/followings?vmid=${uid}&pn=${pn}&ps=50&order=desc&order_type=attention`; |
|
521 | 522 | return null; |
522 | 523 | } |
523 | 524 | } |
524 | | - const getUserStats = async (uid, withraw = false) => { |
| 525 | + const getUserStats = async (uid, withraw = false, fast = false) => { |
525 | 526 | 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()); |
527 | 528 | if (jsonData && jsonData.code === 0) { |
528 | | - const udata = jsonData.data; |
| 529 | + // const udata = jsonData.data; |
| 530 | + const udata = fast? jsonData.data.card : jsonData.data; |
529 | 531 | const parsedData = { |
530 | 532 | ok: true, |
531 | | - level: udata.level, |
| 533 | + level: udata.level ?? udata.level_info.current_level, |
532 | 534 | banned: udata.silence === 1, |
533 | 535 | RIP: udata.sys_notice === 20, |
534 | 536 | disputed: udata.sys_notice === 8, |
|
537 | 539 | cates: udata.tags, |
538 | 540 | lives: udata.live_room, |
539 | 541 | official_verify: udata.official_verify ?? udata.official, |
| 542 | + follower: udata.stats?.follower ?? udata.fans ?? jsonData.data?.follower |
540 | 543 | }; |
541 | 544 | if (withraw) { |
542 | 545 | return Object.assign({}, udata, parsedData); |
|
548 | 551 | } |
549 | 552 | return { ok: false } |
550 | 553 | } |
551 | | - const fillUserStatus = async (uid, refresh = false) => { |
| 554 | + const fillUserStatus = async (uid, refresh = false, fast = false) => { |
552 | 555 | setInfoBar(`正在为${uid}填充用户信息`) |
553 | 556 | uid = parseInt(uid); |
554 | 557 | if (datas.mappings[uid] && datas.mappings[uid].filled) { |
555 | 558 | log(uid, "already filled") |
556 | 559 | resetInfoBar(); |
557 | 560 | return datas.mappings[uid]; |
558 | 561 | } |
559 | | - const userinfo = await getUserStats(uid, refresh); |
| 562 | + let userinfo = await getUserStats(uid, refresh, fast); |
560 | 563 | if (userinfo.ok) { |
561 | 564 | if (refresh) datas.mappings[uid] = userinfo; |
562 | 565 | datas.mappings[uid].level = userinfo.level; |
|
567 | 570 | datas.mappings[uid].sign = userinfo.sign; |
568 | 571 | datas.mappings[uid].cates = userinfo.cates; |
569 | 572 | 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; |
571 | 575 | if (!userinfo.banned && !userinfo.RIP) { |
572 | 576 | const lastUpdate = await getLatestVideoPublishDate(uid); |
573 | 577 | log(uid, lastUpdate) |
|
854 | 858 | setInfoBar(`正在查询悄悄关注数据:已获取 ${fetched} 条数据`); |
855 | 859 | } |
856 | 860 | } |
| 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 | + } |
857 | 871 | CacheManager.save(); |
858 | 872 | } else { |
859 | 873 | log("Using last result."); |
|
1737 | 1751 | openModal("启用实验性功能", await makeDom("div", async container => { |
1738 | 1752 | [ |
1739 | 1753 | 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 />当前支持的功能:根据粉丝数和最后投稿时间排序"; |
1741 | 1755 | }), |
1742 | 1756 | await makeDom("div", async btns => { |
1743 | 1757 | btns.style.display = "flex"; |
|
1748 | 1762 | btn.onclick = () => { |
1749 | 1763 | datas.settings.enableExpermentals = true; |
1750 | 1764 | hideModal(); |
| 1765 | + createMainWindow(true); |
1751 | 1766 | } |
1752 | 1767 | }), |
1753 | 1768 | await makeDom("button", btn => { |
|
3104 | 3119 | select.style.flexDirection = "row"; |
3105 | 3120 | select.id = "CKFOMAN-sortbtns-container"; |
3106 | 3121 | [ |
| 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 | + }), |
3107 | 3170 | await makeDom("button", btn => { |
3108 | 3171 | btn.className = "CKFOMAN-toolbar-btns CKFOMAN-sortbtns"; |
3109 | 3172 | btn.innerHTML = "反向当前排序"; |
|
3262 | 3325 | btn.innerHTML = "不修改 | 取消"; |
3263 | 3326 | btn.onclick = e => hideModal(); |
3264 | 3327 | }) |
3265 | | - ].forEach(el => select.appendChild(el)); |
| 3328 | + ].forEach(el => el && select.appendChild(el)); |
3266 | 3329 | })); |
3267 | 3330 | } |
3268 | 3331 | })) |
|
0 commit comments