tiktok / server.js
FarelDeveloper's picture
Update server.js
b578104 verified
Raw
History Blame Contribute Delete
1.63 kB
import express from "express";
import axios from "axios";
import * as cheerio from "cheerio";
import cors from "cors";
const app = express();
app.use(cors());
app.get("/", (req, res) => {
res.json({
status: "TikTok Standalone API by Muhammad Farel",
usage: "/api?url=LINK_TIKTOK"
});
});
app.get("/api", async (req, res) => {
const url = req.query.url;
if (!url) return res.json({ error: "Masukkan parameter ?url=" });
try {
const html = await axios.get(url, {
headers: { "User-Agent": "Mozilla/5.0" }
});
const $ = cheerio.load(html.data);
const raw = $("#SIGI_STATE").html();
if (!raw) return res.json({ error: "Gagal membaca SIGI_STATE" });
const data = JSON.parse(raw);
const videoId = Object.keys(data.ItemModule)[0];
const item = data.ItemModule[videoId];
if (!item) return res.json({ error: "Video tidak ditemukan" });
const withWM = item.video.downloadAddr;
const noWM = item.video.downloadAddr.replace("watermark=1", "watermark=0");
const music = item.music.playUrl;
res.json({
status: "success",
author: item.author,
username: item.author,
title: item.desc,
cover: item.cover,
duration: item.video.duration,
resolution: `${item.video.height}x${item.video.width}`,
video: {
no_watermark: noWM,
watermark: withWM
},
audio: music,
raw: item
});
} catch (err) {
res.json({
error: "Terjadi kesalahan saat scrape",
detail: err.message
});
}
});
const PORT = 7860;
app.listen(PORT, () => console.log("API berjalan di port", PORT));