UNPKG

rsshub

Version:
84 lines (80 loc) 2.95 kB
import "./esm-shims-CzJ_djXG.mjs"; import "./config-C37vj7VH.mjs"; import { t as ViewType } from "./types-D84BRIt4.mjs"; import "./dist-BInvbO1W.mjs"; import "./logger-Czu8UMNd.mjs"; import "./ofetch-BIyrKU3Y.mjs"; import { t as parseDate } from "./parse-date-BrP7mxXf.mjs"; import { t as cache_default } from "./cache-Bo__VnGm.mjs"; import "./helpers-DxBp0Pty.mjs"; import "./render-BQo6B4tL.mjs"; import { t as got_default } from "./got-KxxWdaxq.mjs"; import { t as invalid_parameter_default } from "./invalid-parameter-rr4AgGpp.mjs"; import { t as isValidHost } from "./valid-host-C-u5eW3j.mjs"; import { n as extractWork, t as extractArticle } from "./utils-CLfIncli.mjs"; import { load } from "cheerio"; //#region lib/routes/zcool/user.ts const route = { path: "/user/:uid", categories: ["design"], view: ViewType.Pictures, example: "/zcool/user/baiyong", parameters: { uid: "个性域名前缀或者用户ID" }, features: { requireConfig: false, requirePuppeteer: false, antiCrawler: false, supportBT: false, supportPodcast: false, supportScihub: false }, radar: [{ source: ["www.zcool.com.cn/u/:id"], target: "/user/:id" }], name: "用户作品", description: ` 例如: 站酷的个人主页 \`https://baiyong.zcool.com.cn\` 对应 rss 路径 \`/zcool/user/baiyong\` 站酷的个人主页 \`https://www.zcool.com.cn/u/568339\` 对应 rss 路径 \`/zcool/user/568339\``, maintainers: ["junbaor"], handler }; async function handler(ctx) { const uid = ctx.req.param("uid"); let pageUrl = `https://www.zcool.com.cn/u/${uid}`; if (Number.isNaN(uid)) { if (!isValidHost(uid)) throw new invalid_parameter_default("Invalid uid"); pageUrl = `https://${uid}.zcool.com.cn`; } const { data: response } = await got_default(pageUrl); const $ = load(response); const data = JSON.parse($("script#__NEXT_DATA__").text()); const workList = data.props.pageProps.workList.map((item) => ({ title: item.title, link: item.pageUrl, pubDate: parseDate(item.publishTime, "x"), category: [ item.objectTypeStr, item.cateStr, item.subCateStr, ...item.tags ] })); const items = await Promise.all(workList.map((item) => cache_default.tryGet(item.link, async () => { const { data: response$1 } = await got_default(item.link); const $$1 = load(response$1); const data$1 = JSON.parse($$1("script#__NEXT_DATA__").text()); if (item.link.startsWith("https://www.zcool.com.cn/article/")) item.description = extractArticle(data$1); else if (item.link.startsWith("https://www.zcool.com.cn/work/")) item.description = extractWork(data$1); return item; }))); return { title: data.props.pageProps.seo.title, description: data.props.pageProps.seo.description, image: data.props.pageProps.userInfo.avatar.includes("?x-oss-process") ? data.props.pageProps.userInfo.avatar.split("?")[0] : data.props.pageProps.userInfo.avatar, link: pageUrl, item: items }; } //#endregion export { route };