新增页码选择

This commit is contained in:
2026-07-21 00:54:20 +08:00
parent 3eef54496c
commit 0f03ad9801
7 changed files with 178 additions and 12 deletions
+10 -2
View File
@@ -8,6 +8,7 @@ import config from '../config';
import { DomainNotFoundError, statusToHTML, UserNotFoundError, WeiboCookieInvalidError } from './weibo/weibo';
import { ThrottledError } from './throttler';
import { logger } from './logger';
import { PageInvalidError, parsePageSpec } from './page';
export class UidInvalidError extends Error {
constructor(uid: string) {
@@ -32,10 +33,12 @@ export const registerRoutes = (
throw new UidInvalidError(uid);
}
const pageSpec = parsePageSpec(ctx.query.page);
// get data
let cacheMiss = false;
const xmlData = await ctx.cache.memo(async () => {
const weiboData = await ctx.weibo.fetchUserLatestWeibo(uid);
const weiboData = await ctx.weibo.fetchUserLatestWeibo(uid, pageSpec.pages);
if (weiboData) {
// basic info
const feed = new NodeRSS({
@@ -59,7 +62,7 @@ export const registerRoutes = (
cacheMiss = true;
return feed.xml();
}
}, `xml-${uid}`, config.cacheTTL.rssXml);
}, `xml-${uid}-page-${pageSpec.key}`, config.cacheTTL.rssXml);
// send data
ctx.set('Content-Type', 'text/xml');
@@ -78,6 +81,11 @@ export const registerRoutes = (
ctx.body = `找不到用户,可能用户仅登录可见,不支持订阅。可以通过打开 https://m.weibo.cn/u/:uid 验证(<a href="https://m.weibo.cn/u/${uid}" target="_blank">uid: ${uid}</a>`;
return;
}
if (error instanceof PageInvalidError) {
ctx.status = 400;
ctx.body = `page 参数格式有误。支持单页如 7,范围如 1-10,或列表如 1,3,5。page: ${error.message.replace(/^page:\s*/, '')}`;
return;
}
if (error instanceof WeiboCookieInvalidError) {
ctx.status = 401;
ctx.body = `微博 Cookie 可能已过期或失效,请更新 WEIBO_COOKIE 后重试。uid: ${uid}`;