Spaces:
Paused
Paused
import got from 'got'; | |
import * as cheerio from 'cheerio'; | |
import { TiktokDlArgsSchema, TiktokDlSchema } from '../types/tiktok-v1.js'; | |
import { DEFAULT_HEADERS } from '../constant.js'; | |
export async function tiktokdl(url) { | |
TiktokDlArgsSchema.parse(arguments); | |
const html = await got.post('https://ttsave.app/download', { | |
headers: { | |
...DEFAULT_HEADERS, | |
origin: 'https://ttsave.app' | |
}, | |
json: { | |
language_id: '1', | |
query: url | |
} | |
}).text(); | |
const $ = cheerio.load(html); | |
const $div = $('div.flex'); | |
const nickname = $div.find('h2').text()?.trim() || null; | |
const username = $div.find('a.font-extrabold').text()?.trim() || null; | |
const avatar = $div.find('a > img').attr('src') || null; | |
const description = $div.find('p').text()?.trim() || null; | |
const $span = $div.find('div.flex > div.flex > span'); | |
const played = $span.eq(0).text()?.trim() || null; | |
const commented = $span.eq(1).text()?.trim() || null; | |
const saved = $span.eq(2).text()?.trim() || null; | |
const shared = $span.eq(3).text()?.trim() || null; | |
const song = $div.find('div.flex > span').eq(4).text()?.trim() || null; | |
const $a = $('#button-download-ready > a'); | |
const noWatermark = $a.eq(0).attr('href') || null; | |
const withWatermark = $a.eq(1).attr('href') || null; | |
const audio = $a.eq(2).attr('href') || null; | |
const thumbnail = $a.eq(3).attr('href') || null; // Fixed index | |
const result = { | |
nickname, | |
username, | |
avatar, | |
description, | |
thumbnail, | |
played, | |
commented, | |
saved, | |
shared, | |
song, | |
video: { | |
noWatermark, | |
withWatermark | |
}, | |
audio | |
}; | |
return TiktokDlSchema.parse(result); | |
} |