From 8bf78f53166895345878c5fb24ef041f4675ae8f Mon Sep 17 00:00:00 2001 From: Hualiang <78242797+hualiong@users.noreply.github.com> Date: Sun, 8 Mar 2026 15:53:10 +0800 Subject: [PATCH] feat(route): add news.qq.com user homepage route (#21280) * add user.ts * remove async * use relative path * update * fix timestamp * use parseDate * try to fix import-sort? --- lib/routes/qq/kg/reply.ts | 2 +- lib/routes/qq/kg/user.ts | 2 +- lib/routes/qq/news/user.ts | 86 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 lib/routes/qq/news/user.ts diff --git a/lib/routes/qq/kg/reply.ts b/lib/routes/qq/kg/reply.ts index 70dd6ea39c..91fdcedd88 100644 --- a/lib/routes/qq/kg/reply.ts +++ b/lib/routes/qq/kg/reply.ts @@ -16,7 +16,7 @@ export const route: Route = { supportPodcast: false, supportScihub: false, }, - name: '用户作品评论动态', + name: '全民K歌 - 用户作品评论动态', maintainers: ['zhangxiang012'], handler, }; diff --git a/lib/routes/qq/kg/user.ts b/lib/routes/qq/kg/user.ts index e42812c210..44c7ec22a9 100644 --- a/lib/routes/qq/kg/user.ts +++ b/lib/routes/qq/kg/user.ts @@ -19,7 +19,7 @@ export const route: Route = { supportPodcast: true, supportScihub: false, }, - name: '用户作品列表', + name: '全民K歌 - 用户作品列表', maintainers: ['zhangxiang012'], handler, }; diff --git a/lib/routes/qq/news/user.ts b/lib/routes/qq/news/user.ts new file mode 100644 index 0000000000..2dbb2d7bdd --- /dev/null +++ b/lib/routes/qq/news/user.ts @@ -0,0 +1,86 @@ +import { load } from "cheerio"; + +import type { DataItem, Route } from "@/types"; +import cache from "@/utils/cache"; +import ofetch from "@/utils/ofetch"; +import { parseDate } from "@/utils/parse-date"; + +interface NewsItem { + id: string; + uinnick: string; + articletype: string; + longtitle: string; + url: string; + timestamp: number; + abstract: string; + miniProShareImage: string; +} + +export const route: Route = { + path: "/news/:uid/:detail?", + categories: ["social-media"], + example: "/qq/news/8QMZ2X5a5YUeujw=", + parameters: { + uid: "用户 ID, 用户主页 URL 中的最后一段部分", + detail: "是否抓取全文,该值只要不为空就抓取全文返回,否则只返回摘要", + }, + features: { + requireConfig: false, + requirePuppeteer: false, + antiCrawler: false, + supportBT: false, + supportPodcast: true, + supportScihub: false, + }, + radar: [ + { + source: ["news.qq.com/omn/author/:uid"], + target: "/qq/news/:uid", + }, + ], + name: "用户主页列表", + maintainers: ["hualiong"], + handler, +}; + +async function handler(ctx) { + const { uid, detail } = ctx.req.param(); + const url = `https://i.news.qq.com/getSubNewsMixedList?guestSuid=${uid}&tabId=om_index`; + const response = await ofetch<{ ret: number; newslist: NewsItem[] }>(url); + + let news = response.newslist.map((item) => ({ + title: item.longtitle, + description: `
${item.abstract}
${item.abstract}