This commit is contained in:
localhost 2024-03-30 14:32:37 +01:00
parent cfe48bcb0a
commit 0083081fbd
2 changed files with 29 additions and 17 deletions

View File

@ -4,6 +4,7 @@ const https = require('https')
const maxRetries = 5 const maxRetries = 5
const platforms = ['WEB', 'ANDROID', 'iOS'] const platforms = ['WEB', 'ANDROID', 'iOS']
const cobalt = ['http://cobalt-api:9000', 'https://co.wuk.sh', 'http://cobalt-api:9000']
const ignoreSsl = new https.Agent({ const ignoreSsl = new https.Agent({
rejectUnauthorized: false, rejectUnauthorized: false,
@ -125,17 +126,29 @@ async function getPlaylistVideos(id) {
} }
async function getVideoDownload(url, quality) { async function getVideoDownload(url, quality) {
const json = await (await fetch('http://cobalt-api:9000/api/json', { let json
method: 'POST',
headers: { for (let retries = 0; retries < maxRetries; retries++) {
'Accept': 'application/json', try {
'Content-Type': 'application/json' const instance = cobalt[retries % cobalt.length];
}, json = await (await fetch(`${instance}/api/json`, {
body: JSON.stringify({ method: 'POST',
'url': url, headers: {
'vQuality': quality 'Accept': 'application/json',
}) 'Content-Type': 'application/json'
})).json() },
body: JSON.stringify({
'url': url,
'vQuality': quality
})
})).json()
if (json.error) continue
return json
} catch (error) {
continue
}
}
return json return json
} }

View File

@ -8,17 +8,16 @@ async function downloadVideo(url, ws, id) {
let quality = '720p' let quality = '720p'
const video = await metadata.getVideoMetadata(id) const video = await metadata.getVideoMetadata(id)
if (video.error) { if (video.error) {
resolve({ return resolve({
message: `Failed to request Youtube with error ${video.error}. Please retry...`, message: `Failed to request Youtube with error ${video.error}. Please retry...`,
fail: true fail: true
}) })
} }
if (video.basic_info.duration >= 900) quality = '360p' // 15 minutes
if (video.basic_info.duration > 1200) quality = '480p' // 20 minutes
if (video.basic_info.duration > 2100) quality = '360p' // 35 minutes
const downloadJson = await metadata.getVideoDownload(url, quality) const downloadJson = await metadata.getVideoDownload(url, quality)
if (downloadJson.status == 'error') { if (downloadJson.status == 'error') {
resolve({ return resolve({
message: 'Failed to request Youtube. Please retry...', message: 'Failed to request Youtube. Please retry...',
fail: true fail: true
}) })
@ -61,11 +60,11 @@ async function downloadVideo(url, ws, id) {
download.on('end', output => { download.on('end', output => {
if (output == 'Finished writing to disk') { if (output == 'Finished writing to disk') {
ws.send(`DATA - Download has finished`) ws.send(`DATA - Download has finished`)
resolve({ return resolve({
fail: false fail: false
}) })
} else { } else {
resolve({ return resolve({
fail: true fail: true
}) })
} }