OhMyDitzzy
Feat: add project
6d9f36a
import axios from "axios";
import { sendSuccess, ErrorResponses } from "../../lib/response-helper.js";
/** @type {import("../../types/plugin").ApiPluginHandler} */
const handler = {
name: "TikTok Downloader",
description: "Download videos or slide photos from TikTok URLs. Supports both standard and HD quality downloads.",
version: "1.0.0",
method: "GET",
category: ["downloader"],
alias: ["tiktok", "tt"],
tags: ["social-media", "video", "downloader"],
parameters: {
query: [
{
name: "url",
type: "string",
required: true,
description: "TikTok video URL to download",
example: "https://www.tiktok.com/@username/video/1234567890",
pattern: "^https?:\\/\\/(www\\.|vm\\.)?tiktok\\.com\\/.+$"
}
],
body: [],
headers: []
},
responses: {
200: {
status: 200,
description: "Successfully retrieved TikTok video data",
example: {
status: 200,
author: "Ditzzy",
note: "Thank you for using this API!",
results: {
id: "1234567890",
title: "Video Title",
author: {
nickname: "Username",
unique_id: "username"
},
play: "https://video-url.com/video.mp4",
wmplay: "https://video-url.com/video-watermark.mp4",
hdplay: "https://video-url.com/video-hd.mp4",
music: "https://music-url.com/audio.mp3",
duration: 15,
create_time: 1234567890
}
}
},
400: {
status: 400,
description: "Invalid TikTok URL provided",
example: {
status: 400,
message: "Invalid URL - must be a valid TikTok URL"
}
},
404: {
status: 404,
description: "Missing required parameter",
example: {
status: 404,
message: "Missing required parameter: url"
}
},
500: {
status: 500,
description: "Server error or TikTok API unavailable",
example: {
status: 500,
message: "An error occurred, please try again later."
}
}
},
exec: async (req, res) => {
const { url } = req.query;
if (!url) {
return ErrorResponses.missingParameter(res, "url");
}
if (!url.match(/tiktok/gi)) {
return ErrorResponses.invalidUrl(res, "Invalid URL - must be a valid TikTok URL");
}
try {
const videoData = await fetchTikTokVideo(url);
return sendSuccess(res, videoData);
} catch (error) {
console.error("TikTok download error:", error);
return ErrorResponses.serverError(res);
}
}
};
export default handler;
async function fetchTikTokVideo(url) {
const encodedParams = new URLSearchParams();
encodedParams.set("url", url);
encodedParams.set("hd", "1");
const response = await axios({
method: "POST",
url: "https://tikwm.com/api/",
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": "current_language=en",
"User-Agent": "Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Mobile Safari/537.36"
},
data: encodedParams
});
if (!response.data || !response.data.data) {
throw new Error("Invalid response from TikTok API");
}
return response.data.data;
}