ilhamdev commited on
Commit
2565f64
·
verified ·
1 Parent(s): 8f361fc

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +58 -63
index.js CHANGED
@@ -229,11 +229,13 @@ async function fby2mate(url) {
229
  }
230
 
231
  //YTDL-CORE
232
- async function uploadStream(stream) {
233
  return new Promise(async (resolve, reject) => {
234
  try {
 
 
235
  let form = new FormData();
236
- form.append("files[]", fs.createReadStream(stream));
237
 
238
  let urls = ["https://pomf.lain.la/upload.php", "https://up1.fileditch.com/upload.php"];
239
  for (let url of urls) {
@@ -259,7 +261,7 @@ async function uploadStream(stream) {
259
  }
260
  });
261
  }
262
- /*async function streamToBuffer(stream) {
263
  const chunks = [];
264
  const captureChunks = new Writable({
265
  write(chunk, encoding, callback) {
@@ -271,7 +273,7 @@ callback();
271
  await util.promisify(pipeline)(stream, captureChunks);
272
 
273
  return Buffer.concat(chunks);
274
- }*/
275
  function formatViews(viewCount) {
276
  if (viewCount >= 1000000000) {
277
  return (viewCount / 1000000000).toFixed(1) + 'B';
@@ -322,14 +324,14 @@ u < units.length - 1
322
  return `${bytes.toFixed(dp)} ${units[u]}`;
323
  }
324
 
325
- async function ytmp4(url, quality = 'highestvideo') {
326
  try {
327
  const ID = ytdl.getVideoID(url),
328
  data = await ytdl.getInfo('https://www.youtube.com/watch?v=' + ID);
329
- const videoStream = await ytdl(ID, { filter: format => format.hasVideo && format.hasAudio, quality: quality });
330
  //let buffer = await streamToBuffer(videoStream);
331
- let upload = await uploadStream(videoStream);
332
- let urel = upload != null ? { url_v2: upload } : null;
333
  let format = ytdl.chooseFormat(data.formats, { filter: format => format.hasVideo && format.hasAudio, quality: quality });
334
 
335
 
@@ -345,7 +347,7 @@ if (format) {
345
  quality: format.qualityLabel,
346
  thumb: data.videoDetails.thumbnails[0].url,
347
  dl_url: format.url,
348
- ...urel,
349
  };
350
  } else {
351
  throw new Error('No suitable format found');
@@ -364,56 +366,49 @@ const audioStream = await ytdl(ID, { filter: 'audioonly', quality: bitrate });
364
  //let buffer = await streamToBuffer(audioStream);
365
 
366
 
367
- async function convertToAudio(inputStream, ext) {
368
- try {
369
- const out = path.join(os.tmpdir(), `${+new Date()}.mp3`);
370
-
371
- const ffmpegProcess = cp.spawn('ffmpeg', [
372
- '-y',
373
- '-i', 'pipe:0',
374
- '-vn',
375
- '-ac', '2',
376
- '-b:a', '128k',
377
- '-ar', '44100',
378
- '-f', 'p3',
379
- out
380
- ]);
381
-
382
- inputStream.on('error', (err) => {
 
 
 
383
  console.error(err);
384
- ffmpegProcess.kill();
385
  });
386
-
387
- inputStream.pipe(ffmpegProcess.stdin);
388
-
389
- await new Promise((resolve, reject) => {
390
- ffmpegProcess.on('error', (err) => {
391
- console.error(err);
392
- reject(err);
393
- });
394
- ffmpegProcess.on('close', (code) => {
395
- if (code!== 0) {
396
- reject(`ffmpeg process closed with code: ${code}`);
397
- } else {
398
- resolve();
399
- }
400
- });
401
  });
402
-
403
- // Add a delay to ensure the file is written
404
- await new Promise(resolve => setTimeout(resolve, 1000));
405
-
406
- const result = await fs.promises.readFile(out.toString());
407
- await fs.promises.unlink(out.toString());
408
- return result;
409
- } catch (e) {
410
- console.error(e);
411
- throw e;
412
- }
413
  }
414
- let konver = await convertToAudio(audioStream, "mp4");
415
- let upload = await uploadStream(konver);
416
- let urel = upload != null ? { url_v2: upload } : null;
 
417
  let format = ytdl.chooseFormat(data.formats, { filter: 'audioonly', quality: bitrate });
418
 
419
  if (format) {
@@ -428,7 +423,7 @@ if (format) {
428
  quality: format.audioQuality,
429
  thumb: data.videoDetails.thumbnails[0].url,
430
  dl_url: format.url,
431
- ...urel,
432
  };
433
  } else {
434
  throw new Error('No suitable format found');
@@ -437,9 +432,9 @@ if (format) {
437
  console.error('Error occurred:', error);
438
  return error;
439
  }
440
- }
441
 
442
- /*async function ytmp4(url, quality = 'highestvideo') {
443
  try {
444
  const ID = ytdl.getVideoID(url);
445
  const data = await ytdl.getInfo(ID);
@@ -495,7 +490,7 @@ async function ytmp3(url, bitrate = 'highestaudio') {
495
  console.error('Error occurred:', error.message);
496
  return { error: error.message };
497
  }
498
- }*/
499
 
500
 
501
  // Fungsi untuk mengkonversi video dari YouTube
@@ -1023,7 +1018,7 @@ return res.json({ message: e.message });
1023
 
1024
  let video = await ytmp4(url);
1025
  let audio = await ytmp3(url);
1026
- //let any = await ytdlhamster(url)
1027
  let data;
1028
 
1029
  try {
@@ -1035,13 +1030,13 @@ return res.json({ message: e.message });
1035
  let response = {
1036
  video: {
1037
  ...video,
1038
- //...(data && data.mp4 ? { url_v2: data.mp4 } : {})
1039
  },
1040
  audio: {
1041
  ...audio,
1042
- //...(data && data.mp3 ? { url_v2: data.mp3 } : {})
1043
  },
1044
- //any
1045
  };
1046
 
1047
  return res.json(response);
 
229
  }
230
 
231
  //YTDL-CORE
232
+ async function uploadBuffer(media) {
233
  return new Promise(async (resolve, reject) => {
234
  try {
235
+ let { fileTypeFromBuffer } = await import('file-type');
236
+ let mime = await fileTypeFromBuffer(media);
237
  let form = new FormData();
238
+ form.append("files[]", media, `file-${new Date().getTime()}.${mime.ext}`);
239
 
240
  let urls = ["https://pomf.lain.la/upload.php", "https://up1.fileditch.com/upload.php"];
241
  for (let url of urls) {
 
261
  }
262
  });
263
  }
264
+ async function streamToBuffer(stream) {
265
  const chunks = [];
266
  const captureChunks = new Writable({
267
  write(chunk, encoding, callback) {
 
273
  await util.promisify(pipeline)(stream, captureChunks);
274
 
275
  return Buffer.concat(chunks);
276
+ }
277
  function formatViews(viewCount) {
278
  if (viewCount >= 1000000000) {
279
  return (viewCount / 1000000000).toFixed(1) + 'B';
 
324
  return `${bytes.toFixed(dp)} ${units[u]}`;
325
  }
326
 
327
+ /*async function ytmp4(url, quality = 'highestvideo') {
328
  try {
329
  const ID = ytdl.getVideoID(url),
330
  data = await ytdl.getInfo('https://www.youtube.com/watch?v=' + ID);
331
+ //const videoStream = await ytdl(ID, { filter: format => format.hasVideo && format.hasAudio, quality: quality });
332
  //let buffer = await streamToBuffer(videoStream);
333
+ //let upload = await uploadBuffer(buffer);
334
+ //let urel = upload != null ? { url_v2: upload } : null;
335
  let format = ytdl.chooseFormat(data.formats, { filter: format => format.hasVideo && format.hasAudio, quality: quality });
336
 
337
 
 
347
  quality: format.qualityLabel,
348
  thumb: data.videoDetails.thumbnails[0].url,
349
  dl_url: format.url,
350
+ //...urel,
351
  };
352
  } else {
353
  throw new Error('No suitable format found');
 
366
  //let buffer = await streamToBuffer(audioStream);
367
 
368
 
369
+ async function convertToAudio(buffer, ext) {
370
+ try {
371
+ const tmp = path.join(os.tmpdir(), `${+new Date()}.${ext}`);
372
+ const out = `${tmp}.mp3`;
373
+ await fs.promises.writeFile(tmp, buffer);
374
+
375
+ const ffmpegProcess = cp.spawn('ffmpeg', [
376
+ '-y',
377
+ '-i', tmp,
378
+ '-vn',
379
+ '-ac', '2',
380
+ '-b:a', '128k',
381
+ '-ar', '44100',
382
+ '-f', 'mp3',
383
+ out
384
+ ]);
385
+
386
+ await new Promise((resolve, reject) => {
387
+ ffmpegProcess.on('error', (err) => {
388
  console.error(err);
389
+ reject(err);
390
  });
391
+ ffmpegProcess.on('close', (code) => {
392
+ if (code !== 0) {
393
+ reject(`ffmpeg process closed with code: ${code}`);
394
+ } else {
395
+ resolve();
396
+ }
 
 
 
 
 
 
 
 
 
397
  });
398
+ });
399
+
400
+ const result = await fs.promises.readFile(out);
401
+ await fs.promises.unlink(tmp);
402
+ await fs.promises.unlink(out);
403
+ return result;
404
+ } catch (e) {
405
+ console.error(e);
406
+ throw e;
 
 
407
  }
408
+ }
409
+ //let konver = await convertToAudio(buffer, "mp4");
410
+ //let upload = await uploadBuffer(konver);
411
+ //let urel = upload != null ? { url_v2: upload } : null;
412
  let format = ytdl.chooseFormat(data.formats, { filter: 'audioonly', quality: bitrate });
413
 
414
  if (format) {
 
423
  quality: format.audioQuality,
424
  thumb: data.videoDetails.thumbnails[0].url,
425
  dl_url: format.url,
426
+ //...urel,
427
  };
428
  } else {
429
  throw new Error('No suitable format found');
 
432
  console.error('Error occurred:', error);
433
  return error;
434
  }
435
+ }*/
436
 
437
+ async function ytmp4(url, quality = 'highestvideo') {
438
  try {
439
  const ID = ytdl.getVideoID(url);
440
  const data = await ytdl.getInfo(ID);
 
490
  console.error('Error occurred:', error.message);
491
  return { error: error.message };
492
  }
493
+ }
494
 
495
 
496
  // Fungsi untuk mengkonversi video dari YouTube
 
1018
 
1019
  let video = await ytmp4(url);
1020
  let audio = await ytmp3(url);
1021
+ let any = await ytdlhamster(url)
1022
  let data;
1023
 
1024
  try {
 
1030
  let response = {
1031
  video: {
1032
  ...video,
1033
+ ...(data && data.mp4 ? { url_v2: data.mp4 } : {})
1034
  },
1035
  audio: {
1036
  ...audio,
1037
+ ...(data && data.mp3 ? { url_v2: data.mp3 } : {})
1038
  },
1039
+ any
1040
  };
1041
 
1042
  return res.json(response);