From 1d0734aab84889dc5363a85f24c9d3388b85a149 Mon Sep 17 00:00:00 2001 From: alexsantee Date: Wed, 6 May 2026 14:23:39 -0300 Subject: [PATCH 1/2] add date format to transform routes --- lib/routes/rsshub/transform/html.ts | 5 ++++- lib/routes/rsshub/transform/json.ts | 9 ++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/routes/rsshub/transform/html.ts b/lib/routes/rsshub/transform/html.ts index d712cf1bff32..f11e427627be 100644 --- a/lib/routes/rsshub/transform/html.ts +++ b/lib/routes/rsshub/transform/html.ts @@ -6,6 +6,7 @@ import ConfigNotFoundError from '@/errors/types/config-not-found'; import type { DataItem, Route } from '@/types'; import cache from '@/utils/cache'; import got from '@/utils/got'; +import { parseDate } from '@/utils/parse-date'; export const route: Route = { path: '/transform/html/:url/:routeParams', @@ -43,6 +44,7 @@ Specify options (in the format of query string) in parameter \`routeParams\` par | \`itemDescAttr\` | The attributes of \`descrption\` element as description | \`string\` | Element html | | \`itemPubDate\` | The HTML elements as \`pubDate\` in \`item\` using CSS selector | \`string\` | \`item\` element | | \`itemPubDateAttr\` | The attributes of \`pubDate\` element as pubDate | \`string\` | Element html | +| \`itemPubDateFmt\` | Date format string for \`day.js\` | \`string\` | | | \`itemContent\` | The HTML elements as \`description\` in \`item\` using CSS selector ( in \`itemLink\` page for full content ) | \`string\` | | | \`encoding\` | The encoding of the HTML content | \`string\` | utf-8 | @@ -103,7 +105,8 @@ Specify options (in the format of query string) in parameter \`routeParams\` par const desc = routeParams.get('itemDescAttr') ? descEle.attr(routeParams.get('itemDescAttr')) : descEle.html(); const pubDateEle = routeParams.get('itemPubDate') ? item.find(routeParams.get('itemPubDate')) : item; - const pubDate = routeParams.get('itemPubDateAttr') ? pubDateEle.attr(routeParams.get('itemPubDateAttr')) : pubDateEle.html(); + const pubDateRaw = routeParams.get('itemPubDateAttr') ? pubDateEle.attr(routeParams.get('itemPubDateAttr')) : pubDateEle.html(); + const pubDate = routeParams.get('itemPubDateFmt') ? parseDate(pubDateRaw, routeParams.get('itemPubDateFmt')) : pubDateRaw; return { title, diff --git a/lib/routes/rsshub/transform/json.ts b/lib/routes/rsshub/transform/json.ts index 9d0823d91ac7..6175cc056e58 100644 --- a/lib/routes/rsshub/transform/json.ts +++ b/lib/routes/rsshub/transform/json.ts @@ -4,6 +4,7 @@ import { config } from '@/config'; import ConfigNotFoundError from '@/errors/types/config-not-found'; import type { Route } from '@/types'; import got from '@/utils/got'; +import { parseDate } from '@/utils/parse-date'; function jsonGet(obj, attr) { if (typeof attr !== 'string') { @@ -49,6 +50,8 @@ export const route: Route = { | \`itemLinkPrefix\` | Optional Prefix for \`itemLink\` value | \`string\` | None | | \`itemDesc\` | The JSON Path as \`description\` in \`item\` | \`string\` | None | | \`itemPubDate\` | The JSON Path as \`pubDate\` in \`item\` | \`string\` | None | +| \`itemPubDateFmt\` | Date format string for \`day.js\` | \`string\` | None | + ::: tip JSON Path only supports format like \`a.b.c\`. if you need to access arrays, like \`a[0].b\`, you can write it as \`a.0.b\`. @@ -103,11 +106,15 @@ async function handler(ctx) { if (link && !link.startsWith('http')) { link = `${new URL(url).origin}${link}`; } + + const pubDateRaw = routeParams.get('itemPubDate') ? jsonGet(item, routeParams.get('itemPubDate')) : ''; + const pubDate = routeParams.get('itemPubDateFmt') ? parseDate(pubDateRaw, routeParams.get('itemPubDateFmt')) : pubDateRaw; + return { title: jsonGet(item, routeParams.get('itemTitle')), link, description: routeParams.get('itemDesc') ? jsonGet(item, routeParams.get('itemDesc')) : '', - pubDate: routeParams.get('itemPubDate') ? jsonGet(item, routeParams.get('itemPubDate')) : '', + pubDate, }; }); From 6f7104e12ed44311a5d33418054e6792110ca18c Mon Sep 17 00:00:00 2001 From: alexsantee Date: Thu, 7 May 2026 08:46:32 -0300 Subject: [PATCH 2/2] implementation of recommended fixes --- lib/routes/rsshub/transform/html.ts | 2 +- lib/routes/rsshub/transform/json.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/routes/rsshub/transform/html.ts b/lib/routes/rsshub/transform/html.ts index f11e427627be..6b8697fca2c5 100644 --- a/lib/routes/rsshub/transform/html.ts +++ b/lib/routes/rsshub/transform/html.ts @@ -139,7 +139,7 @@ Specify options (in the format of query string) in parameter \`routeParams\` par } const $ = load(decoder.decode(response.data)); - const content = $(itemContentSelector).html(); + const content = $(itemContentSelector).text(); if (!content) { return item; } diff --git a/lib/routes/rsshub/transform/json.ts b/lib/routes/rsshub/transform/json.ts index 6175cc056e58..d4a6688db18e 100644 --- a/lib/routes/rsshub/transform/json.ts +++ b/lib/routes/rsshub/transform/json.ts @@ -108,7 +108,7 @@ async function handler(ctx) { } const pubDateRaw = routeParams.get('itemPubDate') ? jsonGet(item, routeParams.get('itemPubDate')) : ''; - const pubDate = routeParams.get('itemPubDateFmt') ? parseDate(pubDateRaw, routeParams.get('itemPubDateFmt')) : pubDateRaw; + const pubDate = pubDateRaw && routeParams.get('itemPubDateFmt') ? parseDate(pubDateRaw, routeParams.get('itemPubDateFmt')) : pubDateRaw; return { title: jsonGet(item, routeParams.get('itemTitle')),