File size: 1,830 Bytes
447b34c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
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);
} |