🏠 Home 

让我康康(b站港#台搜索补全)

修补b站(bilibili,哔哩哔哩)番剧搜索功能,在搜索普通番剧的同时搜索港#台番剧,将仅限港#台观看的番剧插入搜索结果最前面,目前略显简陋。


Install this script?
// ==UserScript==
// @name         让我康康(b站港#台搜索补全)
// @namespace    http://tampermonkey.net/
// @version      0.6.0.beta
// @description  修补b站(bilibili,哔哩哔哩)番剧搜索功能,在搜索普通番剧的同时搜索港#台番剧,将仅限港#台观看的番剧插入搜索结果最前面,目前略显简陋。
// @author       thunder-sword【b站up主:月雨洛然】
// @match        *://search.bilibili.com/*
// @require      https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js
// @require      https://fastly.jsdelivr.net/npm/[email protected]/dist/umd/cn2t.js
// @license      MIT
// @icon         https://www.google.com/s2/favicons?sz=64&domain=bilibili.com
// @grant        none
// ==/UserScript==
/*
更新日志:
v0.6:这次脚本失效不同往常,报错信息中直接是:"风控校验失败",如果没猜错的话,b站应该完全禁止番剧出差的境内访问了,属于是掀桌子的行为了。既然如此,咱们也不装了,直接用biliplus又不是不能用,现在这个脚本既然没办法起作用了,干脆再起一点小作用,自动跳转到biliplus搜索界面,也不算完全失效不是?这段时间感谢大家的支持了,断断续续更新了也将近一年了,一直都是用#发电,希望这个脚本帮到了大家,小生也算是有一些成就感了。
v0.5:添加biliplus接口支持,因为b站新策略,导致友方脚本(解除B站区域限制,https://github.com/ipcjs)不能直接在遇到av和bv页面时自动跳转到播放页面,目前友方脚本还没修复这个问题,为了不影响本脚本的使用,只能添加接口支持,自动获取播放地址,若之后修复此问题,可将switch_id参数置0,取消本脚本接口支持;
v0.4:添加简中搜索功能;
v0.3:修复json数据异常错误;
v0.2:将番剧标题数字全部去除,以识别不同集的重复番剧【缺点:番剧本身如果有数字则会漏掉】
*/
/* 全局设置 */
const settings={
"simplified_search": 1,      //是否打开简中搜索,打开简中搜索可能导致某些番剧搜索失败,各位遇到问题后反馈下;不愿尝试简中搜索就将此参数置0
}
/* 实例作用:繁简转换器 */
// 采用##繁体
const converter = OpenCC.Converter({ from: 'cn', to: 'tw' });
//console.log(converter('漢語'));
function getKeyword() {
const match = window.location.search.match(/(\?|&)keyword=([^&]+)(&|$)/);
const keyword = match ? decodeURIComponent(match[2]) : null;
if (keyword === null) {
alert("获取keyword失败,无法搜索港#台");
throw new Error("获取keyword失败,无法搜索港#台");
}
return keyword;
}
//作用:生成toast,让其在toast_container中,显示在页面中上部,会永久性向页面添加一个id为ths_toast_container的div标签
function showStackToast(message, timeout=3000){
//没有容器则生成容器
let box=document.querySelector("body > div#ths_toast_container");
if(!box){
box=document.createElement('div');
box.id="ths_toast_container";
box.style.cssText = `
position: fixed;
top: 10px;
left: 50%;
transform: translateX(-50%);
right: 10px;
width: 300px;
height: auto;
display: flex;
z-index: 9999;
flex-direction: column-reverse;`;
document.body.appendChild(box);
}
//创建toast
const toast = document.createElement('div');
toast.innerText = message;
toast.style.cssText = `
padding: 10px;
background-color: rgb(76, 175, 80);
color: rgb(255, 255, 255);
border-radius: 10px;
font-size: 24px;
font-weight: bold;
text-align: center;
box-shadow: rgb(0 0 0 / 30%) 0px 5px 10px;
opacity: 1;
transition: opacity 0.3s ease-in-out 0s;
z-index: 9999;
margin: 5px;
`;
box.appendChild(toast);
toast.style.opacity = 1;
if(timeout > 0){
setTimeout(() => {
toast.style.opacity = 0;
setTimeout(() => {
box.removeChild(toast);
}, 300);
}, timeout);
}
return toast;
}
async function mainFunction() {
const flag1 = !settings["show_in_main_page"] && window.location.pathname==="/all";
if(window.location.pathname==="/bangumi" || window.location.pathname==="/all"){
let keyword = getKeyword();
/* 如果开启简中搜索,就将关键字转化为繁体后再搜索 */
if(settings["simplified_search"]){
keyword = converter(keyword);
}
//console.log(keyword);
showStackToast("正在尝试打开新窗口");
window.open(`https://www.biliplus.com/api/do.php?source=bilibili&act=search&o=default&n=20&p=1&word=${keyword}`);
showStackToast("打开完毕");
showStackToast("若未打开新窗口请检查弹窗权限");
}
}
window.addEventListener('load', async () => {
'use strict';
//alert("测试");
let previousUrl = '';
const observer = new MutationObserver(async function(mutations) {
/* 去除vt干扰 */
let nowUrl=window.location.href.replace(/(\?|&)vt=\d+(&|$)/, "&");
if (nowUrl !== previousUrl) {
console.log(`URL changed from ${previousUrl} to ${window.location.href}`);
previousUrl = nowUrl;
await mainFunction();
}
});
const config = {subtree: true, childList: true};
observer.observe(document, config);
});