Update index.js
Browse files
index.js
CHANGED
|
@@ -104,6 +104,39 @@ throw new Error('Error: only audio/video files are supported');
|
|
| 104 |
}
|
| 105 |
}
|
| 106 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
// MEDIAFIRE DL
|
| 108 |
async function mediafire(url) {
|
| 109 |
return new Promise(async (resolve, reject) => {
|
|
@@ -985,6 +1018,7 @@ return res.json({ message: e.message });
|
|
| 985 |
|
| 986 |
let video = await ytmp4(url);
|
| 987 |
let audio = await ytmp3(url);
|
|
|
|
| 988 |
let data;
|
| 989 |
|
| 990 |
try {
|
|
@@ -1001,7 +1035,8 @@ return res.json({ message: e.message });
|
|
| 1001 |
audio: {
|
| 1002 |
...audio,
|
| 1003 |
...(data && data.mp3 ? { url_v2: data.mp3 } : {})
|
| 1004 |
-
}
|
|
|
|
| 1005 |
};
|
| 1006 |
|
| 1007 |
return res.json(response);
|
|
|
|
| 104 |
}
|
| 105 |
}
|
| 106 |
|
| 107 |
+
async function ytdlhamster(url) {
|
| 108 |
+
try {
|
| 109 |
+
// Melakukan permintaan GET menggunakan axios
|
| 110 |
+
const response = await axios.get(`https://ytdl.hamsterlabs.de/?url=${encodeURIComponent(url)}`);
|
| 111 |
+
const data = response.data;
|
| 112 |
+
|
| 113 |
+
// Menggunakan cheerio untuk mem-parsing HTML
|
| 114 |
+
const $ = cheerio.load(data);
|
| 115 |
+
const downloadLinks = [];
|
| 116 |
+
|
| 117 |
+
// Memproses setiap baris tabel kecuali header
|
| 118 |
+
$('.formats tr').each((i, elem) => {
|
| 119 |
+
if (i === 0) return; // Skip the header row
|
| 120 |
+
|
| 121 |
+
// Mengambil informasi dari setiap kolom dalam baris
|
| 122 |
+
const format = $(elem).find('td:nth-child(1) .format').text().trim();
|
| 123 |
+
const quality = $(elem).find('td:nth-child(2)').text().trim();
|
| 124 |
+
const bitrate = $(elem).find('td:nth-child(3)').text().trim();
|
| 125 |
+
const container = $(elem).find('td:nth-child(4)').text().trim();
|
| 126 |
+
const codecs = $(elem).find('td:nth-child(5)').text().trim();
|
| 127 |
+
const downloadUrl = $(elem).find('td:nth-child(6) a').attr('href');
|
| 128 |
+
|
| 129 |
+
// Menambahkan link unduhan ke daftar
|
| 130 |
+
downloadLinks.push({ format, quality, bitrate, container, codecs, url: downloadUrl });
|
| 131 |
+
});
|
| 132 |
+
|
| 133 |
+
return downloadLinks;
|
| 134 |
+
} catch (error) {
|
| 135 |
+
console.error('Error fetching data:', error);
|
| 136 |
+
throw error;
|
| 137 |
+
}
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
// MEDIAFIRE DL
|
| 141 |
async function mediafire(url) {
|
| 142 |
return new Promise(async (resolve, reject) => {
|
|
|
|
| 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 {
|
|
|
|
| 1035 |
audio: {
|
| 1036 |
...audio,
|
| 1037 |
...(data && data.mp3 ? { url_v2: data.mp3 } : {})
|
| 1038 |
+
},
|
| 1039 |
+
any
|
| 1040 |
};
|
| 1041 |
|
| 1042 |
return res.json(response);
|