Bilibili-Evolved/min/batch-download.min.js
2019-07-13 13:20:46 +08:00

1 line
3.5 KiB
JavaScript

(()=>{return(t,e)=>{const r=12;class i{async collectData(){}async collectAria2(t,e){if(e){throw new Error("aria2 RPC is not supported")}else{const e=JSON.parse(await this.collectData(t));return`\n# Generated by Bilibili Evolved Video Export\n# https://github.com/the1812/Bilibili-Evolved/\n${e.map(t=>{return t.fragments.map(e=>{return`\n${e.url}\n referer=${t.referer}\n user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0\n out=${t.title}.flv\n split=${r}\n `.trim()})}).join("\n")}\n `.trim()}}}class n extends i{static async test(){if(!document.URL.includes("/www.bilibili.com/video/av")){return false}return await SpinQuery.select("#multi_page")!==null}async collectData(t){const e=`https://api.bilibili.com/x/web-interface/view?aid=${unsafeWindow.aid}`;const r=await Ajax.getJson(e);if(r.code!==0){Toast.error(`获取视频选集列表失败, message=${r.message}`,"批量下载");return""}const i=r.data.pages;if(i===undefined){Toast.error(`获取视频选集列表失败, 没有找到选集信息.`,"批量下载");return""}const n=[];for(const e of i){const r=`https://api.bilibili.com/x/player/playurl?avid=${unsafeWindow.aid}&cid=${e.cid}&qn=${t}&otype=json`;const i=await Ajax.getJsonWithCredentials(r);const a=i.data||i.result||i;if(a.quality!==t){Toast.error("获取下载链接失败, 请确认当前账号有下载权限后重试.","批量下载");return""}const s=a.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}});n.push({fragments:s,title:`${e.page} - ${e.part}`,totalSize:s.map(t=>t.size).reduce((t,e)=>t+e),cid:e.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(n)}}class a extends i{static async test(){return document.URL.includes("/www.bilibili.com/bangumi")}async collectData(t){const e=document.querySelector("meta[property='og:url']");if(e===null){Toast.error("获取番剧数据失败: 无法找到 Season ID","批量下载");return""}const r=e.getAttribute("content").match(/play\/ss(\d+)/)[1];if(r===undefined){Toast.error("获取番剧数据失败: 无法解析 Season ID","批量下载");return""}const i=await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${r}`);if(i.code!==0){Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${i.message}`,"批量下载");return""}const n=i.result.main_section.episodes.map(t=>{return{aid:t.aid,cid:t.cid,number:t.title,title:t.long_title}});const a=[];for(const e of n){const r=`https://api.bilibili.com/pgc/player/web/playurl?avid=${e.aid}&cid=${e.cid}&qn=${t}&otype=json`;const i=await Ajax.getJsonWithCredentials(r);const n=i.data||i.result||i;if(n.quality!==t){Toast.error("获取下载链接失败, 请确认当前账号有下载权限后重试.","批量下载");return""}const s=n.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}});a.push({fragments:s,title:`${e.number} - ${e.title}`,totalSize:s.map(t=>t.size).reduce((t,e)=>t+e),cid:e.cid,referer:document.URL.replace(window.location.search,"")})}return JSON.stringify(a)}}const s=[a,n];let o=null;class l{static async test(){for(const t of s){if(await t.test()===true){o=t;return true}}o=null;return false}async collectData(t,e){if(o===null){logError("[批量下载] 未找到合适的解析模块.");return null}const r=new o;const i=await r.collectData(t.quality);e.dismiss();return i}async collectAria2(t,e,r){if(o===null){logError("[批量下载] 未找到合适的解析模块.");return null}const i=new o;const n=await i.collectAria2(t.quality,r);e.dismiss();return n}}return{export:{BatchExtractor:l}}}})();