Spaces:
Paused
Paused
| 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)); |