// ==UserScript== // @name B站辅助脚本 // @namespace http://tampermonkey.net/ // @version 0.1 // @description 获取视频封面和下载音频 // @author 王子周棋洛 // @match https://www.bilibili.com/video/* // @icon https://www.google.com/s2/favicons?sz=64&domain=bilibili.com // @grant none // @license MIT // @downloadURL none // ==/UserScript== (function () { let audioState = false; let index = 0; let my_xhr; let renderButton = () => { if (__INITIAL_STATE__.videoData.pic && !document.querySelector(".my_coverImg_button")) { let coverImgButton = createNode('a', '获取封面', 'my_coverImg_button'); coverImgButton.href = __INITIAL_STATE__.videoData.pic; coverImgButton.target = '_blank'; } if (__INITIAL_STATE__.aid && __INITIAL_STATE__.bvid && __INITIAL_STATE__.videoData.pages[0].cid && !document.querySelector(".my_audio_button")) { let audioButton = createNode('a', '下载音频', 'my_audio_button'); let items = document.querySelectorAll('.clickitem'); if (items.length != 0) { items.forEach((item, i) => { item.addEventListener('click', e => { my_xhr.abort(); index = i; if (audioButton) audioButton.remove(); if (document.querySelector(".my_coverImg_button")) document.querySelector(".my_coverImg_button").remove(); if (document.querySelector(".my_video_button")) document.querySelector(".my_video_button").remove(); }) }) } audioButton.addEventListener('click', e => { if (!audioState) { audioState = true; console.log(index); let url = `https://api.bilibili.com/x/player/playurl?avid=${__INITIAL_STATE__.aid}&bvid=${__INITIAL_STATE__.bvid}&cid=${__INITIAL_STATE__.videoData.pages[index].cid}&fnval=4048`; fetch(url, { method: "GET", responseType: "application/json" }).then(resp => { return resp.json(); }).then(i => { my_xhr = new XMLHttpRequest(); my_xhr.responseType = 'blob'; my_xhr.open('GET', i.data.dash.audio[0].base_url, true); my_xhr.addEventListener('progress', function (event) { audioButton.textContent = `音频 ${parseInt((event.loaded / event.total) * 100)}%`; }, false); my_xhr.onload = () => { if (my_xhr.status === 200) { const reader = new FileReader(); reader.readAsDataURL(my_xhr.response); reader.onload = function (e) { const a = document.createElement('a'); a.download = '你好.mp3'; a.href = e.target.result; document.documentElement.appendChild(a); a.click(); a.remove(); audioState = false; }; } } my_xhr.send(); }) }else{ my_xhr.abort(); audioButton.textContent = `下载音频`; audioState = false; } }) } if (location.href && !document.querySelector(".my_video_button")) { let videoButton = createNode('a', '下载视频', 'my_video_button'); videoButton.href = `http://localhost:8080/?${location.href}`; videoButton.target = `_blank`; } } let createNode = (type, text, className) => { let node = document.createElement(type); node.textContent = text; node.className = className; node.style = `font-size:12px;text-decoration:none;padding:1px 4px;border-radius:3px;background-color:#fb819f;color:#fff;margin-right:8px`; document.querySelector(".video-data-list").appendChild(node); return node; } setInterval(() => { renderButton(); }, 2500) })();