feat: 支持BBDown强行更换CDN

1. feat: 支持 `BBDown`强行更换CDN
2. chore: 清理 `tiktok`
This commit is contained in:
zhiyu1998 2024-08-09 19:57:30 +08:00
parent 291157c51f
commit 210259824a
7 changed files with 39 additions and 56 deletions

View File

@ -23,12 +23,12 @@ import {
} from "../utils/bilibili.js";
import { downloadM3u8Videos, mergeAcFileToMp4, parseM3u8, parseUrl } from "../utils/acfun.js";
import {
BILI_CDN_SELECT_LIST,
BILI_DEFAULT_INTRO_LEN_LIMIT,
COMMON_USER_AGENT,
DIVIDING_LINE,
douyinTypeMap,
HELP_DOC,
IMAGE_TRANSLATION_PROMPT,
REDIS_YUNZAI_ISOVERSEA,
REDIS_YUNZAI_LAGRANGE,
SUMMARY_PROMPT,
@ -43,7 +43,8 @@ import {
downloadImg,
estimateReadingTime,
formatBiliInfo,
retryAxiosReq, saveJsonToFile,
retryAxiosReq,
saveJsonToFile,
secondsToTime,
testProxy,
truncateString
@ -73,7 +74,6 @@ import {
WEISHI_VIDEO_INFO,
XHS_REQ_LINK
} from "../constants/tools.js";
import { processTikTokUrl } from "../utils/tiktok.js";
import { getDS } from "../utils/mihoyo.js";
import GeneralLinkAdapter from "../utils/general-link-adapter.js";
import { mid2id } from "../utils/weibo.js";
@ -207,6 +207,8 @@ export class tools extends plugin {
this.biliDuration = this.toolsConfig.biliDuration;
// 加载哔哩哔哩是否使用BBDown
this.biliUseBBDown = this.toolsConfig.biliUseBBDown;
// 加载 BBDown 的CDN配置
this.biliCDN = this.toolsConfig.biliCDN;
// 加载哔哩哔哩是否使用Aria2
this.biliUseAria2 = this.toolsConfig.biliUseAria2;
// 加载抖音Cookie
@ -625,7 +627,11 @@ export class tools extends plugin {
// 删除之前的文件
await checkAndRemoveFile(`${ tempPath }.mp4`);
// 下载视频
await startBBDown(url, path, this.biliSessData, this.biliUseAria2);
await startBBDown(url, path, {
biliSessData: this.biliSessData,
biliUseAria2: this.biliUseAria2,
biliCDN: BILI_CDN_SELECT_LIST.find(item => item.value === this.biliCDN)?.sign,
});
// 发送视频
return this.sendVideoToUpload(e, `${ tempPath }.mp4`);
}

View File

@ -10,6 +10,7 @@ biliSessData: '' # 哔哩哔哩的SESSDATA
biliIntroLenLimit: 50 # 哔哩哔哩简介长度限制,填 0 或者 -1 可以不做任何限制,显示完整简介
biliDuration: 480 # 哔哩哔哩限制的最大视频时长默认8分钟单位
biliUseBBDown: false # 是否使用BBDown默认不开启开启后使用强劲的BBDown下载最高画质
biliCDN: 0 # 哔哩哔哩 CDN默认为0表示不使用
biliUseAria2: false # 是否使用Aria2下载
douyinCookie: '' # douyin's cookie, 格式odin_tt=xxx;passport_fe_beating_status=xxx;sid_guard=xxx;uid_tt=xxx;uid_tt_ss=xxx;sid_tt=xxx;sessionid=xxx;sessionid_ss=xxx;sid_ucp_v1=xxx;ssid_ucp_v1=xxx;passport_assist_user=xxx;ttwid=xxx;

View File

@ -1,10 +1,10 @@
- {
version: 1.7.3,
version: 1.7.4,
data:
[
新增<span class="cmd">BBDown更换CDN</span>功能,
新增<span class="cmd">Aria2下载选项</span>功能,
新增<span class="cmd">最大上传限制选项</span>功能,
新增<span class="cmd">BBDown下载方式</span>功能,
支持<span class="cmd">锅巴</span>插件,方便查看和修改配置,
输入<span class="cmd">#R帮助</span>获取插件帮助,
输入<span class="cmd">#R更新</span>更新插件,

View File

@ -116,4 +116,13 @@ export const SUMMARY_CONTENT_ESTIMATOR_PATTERNS = [
{ reg: /(?:https?:\/\/)?sspai.com\/[a-zA-Z\d._?%&+\-=\/#]*/, name: '少数派' },
{ reg: /(?:https?:\/\/)?www\.bilibili\.com\/read\/[A-Za-z\d._?%&+\-=\/#]*/, name: '哔哩哔哩专栏' },
{ reg: /(?:https?:\/\/)?(www\.)chinadaily.com.cn\/a\/[a-zA-Z0-9\d._?%&+\-=\/#]*/, name: 'ChinaDaily' }
];
];
export const BILI_CDN_SELECT_LIST = Object.freeze([
{ label: '不使用', value: 0, sign: '' },
{ label: '腾讯CDN【推荐】', value: 1, sign: 'upos-sz-mirrorcos.bilivideo.com' },
{ label: '百度CDN', value: 2, sign: 'upos-sz-mirrorbd.bilivideo.com' },
{ label: '华为CDN', value: 3, sign: 'upos-sz-mirrorhw.bilivideo.com' },
{ label: '阿卡迈(海外)', value: 4 , sign: 'upos-sz-mirrorakamai.bilivideo.com'},
{ label: 'HK-CDN', value: 5, sign: 'upos-sz-mirroraliov.bilivideo.com' }
]);

View File

@ -1,6 +1,7 @@
import path from "path";
import model from "./model/index.js";
import _ from "lodash";
import { BILI_CDN_SELECT_LIST } from "./constants/constant.js";
const _path = process.cwd() + "/plugins/rconsole-plugin";
export function supportGuoba() {
@ -129,6 +130,15 @@ export function supportGuoba() {
component: "Switch",
required: false,
},
{
field: "tools.biliCDN",
label: "强制使用CDN",
bottomHelpMessage: "BBDown强制使用CDN【只影响开启后的BBDown一定程度可以影响BBDown速度】哔哩哔哩的CDN地址更换如果不需要默认不使用如果选择了其他的CDN将会使用",
component: "Select",
componentProps: {
options: BILI_CDN_SELECT_LIST,
}
},
{
field: "tools.biliUseAria2",
label: "使用Aria2下载",

View File

@ -25,10 +25,11 @@ export function checkBBDown() {
* 使用BBDown下载
* @param videoUrl 视频链接
* @param downloadDir 下载目录
* @param biliSessData cookie
* @param biliUseAria2 使用Aria2
* @param BBDownOptions BBDown选项目前仅支持session登录使用Aria2下载CDN
*/
export function startBBDown(videoUrl, downloadDir, biliSessData, biliUseAria2) {
export function startBBDown(videoUrl, downloadDir, BBDownOptions) {
const { biliSessData, biliUseAria2, biliCDN } = BBDownOptions;
return new Promise((resolve, reject) => {
// logger.info(videoUrl);
// 解析URL并提取参数p页数
@ -44,7 +45,8 @@ export function startBBDown(videoUrl, downloadDir, biliSessData, biliUseAria2) {
urlObj.search = newParams.toString();
videoUrl = urlObj.toString();
// 说明:-F 自定义名称,-c 自定义Cookie --work-dir 设置下载目录,-M 多p下载的时候命名
const command = `BBDown ${videoUrl} --work-dir ${downloadDir} ${biliSessData ? '-c SESSDATA=' + biliSessData : ''} ${pageParam ? '-p ' + pageParam + ' -M \"temp\"' : '-p 1' + ' -M \"temp\"'} -F temp --skip-subtitle --skip-cover ${biliUseAria2 ? '--use-aria2c' : ''}`;
const command = `BBDown ${videoUrl} --work-dir ${downloadDir} ${biliSessData ? '-c SESSDATA=' + biliSessData : ''} ${pageParam ? '-p ' + pageParam + ' -M \"temp\"' : '-p 1' + ' -M \"temp\"'} -F temp --skip-subtitle --skip-cover ${biliUseAria2 ? '--use-aria2c' : ''} ${biliCDN ? '--upos-host ' + biliCDN : ''}`;
logger.info(command);
// logger.info(command);
// 直接调用BBDown因为它已经在系统路径中
exec(command, (error, stdout, stderr) => {

View File

@ -1,45 +0,0 @@
import { HttpsProxyAgent } from 'https-proxy-agent';
/**
* Tiktok专属解析链接的Fetch
* @param url 地址
* @param isOversea 是否是海外
* @param proxy 梯子
*/
const fetchTiktokUrl = async (url, isOversea, proxy) => {
// 处理特殊情况 & 非特殊情况的header
const headers = url.includes("vm.tiktok") || url.includes("tiktok.com/t")
? { "User-Agent": "facebookexternalhit/1.1" }
: {};
return fetch(url, {
headers,
redirect: "follow",
follow: 10,
timeout: 10000,
agent: isOversea ? undefined : new HttpsProxyAgent(proxy),
}).then(resp => resp.url);
};
/**
* 处理Tiktok链接
* @param url 用户发送的链接可能存在一些问题需要正则匹配处理
* @param isOversea 是否是海外
* @param proxy 梯子
*/
export const processTikTokUrl = async (url, isOversea, proxy) => {
// 合并正则表达式
// const urlShortRex = /(http:|https:)\/\/vt.tiktok.com\/[A-Za-z\d._?%&+\-=\/#]*/g;
// const urlShortRex2 = /(http:|https:)\/\/vm.tiktok.com\/[A-Za-z\d._?%&+\-=\/#]*/g;
// const urlShortRex3 = /(http:|https:)\/\/www.tiktok.com\/t\/[A-Za-z\d._?%&+\-=\/#]*/g;
const tikTokRegex = /(http:|https:)\/\/(www\.tiktok\.com\/|vt\.tiktok\.com\/|vm\.tiktok\.com\/www\.tiktok\.com\/t\/)[A-Za-z\d._?%&+\-=\/#@]*/g;
const match = tikTokRegex.exec(url);
if (match) {// 如果URL匹配任何TikTok相关的模式则进行处理
url = await fetchTiktokUrl(match[0], isOversea, proxy);
}
// 这里可以处理其他逻辑例如更新URL、记录日志等
// 或者其他处理结果
return url;
};