UNPKG

@tobyg74/tiktok-api-dl

Version:

Scraper for downloading media in the form of videos, images and audio from Tiktok. Also for stalking Tiktok Users

77 lines (76 loc) 3.25 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TiktokService = void 0; const jsdom_1 = require("jsdom"); const params_1 = require("../constants/params"); const xbogus_1 = __importDefault(require("../../helper/xbogus")); const headers_1 = require("../constants/headers"); const fs_1 = __importDefault(require("fs")); const crypto_1 = require("crypto"); class TiktokService { constructor() { this.signaturejs = fs_1.default.readFileSync("./helper/signature.js", "utf-8"); this.webmssdk = fs_1.default.readFileSync("./helper/webmssdk.js", "utf-8"); this.resourceLoader = new jsdom_1.ResourceLoader({ userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.35" }); } generateSignature(url) { const stringUrl = url.toString(); const jsdomOptions = this.getJsdomOptions(); const { window } = new jsdom_1.JSDOM(``, jsdomOptions); let _window = window; _window.eval(this.signaturejs.toString()); _window.byted_acrawler.init({ aid: 24, dfp: true }); _window.eval(this.webmssdk); const signature = _window.byted_acrawler.sign({ url: stringUrl }); return signature; } generateXBogus(url, signature) { const jsdomOptions = this.getJsdomOptions(); const { window } = new jsdom_1.JSDOM(``, jsdomOptions); let _window = window; _window.eval(this.signaturejs.toString()); _window.byted_acrawler.init({ aid: 24, dfp: true }); _window.eval(this.webmssdk); if (signature) { url.searchParams.append("_signature", signature); } const xbogus = _window._0x32d649(url.searchParams.toString()); return xbogus; } generateXTTParams(params) { const cipher = (0, crypto_1.createCipheriv)("aes-128-cbc", TiktokService.AES_KEY, TiktokService.AES_IV); return Buffer.concat([cipher.update(params), cipher.final()]).toString("base64"); } generateURLXbogus(username, page) { const baseUrl = `${TiktokService.BASE_URL}api/search/user/full/?`; const queryParams = (0, params_1._userSearchParams)(username, page); const xbogusParams = (0, xbogus_1.default)(`${baseUrl}${queryParams}`, headers_1.userAgent); return `${baseUrl}${(0, params_1._userSearchParams)(username, page, xbogusParams)}`; } getJsdomOptions() { return { url: TiktokService.BASE_URL, referrer: TiktokService.BASE_URL, contentType: "text/html", includeNodeLocations: false, runScripts: "outside-only", pretendToBeVisual: true, resources: new jsdom_1.ResourceLoader({ userAgent: headers_1.webUserAgent }) }; } } exports.TiktokService = TiktokService; TiktokService.BASE_URL = "https://www.tiktok.com/"; TiktokService.AES_KEY = "webapp1.0+202106"; TiktokService.AES_IV = "webapp1.0+202106";