const ytdl = require('ytdl-core'), fs = require('fs'), path = require('path'), express = require('express'), ffmpeg = require('ffmpeg'), bodyParser = require('body-parser') const PORT = process.env.PORT || 8080 const app = express() if (fs.existsSync(path.join(__dirname, 'cached'))) { fs.unlinkSync(path.join(__dirname, 'cached')) } fs.mkdirSync(path.join(__dirname, 'cached')) const cacheDuration = 15 || process.env.CACHEDUR process.on('uncaughtException', (err, origin) => { fs.writeSync( process.stderr.fd, `Caught exception: ${err}\n` + `Exception origin: ${origin}`, ); }); app.use(bodyParser.urlencoded({ extended: false })) app.get("/getLink", async (req, res) => { const filename = req.query.filename const url = req.query.url const format = req.query.format const quality = req.query.quality if (!ytdl.validateURL(url)) { res.header("Content-Type", "text/html") res.write(``) res.write(`
Invalid URL! Check the url for any errors!
${url}
Downloading... ${percent}%
`) res.write(` `) lastp = percent } }) .pipe(fs.createWriteStream(ytpath)) .on("close", () => { res.write("Downloaded!
") var proc = new ffmpeg(ytpath) // res.write(`Converting... (May take a while, doesn't support progress updates yet)
`) var endpath = ('cached/' + ytdl.getVideoID(url) + String(Math.floor(Math.random() * 100000)) + "Converted." + format) res.write(`Converting... 0% (Potentially Innacurate, Experimental!)
`) proc.then(function (video) { video .setVideoDuration(vidinfo.videoDetails.lengthSeconds) .setVideoFormat(format) .save(endpath, (error, file)=>{ res.write("Converted!
") res.write(`Link to video download! (Link is deleted after 15 minutes!)
`) setTimeout(()=>{ if (fs.existsSync(ytpath)) { fs.unlinkSync(ytpath) } if (fs.existsSync(file)) { fs.unlinkSync(file) } }, 60 * 1000) }) }) var integer = 1 var lastc = 0 var percent = 0 async function update() { if (fs.existsSync(endpath)) { var ffile = await fs.readFileSync(endpath) var yt = await fs.readFileSync(ytpath) percent = (Math.round(ffile.length / yt.length * (100 / integer))) * integer if (percent % integer == 0 && percent != lastc) { res.write(`Converting... ${Math.min(percent, 100)}% (Potentially Innacurate, Experimental!)
`) res.write(` `) lastc = percent } } if (percent < 100) { setTimeout(() => { update() }, 500); } } update() }) }); app.get('/download', (req, res) => { var file = req.query.path var filename = req.query.filename var dest = path.join(__dirname, 'cached/', file) if (fs.existsSync(dest)) { res.header('Content-Disposition', `attachment; filename="${filename}"`); fs.createReadStream(dest).pipe(res) } else { res.header("Content-Type", "text/html") res.write(``) res.write(`Uh oh! It seems that video couldn't be found... Maybe the URL expired? Or, the link was invalid.
If you believe this was a mistake, please put a issue on Github