UNPKG

rsshub

Version:
82 lines (80 loc) 2.77 kB
import { n as init_esm_shims, t as __dirname } from "./esm-shims-CzJ_djXG.mjs"; import { t as config } from "./config-C37vj7VH.mjs"; import "./logger-Czu8UMNd.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import { t as art } from "./render-BQo6B4tL.mjs"; import "./proxy-Db7uGcYb.mjs"; import { n as puppeteer_default } from "./puppeteer-DGmvuGvT.mjs"; import { n as queryToBoolean } from "./readable-social-DoIL4WB3.mjs"; import path from "node:path"; //#region lib/routes/tiktok/user.ts init_esm_shims(); const baseUrl = "https://www.tiktok.com"; const route = { path: "/user/:user/:iframe?", categories: ["social-media"], example: "/tiktok/user/@linustech/true", parameters: { user: "User ID, including @", iframe: "Use the official iframe to embed the video, which allows you to view the video if the default option does not work. Default to `false`" }, features: { requireConfig: false, requirePuppeteer: true, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["tiktok.com/:user"], target: "/user/:user" }], name: "User", maintainers: ["TonyRL"], handler }; async function handler(ctx) { const { user, iframe } = ctx.req.param(); const useIframe = queryToBoolean(iframe); const data = await cache_default.tryGet(`tiktok:user:${user}`, async () => { const browser = await puppeteer_default(); const page = await browser.newPage(); await page.setRequestInterception(true); page.on("request", (request) => { request.resourceType() === "document" || request.resourceType() === "script" ? request.continue() : request.abort(); }); await page.goto(`${baseUrl}/${user}`, { waitUntil: "networkidle0" }); const SIGI_STATE = await page.evaluate(() => window.SIGI_STATE); await browser.close(); return { lang: SIGI_STATE.AppContext.lang, SharingMetaState: SIGI_STATE.SharingMetaState, ItemModule: SIGI_STATE.ItemModule }; }, config.cache.routeExpire, false); const items = Object.values(data.ItemModule).map((item) => ({ title: item.desc, description: art(path.join(__dirname, "templates/user-3df0b995.art"), { poster: item.video.cover, source: item.video.playAddr, useIframe, id: item.id }), author: item.nickname, pubDate: parseDate(item.createTime, "X"), link: `${baseUrl}/@${item.author}/video/${item.id}`, category: item.textExtra.map((t) => `#${t.hashtagName}`) })); return { title: data.SharingMetaState.value["og:title"], description: data.SharingMetaState.value["og:description"], image: data.SharingMetaState.value["og:image"], link: `${baseUrl}/${user}`, item: items, language: data.lang }; } //#endregion export { route };