mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
Fix bugs in batch download entry
This commit is contained in:
parent
d6011f7f42
commit
01fc575706
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
min/batch-download.min.js
vendored
2
min/batch-download.min.js
vendored
@ -1 +1 @@
|
||||
(()=>{return(t,c)=>{class a{static test(){return document.URL.includes("/www.bilibili.com/bangumi")}async collectData(){return`{x:"test"}`}}const e=[a];class n{async collectData(){const t=new(e.find(t=>t.test()));return await t.collectData()}}return{export:{BatchExtractor:n}}}})();
|
||||
(()=>{return(t,e)=>{class s{static 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 s=e.getAttribute("content").match(/play\/ss(\d+)/)[1];if(s===undefined){Toast.error("获取番剧数据失败: 无法解析 Season ID","批量下载");return""}const i=await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${s}`);if(i.code!==0){Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${i.message}`,"批量下载");return""}const r=i.result.main_section.episodes.map(t=>{return{aid:t.aid,cid:t.cid,number:t.title,title:t.long_title}});const n=[];for(const e of r){const s=`https://api.bilibili.com/pgc/player/web/playurl?avid=${e.aid}&cid=${e.cid}&qn=${t}&otype=json`;const i=await Ajax.getJsonWithCredentials(s);const r=i.data||i.result||i;if(r.quality!==t){Toast.error("获取下载链接失败, 请确认当前账号有下载权限后重试.","批量下载");return""}const a=r.durl.map(t=>{return{length:t.length,size:t.size,url:t.url}});n.push({fragments:a,title:`${e.number} - ${e.title}`,totalSize:a.map(t=>t.size).reduce((t,e)=>t+e)})}return JSON.stringify(n)}}const i=[s];class r{async collectData(t,e){const s=new(i.find(t=>t.test()));const r=await s.collectData(t.quality);e.dismiss();return r}}return{export:{BatchExtractor:r}}}})();
|
||||
2
min/download-video.min.js
vendored
2
min/download-video.min.js
vendored
File diff suppressed because one or more lines are too long
@ -4,18 +4,67 @@ class BangumiBatch
|
||||
{
|
||||
return document.URL.includes("/www.bilibili.com/bangumi");
|
||||
}
|
||||
async collectData()
|
||||
async collectData(quality)
|
||||
{
|
||||
return `{x:"test"}`;
|
||||
const metaUrl = document.querySelector("meta[property='og:url']");
|
||||
if (metaUrl === null)
|
||||
{
|
||||
Toast.error("获取番剧数据失败: 无法找到 Season ID", "批量下载");
|
||||
return "";
|
||||
}
|
||||
const seasonId = metaUrl.getAttribute("content").match(/play\/ss(\d+)/)[1];
|
||||
if (seasonId === undefined)
|
||||
{
|
||||
Toast.error("获取番剧数据失败: 无法解析 Season ID", "批量下载");
|
||||
return "";
|
||||
}
|
||||
const json = await Ajax.getJson(`https://api.bilibili.com/pgc/web/season/section?season_id=${seasonId}`);
|
||||
if (json.code !== 0)
|
||||
{
|
||||
Toast.error(`获取番剧数据失败: 无法获取番剧集数列表, message=${json.message}`, "批量下载");
|
||||
return "";
|
||||
}
|
||||
const pages = json.result.main_section.episodes.map(it =>
|
||||
{
|
||||
return { aid: it.aid, cid: it.cid, number: it.title, title: it.long_title };
|
||||
});
|
||||
const result = [];
|
||||
for (const page of pages)
|
||||
{
|
||||
const url = `https://api.bilibili.com/pgc/player/web/playurl?avid=${page.aid}&cid=${page.cid}&qn=${quality}&otype=json`;
|
||||
const json = await Ajax.getJsonWithCredentials(url);
|
||||
const data = json.data || json.result || json;
|
||||
if (data.quality !== quality)
|
||||
{
|
||||
Toast.error("获取下载链接失败, 请确认当前账号有下载权限后重试.", "批量下载");
|
||||
return "";
|
||||
}
|
||||
const fragments = data.durl.map(it =>
|
||||
{
|
||||
return {
|
||||
length: it.length,
|
||||
size: it.size,
|
||||
url: it.url,
|
||||
};
|
||||
});
|
||||
result.push({
|
||||
fragments,
|
||||
title: `${page.number} - ${page.title}`,
|
||||
totalSize: fragments.map(it => it.size).reduce((acc, it) => acc + it),
|
||||
});
|
||||
}
|
||||
return JSON.stringify(result);
|
||||
}
|
||||
}
|
||||
const extractors = [BangumiBatch];
|
||||
export class BatchExtractor
|
||||
{
|
||||
async collectData()
|
||||
async collectData(format, toast)
|
||||
{
|
||||
const extractor = new (extractors.find(it => it.test()));
|
||||
return await extractor.collectData();
|
||||
const result = await extractor.collectData(format.quality);
|
||||
toast.dismiss();
|
||||
return result;
|
||||
}
|
||||
}
|
||||
export default {
|
||||
|
||||
@ -5,6 +5,7 @@ const pageData = {
|
||||
aid: undefined,
|
||||
cid: undefined,
|
||||
};
|
||||
let selectedFormat = null;
|
||||
class Video
|
||||
{
|
||||
constructor()
|
||||
@ -375,14 +376,33 @@ async function checkBatch()
|
||||
document.getElementById("download-video").classList.add("batch");
|
||||
document.getElementById("video-action-batch-data").addEventListener("click", async () =>
|
||||
{
|
||||
const data = await extractor.collectData();
|
||||
if (!selectedFormat)
|
||||
{
|
||||
return;
|
||||
}
|
||||
pageData.entity.resetMenuClass();
|
||||
const toast = Toast.info("获取链接中...", "批量下载");
|
||||
const data = await extractor.collectData(selectedFormat, toast);
|
||||
if (!data)
|
||||
{
|
||||
return;
|
||||
}
|
||||
GM_setClipboard(data, { type: "text/json" });
|
||||
Toast.success("已复制批量数据到剪贴板.", "复制批量数据", 3000);
|
||||
pageData.entity.resetMenuClass();
|
||||
});
|
||||
document.getElementById("video-action-batch-download-data").addEventListener("click", async () =>
|
||||
{
|
||||
const data = await extractor.collectData();
|
||||
if (!selectedFormat)
|
||||
{
|
||||
return;
|
||||
}
|
||||
pageData.entity.resetMenuClass();
|
||||
const toast = Toast.info("获取链接中...", "批量下载");
|
||||
const data = await extractor.collectData(selectedFormat, toast);
|
||||
if (!data)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
const a = document.createElement("a");
|
||||
const blob = new Blob([data], { type: "text/json" });
|
||||
@ -394,7 +414,6 @@ async function checkBatch()
|
||||
a.remove();
|
||||
URL.revokeObjectURL(url);
|
||||
|
||||
pageData.entity.resetMenuClass();
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -417,7 +436,7 @@ async function loadPageData()
|
||||
async function loadWidget()
|
||||
{
|
||||
let formats = await VideoFormat.availableFormats;
|
||||
let [selectedFormat] = formats;
|
||||
selectedFormat = formats[0];
|
||||
const loadQualities = async () =>
|
||||
{
|
||||
await loadPageData();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user