// ==UserScript==
// @name B站大会员影视+弹幕
// @namespace http://tampermonkey.net/
// @version 1.2
// @description 解除B站大会员观影限制
// @author Polygon
// @match https://www.cuan.la/m3u8.php*
// @match https://vip.parwix.com/*
// @require https://greasyfork.org/scripts/407985-ajax-hook/code/Ajax-hook.js?version=940269
// @grant GM_xmlhttpRequest
// @grant unsafeWindow
// @include https://www.bilibili.com/bangumi/play/*
// @include https://www.bilibili.com/video/BV*
// @connect *
// @run-at document-idle
// @downloadURL none
// ==/UserScript==
;(function () {
'use strict'
const origin = [{ regex: 'dmku', api: 'https://vip.parwix.com:4433/player/?url='},
{ regex: 'barrage', api: 'https://www.cuan.la/m3u8.php?url='}]
const which = 1
let danmu_api = 'https://service-otptqvj5-1256272652.bj.apigw.tencentcs.com/'
// 替换弹幕
ah.proxy({
onRequest: (config, handler) => {
if (config.url.search(origin[which].regex) !== -1) {
console.log(config.url)
let bili_url = /https:\/\/www.bilibili.com.+/g.exec(document.URL)[0]
let danmu_url = danmu_api + bili_url
GM_xmlhttpRequest({
method: "GET",
url: danmu_url,
headers: {
"Content-Type": "application/x-www-form-urlencoded;charset=utf-8"
},
data: "content=erwer",
onload: function (res) {
handler.resolve({
config: config,
status: 200,
headers: { 'content-type': 'text/text' },
response: JSON.stringify(JSON.parse(res.responseText))
})
},
onerror: function (res) {
alert("弹幕接口出错啊辣,快去瞧瞧吧~");
}
})
} else handler.next(config);
}
})
// 解析视频替换iframe
let bangumi = /bilibili.com\/bangumi\/play\//g.test(window.location.href)
let parentId = bangumi ? 'toolbar_module' : 'arc_toolbar_report'
//添加样式
let style = document.createElement("style")
style.innerHTML = (".coldrainf-get-dm{float:right;}.coldrainf-get-dm>div{display:inline-block;}.coldrainf-get-dm a{font-size:15px;color:#00a1d6;margin:0 12px;line-height:28px;}.coldrainf-get-dm a:hover{cursor:pointer;color:#f25d8e;}")
document.head.appendChild(style)
let addElement = cid => {
let parent = document.getElementById(parentId)
let old = document.querySelector('.coldrainf-get-dm')
if (old) parent.removeChild(old)
let ele = document.querySelector('#toolbar_module')
let iframeTmp = document.querySelector('#coldrainf-iframe')
if (iframeTmp) document.querySelector('.plp-l').removeChild(iframeTmp)
let bfq = document.getElementById('player_module')
if (bfq) bfq.style.display = 'block'
// 创建新源
let iframeDiv = bfq.cloneNode(true)
// 避免右偏
iframeDiv.style['padding-left'] = '0px'
iframeDiv.style.display = 'none'
iframeDiv.innerHTML = ""
let iframe = document.createElement("iframe")
iframe.id = 'coldrainf-iframe'
iframe.style.height = bfq.style.height
iframeDiv.append(iframe)
let read_url = document.querySelector('meta[property="og:url"]').content
iframe.src = origin[which].api + read_url
console.log(iframe.src)
if (document.body.className.includes('player-mode-widescreen')) {
iframe.style.position = 'absolute'
iframe.style.top = '0px'
}
iframe.height = '0%'
iframe.width = '100%'
iframe.setAttribute('frameborder', 'no')
iframe.setAttribute('border', '0')
iframe.setAttribute('allowfullscreen', 'allowfullscreen')
iframe.setAttribute('webkitallowfullscreen', 'webkitallowfullscreen')
document.querySelector('.plp-l').insertBefore(iframeDiv, document.querySelector('.media-wrapper'))
// 切换按钮
let switchButton = document.createElement("div")
switchButton.setAttribute('class', 'share-info')
switchButton.setAttribute('id', 'switch')
switchButton.innerHTML = '切换 '
ele.appendChild(switchButton)
switchButton.addEventListener('click', function(){
let players = document.querySelectorAll('#player_module')
let biliEle = players[0]
let switchEle = players[1]
if (biliEle.style.display !== 'none'){
// 切换前状态,点击切换
switchButton.querySelector('span').style['background-color'] = '#a62aee'
switchButton.querySelector('span').style['border-color'] = '#a62aee'
if (window.player) {window.player.pause()}
console.log(window.player)
biliEle.style.display = 'none'
switchEle.style.display = 'block'
console.log(document.querySelector('#bofang'))
if (document.querySelector('#bofang')){document.querySelector('#bofang').click()}
}else{
// 切换后状态,点击恢复原始
switchButton.querySelector('span').style['background-color'] = '#fb7299'
switchButton.querySelector('span').style['border-color'] = '#fb7299'
biliEle.style.display = 'block'
if (window.player) {window.player.play();console.log('播放原始')}
if (document.querySelector('#bofang')){document.querySelector('#bofang').click()}
switchEle.style.display = 'none'
}
})
$(switchButton).hover(function(){
switchButton.querySelector('span').style['background-color'] = '#505050'
switchButton.querySelector('span').style['border-color'] = '#505050'
}, function(){
let biliEle = document.querySelectorAll('#player_module')[0]
if (biliEle.style.display !== 'none'){
switchButton.querySelector('span').style['background-color'] = '#fb7299'
switchButton.querySelector('span').style['border-color'] = '#fb7299'
}else{
switchButton.querySelector('span').style['background-color'] = '#a62aee'
switchButton.querySelector('span').style['border-color'] = '#a62aee'
}
})
}
//获取cid
let getCid = () => {
if (bangumi) return unsafeWindow.__INITIAL_STATE__.epInfo.cid
else return cid
}
let init = () => {
addElement(getCid())
}
let obs = bangumi ? document.querySelector('#toolbar_module') : document.querySelector('.ops')
if (!obs) setTimeout(init, 600)
else {
new MutationObserver(function (mutations, observer) {
observer.disconnect();
setTimeout(init, 600)
}).observe(obs, { childList: true, subtree: true });
}
})()