y2dl.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import {stat} from 'fs';
  2. import fetch from 'node-fetch';
  3. const sleep = async (ms) => new Promise((resolve) => setTimeout(resolve, ms));
  4. const bestFormat = (url, type) => new Promise(async (resolve, reject) => {
  5. const at = await fetch('https://srvcdn8.2convert.me/api/json?url=' + url, {
  6. method: 'GET',
  7. headers: {
  8. 'origin': 'https://en1.y2mate.is',
  9. 'referer': 'https://en1.y2mate.is/',
  10. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 OPR/99.0.0.0',
  11. },
  12. });
  13. const json = await at.json();
  14. if (json.error == true) reject(false);
  15. const formats = json.formats;
  16. if (type == 'audio') {
  17. const formatau = formats.audio;
  18. let format = formatau.find((format) => format.quality == 192);
  19. if (!format) format = formatau.find((format) => format.quality == 128);
  20. if (!format) format = formatau.find((format) => format.quality == 64);
  21. if (!format) format = formatau.find((format) => format.quality == 48);
  22. if (!format) return reject(false);
  23. return resolve(format);
  24. }
  25. if (type == 'video') {
  26. if (formats.video.length == 0) return reject(false);
  27. const format = formats.video[formats.video.length - 1];
  28. return resolve(format);
  29. }
  30. });
  31. const getUrlDl = (url) => new Promise(async (resolve, reject) => {
  32. const taskid = await fetch('https://srvcdn8.2convert.me/api/json', {
  33. method: 'POST',
  34. headers: {
  35. 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
  36. 'origin': 'https://en1.y2mate.is',
  37. 'referer': 'https://en1.y2mate.is/',
  38. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 OPR/99.0.0.0',
  39. },
  40. body: 'hash=' + encodeURIComponent(url),
  41. });
  42. const json = await taskid.json();
  43. if (json.error) return reject(false);
  44. // nsole.log(taskid)
  45. /* ask for status every 1 second */
  46. let status = false;
  47. while (status == false) {
  48. await sleep(1000);
  49. const statusid = await fetch('https://srvcdn8.2convert.me/api/json/task', {
  50. method: 'POST',
  51. headers: {
  52. 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
  53. 'origin': 'https://en1.y2mate.is',
  54. 'referer': 'https://en1.y2mate.is/',
  55. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 OPR/99.0.0.0',
  56. },
  57. body: 'taskId=' + json.taskId,
  58. });
  59. const json2 = await statusid.json();
  60. if (json2.error) return reject(false);
  61. if (json2.status == 'finished') {
  62. status = true;
  63. resolve(json2);
  64. break;
  65. }
  66. if (json2.status == 'error') return reject(false);
  67. }
  68. });
  69. export {
  70. bestFormat,
  71. getUrlDl,
  72. };