UNPKG

rsshub

Version:
104 lines (103 loc) 3.96 kB
import { t as rofetch } from "./ofetch-eUBdfMpp.mjs"; import { t as config } from "./config-Bpyy15zS.mjs"; import { t as parseDate } from "./parse-date-CjhZE69i.mjs"; import { n as generateHeaders, t as PRESETS } from "./header-generator-DACPoxdp.mjs"; import { t as cache_default } from "./cache-CiDoUSLo.mjs"; import { t as NotFoundError } from "./not-found-BvVU2U31.mjs"; import { t as RejectError } from "./reject-RVevp-dP.mjs"; import { t as generate_a_bogus } from "./a-bogus-D0p0vfqd.mjs"; import { jsx } from "hono/jsx/jsx-runtime"; import { renderToString } from "hono/jsx/dom/server"; //#region lib/routes/toutiao/user.tsx const renderVideo = (url, poster) => renderToString(/* @__PURE__ */ jsx("video", { controls: true, preload: "metadata", poster, children: /* @__PURE__ */ jsx("source", { src: url, type: "video/mp4" }) })); const route = { path: "/user/token/:token", categories: ["new-media"], example: "/toutiao/user/token/MS4wLjABAAAApOspM7AnWqplD9FIBGnhJRfUjFT_msD1KZMfNPBZa-c", parameters: { token: "用户 token,可在用户主页 URL 找到" }, features: { antiCrawler: true }, radar: [{ source: ["www.toutiao.com/c/user/token/:token"] }], name: "头条主页", maintainers: ["TonyRL"], handler }; async function handler(ctx) { const { token } = ctx.req.param(); const feed = await cache_default.tryGet(`toutiao:user:${token}`, async () => { const query = `category=profile_all&token=${token}&max_behot_time=0&entrance_gid&aid=24&app_name=toutiao_web`; const userAgent = generateHeaders(PRESETS.MODERN_WINDOWS_CHROME)["user-agent"]; return (await rofetch(`https://www.toutiao.com/api/pc/list/feed?${query}&a_bogus=${generate_a_bogus(query, userAgent)}`, { headerGeneratorOptions: PRESETS.MODERN_WINDOWS_CHROME })).data; }, config.cache.routeExpire, false); if (!feed) throw new RejectError("无法获取用户信息"); if (feed.length === 0) throw new NotFoundError("暂未发表作品"); const items = feed.map((item) => { switch (item.cell_type) { case 0: case 49: { const video = item.video.play_addr_list.toSorted((a, b) => b.bitrate - a.bitrate)[0]; const user = item.user; return { title: item.title, description: renderVideo(item.video.play_addr_list.toSorted((a, b) => b.bitrate - a.bitrate)[0].play_url_list[0], item.video.origin_cover.url_list[0]), link: `https://www.toutiao.com/video/${item.id}/`, pubDate: parseDate(item.publish_time, "X"), author: user?.info.name ?? item.source, enclosure_url: video?.play_url_list[0], enclosure_type: video?.play_url_list[0] ? "video/mp4" : void 0, user: { name: user?.info.name, avatar: user?.info.avatar_url, description: user?.info.desc } }; } case 32: { const enclosure = item.large_image_list?.pop(); const user = item.user; return { title: item.content?.split("\n", 1)[0], description: item.rich_content, link: `https://www.toutiao.com/w/${item.id}/`, pubDate: parseDate(item.publish_time, "X"), author: user?.name, enclosure_url: enclosure?.url, enclosure_type: enclosure?.url ? `image/${new URL(enclosure.url).pathname.split(".").pop()}` : void 0, user: { name: user?.name, avatar: user?.avatar_url, description: user?.desc } }; } default: return { title: item.title, description: item.abstract, link: `https://www.toutiao.com/article/${item.id}/`, pubDate: parseDate(item.publish_time, "X"), author: item.user_info?.name, user: { name: item.user_info?.name, avatar: item.user_info?.avatar_url, description: item.user_info?.description } }; } }); return { title: `${items[0].user.name}的头条主页 - 今日头条(www.toutiao.com)`, description: items[0].user.description, link: `https://www.toutiao.com/c/user/token/${token}/`, image: items[0].user.avatar, item: items }; } //#endregion export { route };