Update index.js
Browse files
index.js
CHANGED
|
@@ -2,7 +2,8 @@ const yts = require('yt-search');
|
|
| 2 |
const morgan = require('morgan');
|
| 3 |
const express = require('express');
|
| 4 |
const ytdl = require('ytdl-core');
|
| 5 |
-
const { Writable, pipeline } = require('stream');
|
|
|
|
| 6 |
const util = require('util');
|
| 7 |
const axios = require('axios');
|
| 8 |
const FormData = require('form-data')
|
|
@@ -218,13 +219,41 @@ async function fileDitch(media){
|
|
| 218 |
|
| 219 |
axios.post("https://up1.fileditch.com/upload.php", form, {
|
| 220 |
headers: {
|
| 221 |
-
"User-Agent":
|
|
|
|
| 222 |
...form.getHeaders()
|
| 223 |
}
|
| 224 |
}).then(({ data }) => resolve(data?.files[0]?.url)).catch(reject)
|
| 225 |
})
|
| 226 |
//https://up1.fileditch.com/upload.php
|
| 227 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 228 |
async function ytAPI(url) {
|
| 229 |
try {
|
| 230 |
const ID = ytdl.getVideoID(url)
|
|
@@ -232,6 +261,7 @@ async function ytAPI(url) {
|
|
| 232 |
let audioStream = await ytdl(ID, {filter: "audioonly", quality:"lowestaudio"})
|
| 233 |
let buffermp4 = await streamToBuffer(videoStream)
|
| 234 |
let buffermp3 = await streamToBuffer(audioStream)
|
|
|
|
| 235 |
buffermp4 = await fileDitch(buffermp4)
|
| 236 |
buffermp3 = await fileDitch(buffermp3)
|
| 237 |
return {
|
|
|
|
| 2 |
const morgan = require('morgan');
|
| 3 |
const express = require('express');
|
| 4 |
const ytdl = require('ytdl-core');
|
| 5 |
+
const { Writable, pipeline, Readable } = require('stream');
|
| 6 |
+
const ffmpeg = require('fluent-ffmpeg');
|
| 7 |
const util = require('util');
|
| 8 |
const axios = require('axios');
|
| 9 |
const FormData = require('form-data')
|
|
|
|
| 219 |
|
| 220 |
axios.post("https://up1.fileditch.com/upload.php", form, {
|
| 221 |
headers: {
|
| 222 |
+
"User-Agent": generateRandomUserAgent(),
|
| 223 |
+
"X-Forwarded-For": generateRandomIP(),
|
| 224 |
...form.getHeaders()
|
| 225 |
}
|
| 226 |
}).then(({ data }) => resolve(data?.files[0]?.url)).catch(reject)
|
| 227 |
})
|
| 228 |
//https://up1.fileditch.com/upload.php
|
| 229 |
}
|
| 230 |
+
async function convertWebmToMp3(webmBuffer) {
|
| 231 |
+
return new Promise((resolve, reject) => {
|
| 232 |
+
// Buat stream Readable dari buffer webm
|
| 233 |
+
const webmStream = new Readable();
|
| 234 |
+
webmStream.push(webmBuffer);
|
| 235 |
+
webmStream.push(null); // Selesai mengirim data
|
| 236 |
+
|
| 237 |
+
// Buffer untuk menampung hasil konversi
|
| 238 |
+
const buffers = [];
|
| 239 |
+
|
| 240 |
+
ffmpeg()
|
| 241 |
+
.input(webmStream)
|
| 242 |
+
.toFormat('mp3')
|
| 243 |
+
.on('error', err => {
|
| 244 |
+
reject(err);
|
| 245 |
+
})
|
| 246 |
+
.on('data', chunk => {
|
| 247 |
+
buffers.push(chunk);
|
| 248 |
+
})
|
| 249 |
+
.on('end', () => {
|
| 250 |
+
// Gabungkan semua buffer menjadi satu buffer tunggal
|
| 251 |
+
const mp3Buffer = Buffer.concat(buffers);
|
| 252 |
+
resolve(mp3Buffer);
|
| 253 |
+
})
|
| 254 |
+
.run();
|
| 255 |
+
});
|
| 256 |
+
}
|
| 257 |
async function ytAPI(url) {
|
| 258 |
try {
|
| 259 |
const ID = ytdl.getVideoID(url)
|
|
|
|
| 261 |
let audioStream = await ytdl(ID, {filter: "audioonly", quality:"lowestaudio"})
|
| 262 |
let buffermp4 = await streamToBuffer(videoStream)
|
| 263 |
let buffermp3 = await streamToBuffer(audioStream)
|
| 264 |
+
buffermp3 = await convertWebmToMp3(buffermp3)
|
| 265 |
buffermp4 = await fileDitch(buffermp4)
|
| 266 |
buffermp3 = await fileDitch(buffermp3)
|
| 267 |
return {
|