bilibili - b站 - 搜索进行二次排序

b站搜索页面,对搜索完成后的结果,进行二次排序

// ==UserScript==
// @name         bilibili - b站 - 搜索进行二次排序
// @description  b站搜索页面,对搜索完成后的结果,进行二次排序
// @namespace    https://bilibili.com/
// @version      2.2
// @author       会飞的蛋蛋面
// @license      none
// @match        *://search.bilibili.com/*
// @icon         https://www.bilibili.com/favicon.ico
// @grant        none
// @require      https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js
// @require      https://cdn.bootcdn.net/ajax/libs/axios/1.6.8/axios.min.js
// @run-at       document-end
// ==/UserScript==

!function(){"use strict";let t=0,a=new Set;function i(t,a){t.removeClass("vui_button--active"),$(t[a]).addClass("vui_button--active")}function n(t){let a=t.replace(/,/g,"");return a=a.includes("万")?1e4*parseFloat(a.replace("万","")):parseFloat(a),a}function e(t){const a=t.split(":").map((t=>parseInt(t,10)));let i=0;return 3===a.length?i=3600*a[0]+60*a[1]+a[2]:2===a.length&&(i=60*a[0]+a[1]),i}!function(){const d=function(){let t=$('\n            <div class="conditions-order flex_between my-div" data-v-190300f0 style="height: 50px;">\n                <div class="search-condition-row" data-v-190300f0>\n                    <button class="vui_button vui_button--tab vui_button--active mr_sm" data-v-190300f0>二次排序</button>\n                    <button class="vui_button vui_button--tab mr_sm" data-v-190300f0>最多播放</button>\n                    <button class="vui_button vui_button--tab mr_sm" data-v-190300f0>最新发布</button>\n                    <button class="vui_button vui_button--tab mr_sm" data-v-190300f0>最多弹幕</button>\n                    <button class="vui_button vui_button--tab mr_sm" data-v-190300f0>最多收藏</button>\n                    <button class="vui_button vui_button--tab mr_sm" data-v-190300f0>最长时长</button>\n                </div>\n            </div>');return t.insertAfter($(".conditions-order").first()),t.find(".vui_button")}();$(".vui_pagenation--btns").not(".more").on("click",(()=>i(0))),$(".conditions-order").not(".my-div").on("click",(()=>i(0))),$(".more-conditions").on("click",(()=>i(0))),d.each(((t,a)=>{$(a).on("click",(()=>{i(d,t);const a=$(".video-list .col_3.col_xs_1_5.col_md_2.col_xl_1_7.mb_x40").toArray();!function(t,a){switch(a){case 1:t.sort(((t,a)=>{const i=n($(t).find(".bili-video-card__stats--item span").first().text());return n($(a).find(".bili-video-card__stats--item span").first().text())-i}));break;case 2:t.sort(((t,a)=>{const i=$(t).find(".bili-video-card__info--date").text().trim(),n=$(a).find(".bili-video-card__info--date").text().trim();return new Date(n)-new Date(i)}));break;case 3:t.sort(((t,a)=>{const i=n($(t).find(".bili-video-card__stats--item").eq(1).find("span").last().text());return n($(a).find(".bili-video-card__stats--item").eq(1).find("span").last().text())-i}));break;case 4:t.sort(((t,a)=>{const i=parseInt($(t).find(".bili-video-card__stats--item").eq(2).find("span").last().text().replace(/,/g,""),10);return parseInt($(a).find(".bili-video-card__stats--item").eq(2).find("span").last().text().replace(/,/g,""),10)-i}));break;case 5:t.sort(((t,a)=>{const i=e($(t).find(".bili-video-card__stats__duration").text());return e($(a).find(".bili-video-card__stats__duration").text())-i}))}}(a,t),$(".video-list").html(a)}))})),new MutationObserver(((n,e)=>{const s=$(".vui_pagenation--btns");if(s.length>0&&!s.data("more-button-added")){const n=$('<button class="vui_button vui_pagenation--btn vui_pagenation--btn-side more">更多</button>');s.append(n),s.data("more-button-added",!0),n.on("click",(()=>function(n){i(n,0);const e=parseInt($(".vui_pagenation--btns .vui_button--active-blue.vui_pagenation--btn-num").text(),10),d=$(".search-input-el").val();axios.get("//api.bilibili.com/x/web-interface/search/type",{params:{context:"",page:e+t+1,order:"totalrank",keyword:d,duration:0,tids_2:"",__refresh__:!0,_extra:"",search_type:"video",tids:0,highlight:1,single_column:0},headers:{Accept:"application/json, text/plain, */*"},withCredentials:!0}).then((i=>{t++;i.data.data.result.forEach((t=>{if(!a.has(t.bvid)){const i=function(t){function a(t){return t>=1e4?(t/1e4).toFixed(1)+"万":t.toString()}function i(t){const a=new Date(1e3*t),i=new Date;return(a.getFullYear()===i.getFullYear()?"":a.getFullYear()+"-")+(a.getMonth()+1)+"-"+a.getDate()}function n(t){let a,i,n,e=t.split(":").map((t=>parseInt(t,10)));if(2===e.length)[i,n]=e,a=Math.floor(i/60),i%=60;else{if(3!==e.length)return"";[a,i,n]=e}return a=a.toString().padStart(2,"0"),i=i.toString().padStart(2,"0"),n=n.toString().padStart(2,"0"),"00"!==a?`${a}:${i}:${n}`:`${i}:${n}`}return`\n        <div class="col_3 col_xs_1_5 col_md_2 col_xl_1_7 mb_x40" data-v-97dcc362>\n            <div class="bili-video-card" data-v-97dcc362 data-v-15c84221>\n                <div class="hide bili-video-card__skeleton" data-v-15c84221>\n                    <div class="bili-video-card__skeleton--cover" data-v-15c84221></div>\n                    <div class="bili-video-card__skeleton--info" data-v-15c84221>\n                        <div class="bili-video-card__skeleton--right" data-v-15c84221>\n                            <p class="bili-video-card__skeleton--text" data-v-15c84221></p>\n                            <p class="bili-video-card__skeleton--text short" data-v-15c84221></p>\n                            <p class="bili-video-card__skeleton--light" data-v-15c84221></p>\n                        </div>\n                    </div>\n                </div>\n                <div class="bili-video-card__wrap __scale-wrap" data-v-15c84221>\n                    <a href="${t.arcurl}" target="_blank" data-v-15c84221 data-mod="search-card">\n                        <div class="bili-video-card__image __scale-player-wrap" data-v-15c84221>\n                            <div class="bili-video-card__image--wrap" data-v-15c84221>\n                                <picture class="v-img bili-video-card__cover" data-v-15c84221>\n                                    <img src="${t.pic}" alt="${t.title}" loading="lazy">\n                                </picture>\n                                <div class="bili-video-card__mask" data-v-15c84221>\n                                    <div class="bili-video-card__stats" data-v-15c84221>\n                                        <div class="bili-video-card__stats--left" data-v-15c84221>\n                                            <span class="bili-video-card__stats--item" data-v-15c84221>\n                                                <svg class="bili-video-card__stats--icon" data-v-15c84221 fill="#ffffff" viewBox="0 0 24 24" width="24" height="24"><path d="M12 4.99805C9.48178 4.99805 7.283 5.12616 5.73089 5.25202C4.65221 5.33949 3.81611 6.16352 3.72 7.23254C3.60607 8.4998 3.5 10.171 3.5 11.998C3.5 13.8251 3.60607 15.4963 3.72 16.76355C3.81611 17.83255 4.65221 18.6566 5.73089 18.7441C7.283 18.8699 9.48178 18.998 12 18.998C14.5185 18.998 16.7174 18.8699 18.2696 18.74405C19.3481 18.65655 20.184 17.8328 20.2801 16.76405C20.394 15.4973 20.5 13.82645 20.5 11.998C20.5 10.16965 20.394 8.49877 20.2801 7.23205C20.184 6.1633 19.3481 5.33952 18.2696 5.25205C16.7174 5.12618 14.5185 4.99805 12 4.99805zM5.60965 3.75693C7.19232 3.62859 9.43258 3.49805 12 3.49805C14.5677 3.49805 16.8081 3.62861 18.3908 3.75696C20.1881 3.90272 21.6118 5.29278 21.7741 7.09773C21.8909 8.3969 22 10.11405 22 11.998C22 13.88205 21.8909 15.5992 21.7741 16.8984C21.6118 18.7033 20.1881 20.09335 18.3908 20.23915C16.8081 20.3675 14.5677 20.498 12 20.498C9.43258 20.498 7.19232 20.3675 5.60965 20.2392C3.81206 20.0934 2.38831 18.70295 2.22603 16.8979C2.10918 15.5982 2 13.8808 2 11.998C2 10.1153 2.10918 8.39787 2.22603 7.09823C2.38831 5.29312 3.81206 3.90269 5.60965 3.75693z" fill="currentColor"></path><path d="M14.7138 10.96875C15.50765 11.4271 15.50765 12.573 14.71375 13.0313L11.5362 14.8659C10.74235 15.3242 9.75 14.7513 9.75001 13.8346L9.75001 10.1655C9.75001 9.24881 10.74235 8.67587 11.5362 9.13422L14.7138 10.96875z" fill="currentColor"></path></svg>\n                                                <span data-v-15c84221>${a(t.play)}</span>\n                                            </span>\n                                            <span class="bili-video-card__stats--item" data-v-15c84221>\n                                                <svg class="bili-video-card__stats--icon" data-v-15c84221>\n                                                    <use xlink:href="#widget-video-danmaku"></use>\n                                                </svg>\n                                                <span data-v-15c84221>${a(t.danmaku)}</span>\n                                            </span>\n                                        </div>\n                                        <span class="bili-video-card__stats__duration" data-v-15c84221>${n(t.duration)}</span>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                        <div class="bili-video-card__info __scale-disable" data-v-15c84221>\n                            <div class="bili-video-card__info--right" data-v-15c84221>\n                                <h3 class="bili-video-card__info--tit" data-v-15c84221>${t.title}</h3>\n                                <p class="bili-video-card__info--bottom" data-v-15c84221>\n                                    <a class="bili-video-card__info--owner" href="//space.bilibili.com/1726597059" target="_blank" data-v-15c84221 data-mod="search-card" data-idx="all" data-ext="click">\n                                        <svg class="bili-video-card__info--author-ico mr_2" data-v-15c84221><use xlink:href="#widget-up"></use></svg>\n                                        <span class="bili-video-card__info--author" data-v-15c84221>${t.author}</span>\n                                        <span class="bili-video-card__info--date" data-v-15c84221> · ${i(t.pubdate)}</span>\n                                    </a>\n                                </p>\n                            </div>\n                        </div>\n                    </a>\n                </div>\n            </div>\n        </div>`}(t);$(".video-list").first().append(i),a.add(t.bvid)}}))}))}(d))),e.disconnect()}})).observe(document,{childList:!0,subtree:!0})}(),$(".bili-video-card__wrap.__scale-wrap > a").each(((t,i)=>{const n=$(i).attr("href").match(/\/video\/(av\d+|BV[a-zA-Z0-9]+)/);if(n){const t=n[1];t&&a.add(t)}}))}();