tiktermux
Version:
Scraper for downloading media in the form of videos, images and audio from Tiktok. Also for stalking Tiktok Users
112 lines (111 loc) • 4.45 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getUserFavorites = void 0;
const axios_1 = __importDefault(require("axios"));
const api_1 = require("../../constants/api");
const getProfile_1 = require("./getProfile");
const params_1 = require("../../constants/params");
const https_proxy_agent_1 = require("https-proxy-agent");
const socks_proxy_agent_1 = require("socks-proxy-agent");
const tiktokService_1 = require("../../services/tiktokService");
const getUserFavorites = (username, cookie, proxy, postLimit) => new Promise((resolve) => {
if (!cookie) {
return {
status: "error",
message: "Cookie is required!"
};
}
(0, getProfile_1.StalkUser)(username).then(async (res) => {
if (res.status === "error") {
return resolve({
status: "error",
message: res.message
});
}
const id = res.result.user.uid;
const secUid = res.result.user.secUid;
const data = await parseUserFavorites(id, secUid, cookie, postLimit, proxy);
resolve({
status: "success",
result: data
});
});
});
exports.getUserFavorites = getUserFavorites;
const parseUserFavorites = async (id, secUid, cookie, postLimit, proxy) => {
let hasMore = true;
let cursor = 0;
const favorites = [];
let counter = 0;
while (hasMore) {
let result = null;
result = await requestUserFavorites(id, secUid, cookie, postLimit, proxy);
if (result === "") {
hasMore = false;
break;
}
result?.itemList?.forEach((v) => {
const author = {
id: v.author.id,
username: v.author.uniqueId,
nickname: v.author.nickname,
avatarLarger: v.author.avatarLarger,
avatarThumb: v.author.avatarThumb,
avatarMedium: v.author.avatarMedium,
signature: v.author.signature,
verified: v.author.verified,
openFavorite: v.author.openFavorite,
privateAccount: v.author.privateAccount,
isADVirtual: v.author.isADVirtual,
isEmbedBanned: v.author.isEmbedBanned
};
const stats = {
likeCount: v.authorStats.diggCount,
followerCount: v.authorStats.followerCount,
followingCount: v.authorStats.followingCount,
friendCount: v.authorStats.friendCount,
heartCount: v.authorStats.heartCount,
postsCount: v.authorStats.videoCount
};
favorites.push({
author,
stats
});
});
hasMore = result.hasMore;
cursor = hasMore ? result.cursor : null;
counter++;
if (postLimit && favorites.length >= postLimit) {
hasMore = false;
break;
}
}
return postLimit ? favorites.slice(0, postLimit) : favorites;
};
const requestUserFavorites = async (id, secUid, cookie, postLimit, proxy) => {
const Tiktok = new tiktokService_1.TiktokService();
const url = new URL((0, api_1._tiktokGetUserFavorites)((0, params_1._getUserFavoritesParams)(id, secUid, postLimit)));
const signature = Tiktok.generateSignature(url);
url.searchParams.append("_signature", signature);
const xbogus = Tiktok.generateXBogus(url, signature);
url.searchParams.append("X-Bogus", xbogus);
const xttparams = Tiktok.generateXTTParams(url.searchParams.toString());
const { data } = await axios_1.default.get(`${url.toString()}`, {
headers: {
"user-agent": "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",
cookie,
"x-tt-params": xttparams
},
httpsAgent: (proxy &&
(proxy.startsWith("http") || proxy.startsWith("https")
? new https_proxy_agent_1.HttpsProxyAgent(proxy)
: proxy.startsWith("socks")
? new socks_proxy_agent_1.SocksProxyAgent(proxy)
: undefined)) ||
undefined
});
return data;
};