mirror of
https://github.com/lyz05/danmaku.git
synced 2026-02-02 17:59:53 +08:00
Refactor: 抽象弹幕获取到父类
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
import { filesize } from "filesize";
|
||||||
|
|
||||||
export default class BaseSource {
|
export default class BaseSource {
|
||||||
// 构造函数,初始化通用配置
|
// 构造函数,初始化通用配置
|
||||||
constructor() {
|
constructor() {
|
||||||
@@ -26,6 +28,16 @@ export default class BaseSource {
|
|||||||
}
|
}
|
||||||
return s;
|
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数组)
|
// 解析传入的视频网址,获取弹幕请求地址(Promise数组)
|
||||||
async resolve(url) {
|
async resolve(url) {
|
||||||
@@ -33,7 +45,7 @@ export default class BaseSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 请求弹幕资源,返回标准化弹幕内容
|
// 请求弹幕资源,返回标准化弹幕内容
|
||||||
async parse(promises) {
|
async parse(datas) {
|
||||||
throw new Error("Method 'parse()' must be implemented.");
|
throw new Error("Method 'parse()' must be implemented.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,7 +54,13 @@ export default class BaseSource {
|
|||||||
const promises = await this.resolve(url);
|
const promises = await this.resolve(url);
|
||||||
if (!this.error_msg) {
|
if (!this.error_msg) {
|
||||||
console.log(this.name, "API lens:", promises.length);
|
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 {
|
return {
|
||||||
title: this.title,
|
title: this.title,
|
||||||
|
|||||||
@@ -46,11 +46,7 @@ export default class GamerSource extends BaseSource {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
async parse(promises) {
|
async parse(datas) {
|
||||||
//筛选出成功的请求
|
|
||||||
let datas = (await Promise.allSettled(promises))
|
|
||||||
.filter(x => x.status === "fulfilled")
|
|
||||||
.map(x => x.value.data);
|
|
||||||
let contents = [];
|
let contents = [];
|
||||||
for (let i = 0; i < datas.length; i++) {
|
for (let i = 0; i < datas.length; i++) {
|
||||||
const data = datas[i].data;
|
const data = datas[i].data;
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import BaseSource from "./base.mjs";
|
import BaseSource from "./base.mjs";
|
||||||
import pako from "pako";
|
import pako from "pako";
|
||||||
import memory from "../../utils/memory.js";
|
|
||||||
|
|
||||||
export default class IqiyiSource extends BaseSource {
|
export default class IqiyiSource extends BaseSource {
|
||||||
constructor() {
|
constructor() {
|
||||||
@@ -91,12 +90,7 @@ export default class IqiyiSource extends BaseSource {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
async parse(promises) {
|
async parse(datas) {
|
||||||
memory();
|
|
||||||
let datas = (await Promise.allSettled(promises))
|
|
||||||
.filter(x => x.status === "fulfilled")
|
|
||||||
.map(x => x.value.data);
|
|
||||||
memory();
|
|
||||||
let contents = [];
|
let contents = [];
|
||||||
for (let i = 0; i < datas.length; i++) {
|
for (let i = 0; i < datas.length; i++) {
|
||||||
const data = datas[i];
|
const data = datas[i];
|
||||||
@@ -118,6 +112,5 @@ export default class IqiyiSource extends BaseSource {
|
|||||||
// m.work(m.example_urls[0])
|
// m.work(m.example_urls[0])
|
||||||
// .then(() => {
|
// .then(() => {
|
||||||
// console.log(m.title);
|
// console.log(m.title);
|
||||||
// memory();
|
|
||||||
// });
|
// });
|
||||||
// }
|
// }
|
||||||
@@ -38,11 +38,8 @@ export default class MgtvSource extends BaseSource {
|
|||||||
return promises;
|
return promises;
|
||||||
}
|
}
|
||||||
|
|
||||||
async parse(promises) {
|
async parse(datas) {
|
||||||
let contents = [];
|
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 data of datas) {
|
||||||
if (data.data.items === null)
|
if (data.data.items === null)
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -48,12 +48,8 @@ export default class TencentvideoSource extends BaseSource {
|
|||||||
return promises;
|
return promises;
|
||||||
}
|
}
|
||||||
|
|
||||||
async parse(promises) {
|
async parse(datas) {
|
||||||
let contents = [];
|
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 data of datas) {
|
||||||
for (const item of data.barrage_list) {
|
for (const item of data.barrage_list) {
|
||||||
const content = JSON.parse(JSON.stringify(this.content_template));
|
const content = JSON.parse(JSON.stringify(this.content_template));
|
||||||
|
|||||||
@@ -130,12 +130,8 @@ export default class YoukuSource extends BaseSource {
|
|||||||
return promises;
|
return promises;
|
||||||
}
|
}
|
||||||
|
|
||||||
async parse(promises) {
|
async parse(datas) {
|
||||||
let contents = [];
|
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) {
|
for (const res of datas) {
|
||||||
const result = JSON.parse(res.data.result);
|
const result = JSON.parse(res.data.result);
|
||||||
if (result.code === '-1') {
|
if (result.code === '-1') {
|
||||||
|
|||||||
@@ -1,10 +1,7 @@
|
|||||||
import express from "express";
|
import express from "express";
|
||||||
import axios from "axios";
|
import axios from "axios";
|
||||||
import { createSourceList } from "./sources.mjs";
|
import { createSourceList } from "./sources.mjs";
|
||||||
import memory from "../utils/memory.js";
|
|
||||||
import db from "../utils/db.js";
|
import db from "../utils/db.js";
|
||||||
import { inflateRawSync } from "zlib";
|
|
||||||
|
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
const list = createSourceList();
|
const list = createSourceList();
|
||||||
@@ -48,7 +45,7 @@ async function build_response(url, req) {
|
|||||||
try {
|
try {
|
||||||
ret = await fc.work(url);
|
ret = await fc.work(url);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log("全局错误捕获,详情查阅数据库" + e.message);
|
console.log("全局错误捕获,详情查阅数据库", e);
|
||||||
let err = JSON.stringify(e, Object.getOwnPropertyNames(e));
|
let err = JSON.stringify(e, Object.getOwnPropertyNames(e));
|
||||||
db.errorInsert({
|
db.errorInsert({
|
||||||
ip: req.ip,
|
ip: req.ip,
|
||||||
@@ -64,7 +61,6 @@ async function resolve(req, res) {
|
|||||||
const url = req.query.url;
|
const url = req.query.url;
|
||||||
const download = (req.query.download === "on");
|
const download = (req.query.download === "on");
|
||||||
const ret = await build_response(url, req);
|
const ret = await build_response(url, req);
|
||||||
memory(); //显示内存使用量
|
|
||||||
if (ret.msg !== "ok") {
|
if (ret.msg !== "ok") {
|
||||||
res.status(403).send(ret.msg);
|
res.status(403).send(ret.msg);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -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;
|
|
||||||
Reference in New Issue
Block a user