Refactor: 抽象弹幕获取到父类

This commit is contained in:
lyz05
2025-11-21 11:46:52 +08:00
parent a0a56b66b2
commit 722ae23a23
9 changed files with 26 additions and 48 deletions

View File

@@ -1,3 +1,5 @@
import { filesize } from "filesize";
export default class BaseSource {
// 构造函数,初始化通用配置
constructor() {
@@ -27,13 +29,23 @@ export default class BaseSource {
return s;
}
memory() {
const memoryUsage = process.memoryUsage();
console.log("memory", JSON.stringify({
rss: filesize(memoryUsage.rss),//RAM 中保存的进程占用的内存部分,包括代码本身、栈、堆。
heapTotal: filesize(memoryUsage.heapTotal),//堆中总共申请到的内存量。
heapUsed: filesize(memoryUsage.heapUsed),//堆中目前用到的内存量,判断内存泄漏我们主要以这个字段为准。
external: filesize(memoryUsage.external),// V8 引擎内部的 C++ 对象占用的内存。
}));
}
// 解析传入的视频网址获取弹幕请求地址Promise数组
async resolve(url) {
throw new Error("Method 'resolve()' must be implemented.");
}
// 请求弹幕资源,返回标准化弹幕内容
async parse(promises) {
async parse(datas) {
throw new Error("Method 'parse()' must be implemented.");
}
@@ -42,7 +54,13 @@ export default class BaseSource {
const promises = await this.resolve(url);
if (!this.error_msg) {
console.log(this.name, "API lens:", promises.length);
this.content = await this.parse(promises);
this.memory(); //显示内存使用量
// 并发请求弹幕数据,等待所有请求完成。
let datas = (await Promise.allSettled(promises))
.filter(x => x.status === "fulfilled")
.map(x => x.value.data);
this.memory(); //显示内存使用量
this.content = await this.parse(datas);
}
return {
title: this.title,

View File

@@ -46,11 +46,7 @@ export default class GamerSource extends BaseSource {
};
async parse(promises) {
//筛选出成功的请求
let datas = (await Promise.allSettled(promises))
.filter(x => x.status === "fulfilled")
.map(x => x.value.data);
async parse(datas) {
let contents = [];
for (let i = 0; i < datas.length; i++) {
const data = datas[i].data;

View File

@@ -1,7 +1,6 @@
import axios from "axios";
import BaseSource from "./base.mjs";
import pako from "pako";
import memory from "../../utils/memory.js";
export default class IqiyiSource extends BaseSource {
constructor() {
@@ -91,12 +90,7 @@ export default class IqiyiSource extends BaseSource {
}
};
async parse(promises) {
memory();
let datas = (await Promise.allSettled(promises))
.filter(x => x.status === "fulfilled")
.map(x => x.value.data);
memory();
async parse(datas) {
let contents = [];
for (let i = 0; i < datas.length; i++) {
const data = datas[i];
@@ -118,6 +112,5 @@ export default class IqiyiSource extends BaseSource {
// m.work(m.example_urls[0])
// .then(() => {
// console.log(m.title);
// memory();
// });
// }

View File

@@ -38,11 +38,8 @@ export default class MgtvSource extends BaseSource {
return promises;
}
async parse(promises) {
async parse(datas) {
let contents = [];
const results = await Promise.allSettled(promises);
let datas = results.filter(result => result.status === 'fulfilled')
.map(result => result.value.data);
for (const data of datas) {
if (data.data.items === null)
continue;

View File

@@ -48,12 +48,8 @@ export default class TencentvideoSource extends BaseSource {
return promises;
}
async parse(promises) {
async parse(datas) {
let contents = [];
const results = await Promise.allSettled(promises);
let datas = results.filter(result => result.status === 'fulfilled')
.map(result => result.value.data);
for (const data of datas) {
for (const item of data.barrage_list) {
const content = JSON.parse(JSON.stringify(this.content_template));

View File

@@ -130,12 +130,8 @@ export default class YoukuSource extends BaseSource {
return promises;
}
async parse(promises) {
async parse(datas) {
let contents = [];
const results = await Promise.allSettled(promises);
let datas = results.filter(result => result.status === 'fulfilled')
.map(result => result.value.data);
for (const res of datas) {
const result = JSON.parse(res.data.result);
if (result.code === '-1') {

View File

@@ -1,10 +1,7 @@
import express from "express";
import axios from "axios";
import { createSourceList } from "./sources.mjs";
import memory from "../utils/memory.js";
import db from "../utils/db.js";
import { inflateRawSync } from "zlib";
const router = express.Router();
const list = createSourceList();
@@ -48,7 +45,7 @@ async function build_response(url, req) {
try {
ret = await fc.work(url);
} catch (e) {
console.log("全局错误捕获,详情查阅数据库" + e.message);
console.log("全局错误捕获,详情查阅数据库", e);
let err = JSON.stringify(e, Object.getOwnPropertyNames(e));
db.errorInsert({
ip: req.ip,
@@ -64,7 +61,6 @@ async function resolve(req, res) {
const url = req.query.url;
const download = (req.query.download === "on");
const ret = await build_response(url, req);
memory(); //显示内存使用量
if (ret.msg !== "ok") {
res.status(403).send(ret.msg);
return;

View File

@@ -1,14 +0,0 @@
const {filesize} = require("filesize");
const print = function () {
const memoryUsage = process.memoryUsage();
console.log("memory", JSON.stringify({
rss: filesize(memoryUsage.rss),//RAM 中保存的进程占用的内存部分,包括代码本身、栈、堆。
heapTotal: filesize(memoryUsage.heapTotal),//堆中总共申请到的内存量。
heapUsed: filesize(memoryUsage.heapUsed),//堆中目前用到的内存量,判断内存泄漏我们主要以这个字段为准。
external: filesize(memoryUsage.external),// V8 引擎内部的 C++ 对象占用的内存。
}));
};
module.exports = print;