mirror of
https://github.com/lyz05/danmaku.git
synced 2026-05-05 00:32:13 +08:00
fix: 升级axios版本,支持br解码,腾讯视频从workers中获取整合好的弹幕信息
This commit is contained in:
2
fly.toml
2
fly.toml
@@ -27,7 +27,7 @@ kill_timeout = "5s"
|
||||
[[vm]]
|
||||
cpu_kind = "shared"
|
||||
cpus = 1
|
||||
memory_mb = 512
|
||||
memory_mb = 256
|
||||
|
||||
[mounts]
|
||||
source="danmaku"
|
||||
|
||||
30
package-lock.json
generated
30
package-lock.json
generated
@@ -9,7 +9,7 @@
|
||||
"version": "0.1.0",
|
||||
"dependencies": {
|
||||
"ali-oss": "^6.17.1",
|
||||
"axios": "^1.2.1",
|
||||
"axios": "^1.6.8",
|
||||
"bootstrap": "^3.4.1",
|
||||
"chai": "^4.3.7",
|
||||
"chai-http": "^4.3.0",
|
||||
@@ -1484,11 +1484,11 @@
|
||||
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz",
|
||||
"integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==",
|
||||
"version": "1.6.8",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
|
||||
"integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.0",
|
||||
"follow-redirects": "^1.15.6",
|
||||
"form-data": "^4.0.0",
|
||||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
@@ -3542,9 +3542,9 @@
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
||||
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
|
||||
"version": "1.15.6",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
|
||||
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
@@ -10157,11 +10157,11 @@
|
||||
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
|
||||
},
|
||||
"axios": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.2.1.tgz",
|
||||
"integrity": "sha512-I88cFiGu9ryt/tfVEi4kX2SITsvDddTajXTOFmt2uK1ZVA8LytjtdeyefdQWEf5PU8w+4SSJDoYnggflB5tW4A==",
|
||||
"version": "1.6.8",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
|
||||
"integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
|
||||
"requires": {
|
||||
"follow-redirects": "^1.15.0",
|
||||
"follow-redirects": "^1.15.6",
|
||||
"form-data": "^4.0.0",
|
||||
"proxy-from-env": "^1.1.0"
|
||||
}
|
||||
@@ -11736,9 +11736,9 @@
|
||||
"peer": true
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
||||
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
|
||||
"version": "1.15.6",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
|
||||
"integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA=="
|
||||
},
|
||||
"foreground-child": {
|
||||
"version": "2.0.0",
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"ali-oss": "^6.17.1",
|
||||
"axios": "^1.2.1",
|
||||
"axios": "^1.6.8",
|
||||
"bootstrap": "^3.4.1",
|
||||
"chai": "^4.3.7",
|
||||
"chai-http": "^4.3.0",
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
const urlmodule = require("url");
|
||||
const axios = require("axios");
|
||||
const whacko = require("whacko");
|
||||
const {content_template} = require("./utils");
|
||||
const {content_template,fetchInBatches} = require("./utils");
|
||||
const fs = require("fs")
|
||||
const memory = require("../../utils/memory");
|
||||
|
||||
function Tencentvideo() {
|
||||
this.name = "腾讯视频";
|
||||
@@ -37,20 +39,24 @@ function Tencentvideo() {
|
||||
} else throw e;
|
||||
}
|
||||
|
||||
let promises = [];
|
||||
// let promises = [];
|
||||
let urls = [];
|
||||
let list = Object.values(res.data.segment_index);
|
||||
for (const item of list) {
|
||||
promises.push(axios.get(`${api_danmaku_segment}${vid}/${item.segment_name}`));
|
||||
urls.push(`${api_danmaku_segment}${vid}/${item.segment_name}`)
|
||||
// promises.push(axios.get(`${api_danmaku_segment}${vid}/${item.segment_name}`));
|
||||
}
|
||||
return promises;
|
||||
return urls;
|
||||
};
|
||||
|
||||
this.parse = async (promises) => {
|
||||
this.parse = async (urls) => {
|
||||
let contents = [];
|
||||
const results = await Promise.allSettled(promises);
|
||||
let datas = results.filter(result => result.status === 'fulfilled')
|
||||
.map(result => result.value.data);
|
||||
|
||||
// const results = await Promise.allSettled(promises);
|
||||
// let datas = results.filter(result => result.status === 'fulfilled')
|
||||
// .map(result => result.value.data);
|
||||
memory()
|
||||
let datas = await fetchInBatches(urls)
|
||||
memory()
|
||||
for (const data of datas) {
|
||||
for (const item of data.barrage_list) {
|
||||
const content = JSON.parse(JSON.stringify(content_template));
|
||||
@@ -63,6 +69,7 @@ function Tencentvideo() {
|
||||
contents.push(content);
|
||||
}
|
||||
}
|
||||
memory()
|
||||
// contents = make_response(contents);
|
||||
return contents;
|
||||
};
|
||||
@@ -87,8 +94,8 @@ module.exports = Tencentvideo;
|
||||
if (!module.parent) {
|
||||
console.log("main");
|
||||
const t = new Tencentvideo();
|
||||
t.work(t.example_urls[0]).then(() => {
|
||||
console.log(t.content);
|
||||
t.work(t.example_urls[2]).then(() => {
|
||||
// console.log(t.content);
|
||||
console.log(t.title);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
const axios = require("axios");
|
||||
const content_template = {
|
||||
timepoint: 0, // 弹幕发送时间(秒)
|
||||
ct: 1, // 弹幕类型,1-3 为滚动弹幕、4 为底部、5 为顶端、6 为逆向、7 为精确、8 为高级
|
||||
@@ -19,4 +20,30 @@ function time_to_second(time) {
|
||||
return s;
|
||||
}
|
||||
|
||||
module.exports = {time_to_second, content_template};
|
||||
async function fetchInBatches(urls, batchSize = 32) {
|
||||
let results = [],promises=[];
|
||||
console.log("=== Batch Process Start ===");
|
||||
for (let i = 0; i < urls.length; i += batchSize) {
|
||||
// console.log(`Processing batch starting from index ${i}`);
|
||||
const batchurls = urls.slice(i, i + batchSize);
|
||||
promises.push(axios.post("https://url-combine.lyz05.workers.dev/", batchurls))
|
||||
// console.log(`Batch ending at index ${i + batchSize - 1} processed`);
|
||||
}
|
||||
// Promise.allSettled不会抛出错误,所以不需要try/catch
|
||||
let batchResults = await Promise.allSettled(promises);
|
||||
|
||||
// 处理每个承诺的结果
|
||||
batchResults.forEach(result => {
|
||||
if (result.status === 'fulfilled') {
|
||||
// console.log('Result:', result.value.data);
|
||||
results.push(result.value.data); // 假设每个成功的承诺都有一个data属性
|
||||
} else {
|
||||
console.error('Failed:', result.reason.message); // 显示失败的原因
|
||||
}
|
||||
});
|
||||
console.log("=== Batch Process End ===");
|
||||
results = results.flat()
|
||||
return results;
|
||||
}
|
||||
|
||||
module.exports = {time_to_second, content_template, fetchInBatches};
|
||||
|
||||
Reference in New Issue
Block a user