import express from "express"; import cors from "cors"; import ytdl from "ytdl-core"; const app = express(); app.use(cors()); // Homepage app.get("/", (req, res) => { res.send("YT Downloader API (MP3 & MP4) — by Muhammad Farel"); }); // MP4 Downloader app.get("/mp4", async (req, res) => { try { const url = req.query.url; if (!url) return res.json({ error: "Masukkan parameter ?url=" }); if (!ytdl.validateURL(url)) return res.json({ error: "URL YouTube tidak valid" }); const info = await ytdl.getInfo(url); const format = ytdl.chooseFormat(info.formats, { quality: "highestvideo" }); res.json({ type: "mp4", title: info.videoDetails.title, thumbnail: info.videoDetails.thumbnails.pop().url, download: format.url }); } catch (err) { res.json({ error: "Gagal mengambil link", detail: err.message }); } }); // MP3 Downloader (audio-only) app.get("/mp3", async (req, res) => { try { const url = req.query.url; if (!url) return res.json({ error: "Masukkan parameter ?url=" }); if (!ytdl.validateURL(url)) return res.json({ error: "URL YouTube tidak valid" }); const info = await ytdl.getInfo(url); const audio = ytdl.chooseFormat(info.formats, { filter: "audioonly", quality: "highestaudio" }); res.json({ type: "mp3", title: info.videoDetails.title, thumbnail: info.videoDetails.thumbnails.pop().url, download: audio.url }); } catch (err) { res.json({ error: "Gagal mengambil link", detail: err.message }); } }); const PORT = 7860; app.listen(PORT, () => console.log("Server berjalan di port " + PORT));