Commit Graph

8725 Commits

Author SHA1 Message Date
Q16KBreak dd8ee08393
feat(route/nyaa): support fulltext mode (#21888)
* feat(route): support fulltext mode for nyaa

* feat(route): replace parameter name

* feat(route): migrate from query parameters to route paths

* feat(route): use mode=fulltext as trigger and update namespace

* delete fulltext routes
2026-05-12 02:45:14 +08:00
github-actions[bot] 6e12d60764 style: auto format 2026-05-11 16:26:16 +00:00
Shoggomo 5cf0d2b133
feat(route/4chan): add filters for sticky threads and reply count (#21964)
* feat(route/4chan): add filters for sticky threads and reply count

* Revert formatting

* Applied suggestion
2026-05-12 00:25:01 +08:00
lex 898b320644
feat(route): add /humanlayer/blog route (#21565)
* feat(route): add /humanlayer/blog route

Add RSS feed for HumanLayer blog (www.humanlayer.dev/blog), scraping
blog listing and full article content with cheerio.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* refactor(route): use CSS :not() selector instead of JS filter for humanlayer blog

Address PR review feedback: move /blog/tags/ exclusion into the CSS selector
instead of using a separate .filter() call.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(route): extract tags into category field for humanlayer blog

Parse #-prefixed tags from the meta line and populate the category field.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(route): address review feedback for humanlayer blog

- Remove redundant :not() selector (tag links use different class)
- Simplify tag extraction from parts.slice(3).join() to parts[3]
- Fix tag regex to match hyphenated tags like best-practices

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(route): remove custom limit for humanlayer blog, use built-in

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: HAPI <noreply@hapi.run>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: zj1123581321 <zj1123581321@users.noreply.github.com>
2026-05-12 00:03:51 +08:00
Tony e55ade5117
fix(route/github): fix pr url (#21974) 2026-05-11 21:44:59 +08:00
Tony a98de2effd refactor: use arrow function 2026-05-11 02:16:04 +08:00
DIYgod 3b0d76ae20 test(route): move techflowpost test outside routes 2026-05-09 17:24:41 +08:00
DIYgod ff3d9a79be fix(route): update techflowpost routes 2026-05-09 17:16:25 +08:00
kjasn 0b2b8e0e66
feat(route/qwen): replace deprecated qwen blog route with new one (#21944)
* feat: replace deprecated qwen blog route

* fix: replace wrong field and add param desc

* fix: remove unnecessary param

* fix: use import type

* refactor: qwen blog

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* error handling and tidy

* tidy

* fix: remove unnecessary header

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-05-08 21:12:00 +08:00
DIYgod 03fabd9cdf fix: separate quoted tweets in twitter feeds 2026-05-08 11:28:33 +08:00
Tony c2b00f6090 chore: format description in lint-staged 2026-05-08 05:59:53 +08:00
github-actions[bot] a4b9d76776 style: auto format 2026-05-07 21:41:39 +00:00
github-actions[bot] 788c549948 style: auto format 2026-05-07 20:42:08 +00:00
Tony 70cd080406 chore: revive remark formatter
refs: #14040
2026-05-08 04:40:49 +08:00
TehPeGaSuS 78068da475
feat(route): make GitHub pulls title and docs consistent with issues (#21903)
* feat(route): make GitHub pulls title and docs consistent with issues

I'm not really a coder, but I use RSSHub to bridge GitHub updates into IRC for my community. I noticed that the `pulls.ts` route didn't show the "Open/Closed" state in the feed title like the `issues.ts` route does, which was making my users a bit confused!

I tried my best to replicate the logic and metadata structure from `issues.ts` over to `pulls.ts`.

Changes:
- Updated the feed title to dynamically show the state (Open/Closed/All) and any labels.
- Updated the parameter metadata so the documentation looks as clean and organized as the Issues page.

I've tested this locally and it’s working perfectly for my IRC tracker. Hopefully, this helps keep things consistent across the GitHub routes!

Closes #21902

* Fix title formatting in pull request response
2026-05-08 02:26:57 +08:00
E-larex 8b302d70b6
feat(route): add hypergryph/endfield (#21808) 2026-05-07 23:00:14 +08:00
DIYgod c39f1c4e3d fix: update theblockbeats api signing 2026-05-07 21:05:20 +08:00
Tony e7fd3528bf
fix(route/jiemian): remove duplicated image (#21946)
* Revert "style: auto format"

This reverts commit 2b85aba8c4.

* Revert "fix(route/thepaper)(route/jiemian): remove useless image and audio (#21800)"

This reverts commit 37b70b48b6.

* fix(route/jiemian): remove duplicated image

* fix: typo
2026-05-07 20:59:30 +08:00
DIYgod 7b22a41092 fix: update playstation monthly games route 2026-05-07 20:52:51 +08:00
github-actions[bot] 2b85aba8c4 style: auto format 2026-05-07 06:40:54 +00:00
HamadaMasatoshi 37b70b48b6
fix(route/thepaper)(route/jiemian): remove useless image and audio (#21800)
* Comment out media object in rss_item

Comment out media object in rss_item construction

* Disable voiceInfo handling in RSS item

Comment out voiceInfo handling logic in RSS item creation.

* Update description extraction to exclude report view

* Refactor description logic in common.tsx

Refactor description extraction to remove specific images and report view paragraphs.

* Handle missing featured image in description logic

* Improve description extraction in common.tsx

Refactor description extraction logic to handle cases without a featured image more cleanly.
2026-05-07 14:39:54 +08:00
Harvie 51ef0df0c2
feat(route): add 国际能源网 (in-en.com) news route (#21669)
* feat(route): add 国际能源网 (in-en.com) news route

Add RSS route for in-en.com (国际能源网), a major Chinese energy news portal.

Supported channels via /in-en/news/:type:
- solar  — 光伏太阳能
- wind   — 风电
- chuneng — 储能
- h2     — 氢能
- chd    — 充换电
- newenergy — 新能源综合
- power  — 电力
- huanbao — 环保

Features: fetches article list from each subdomain's news page,
then retrieves full article body via detail page (cached).
Handles Chinese relative timestamps (X分钟/小时/天前).

* fix(in-en): add maintainer, fix timezone double-shift, translate comments to English

* fix(in-en): correct news paths for h2/chd/huanbao, drop date-only pubDate override

* fix(in-en): sort imports, fix numeric separators, add category field, use trueUA

* fix(in-en): address review comments

- Remove config.trueUA, use default UA
- Remove custom parseRelTime, use parseDate directly
- Fix title text extraction without cloning element
- Remove unnecessary .first() on pubDate
- Fix author: handle both em.ly and plain-text source via .prompt > span
- Simplify category field (remove redundant length check)
- Fix description selector: .article-body → #article
- Fix detail author selector: .article-meta .source a → p.source a
- Remove try-catch around detail fetch

* fix(in-en): fix author including category text and handle relative pubDate formats

* fix(in-en): use parseRelativeDate, simplify selectors, drop redundant fallbacks

- Replace hand-rolled relative-date logic with parseRelativeDate (covers
  "刚刚 / N分钟前 / N小时前 / 今天 HH:MM / 昨天 HH:MM / YYYY-MM-DD"). Fixes
  Invalid Date on the first few entries and resolves the two oxlint findings
  (no-useless-undefined, numeric-separators-style).
- Drop the `.first()` on `.listTxt .prompt i` — each `ul.infoList > li` carries
  exactly one `<i>` (date), confirmed against https://solar.in-en.com/news/.
- Author selector: `.prompt > span:first-of-type`, then strip leading "来源:".
  Cheerio's `.text()` flattens `<em class="ly">…</em>` into the same string,
  so this matches both shapes shown on https://solar.in-en.com/news/
  (plain text vs. wrapped in em.ly).
- Category selector: `.prompt > span:not(:first-of-type) em a`, scoped to the
  second span so author text never leaks in.
- Drop `|| undefined` on author and `?? ''` on description (redundant —
  DataItem already accepts undefined).
- Add an HTML-shape comment pointing to the live sample URL so future
  reviewers can verify the layout assumptions.

* fix(in-en): drop dead default + use new-media category

- Hono treats `:type` as compulsory (path is `/news/:type`), so users without
  it never reach the handler — the `?? 'solar'` fallback was unreachable.
  Replace with a non-null assertion to keep the type narrow.
- categories: 'traditional-media' → 'new-media' per review suggestion.
2026-05-07 11:20:00 +08:00
KKumiko 63157fb030
feat(route): add 福建日报电子报 route (#21472)
* feat(route/fjrb): add Fujian Daily route and namespace configuration

* feat(route/fjrb): update route to support date parameter and improve error handling

* fix(route/fjrb): standardize root URL constant usage

* fix(route/fjrb): address review comments for Fujian Daily route

* fix(route/fjrb): refactor media source retrieval to use getNodeSrc function

* fix(route/fjrb): update Fujian Daily URL to use the second level domain

* feat(route/fjdaily): add Fujian Daily route and namespace configuration

* fix(route/fjdaily): add Fujian Daily route and namespace configuration
2026-05-07 03:34:07 +08:00
Yufan You 5589b89478
fix(cache): call JSON.stringify when storing value in cache.tryGet (#20671)
* fix(cache): call JSON.stringify when storing value in cache.tryGet

The value is returned as-is, so we may assume that it's not JSON
stringified inside `getValueFunc`. Otherwise, the caller already needs
to distinguish between values that are either JSON parsed or not.

* Revert "fix(routes/mastodon): don't refresh account ID cache (#20663)"

This reverts commit c2cff410fa.

* test: add test

* test: lint
2026-05-07 01:26:11 +08:00
DIYgod 759551073c fix: update browser fetching for bilibili and xsijishe 2026-05-06 16:30:15 +08:00
Tony 1410f03e6d test: remove text "Not Found" from httperror
undici (v8.0.2) in node 26.0 enables http2 by default which has empty statusText
refs: 584e6aec01/lib/dispatcher/client-h2.js (L945)
2026-05-06 03:12:57 +08:00
DIYgod 90b81b51fc
fix: connect playwright ws endpoint via protocol (#21917) 2026-05-05 22:17:25 +08:00
DIYgod d0c6e6a87a
feat(route/bilibili): fold browser mode into video route (#21913)
* feat(route/bilibili): add video-browser route using Puppeteer for video list extraction

Replace broken real-browser API dependency with getPuppeteerPage + browserless
to render Bilibili space pages and extract video data via DOM parsing. Includes
username extraction from page title and cover image detection.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* fix(route/bilibili): fix video title extraction picking stats over actual titles

The candidate selection logic was preferring longer text (e.g. "8.3万23907:45")
over real titles (e.g. "爆肝三天,我总结了 GPT Image 2 全网最实用的玩法")
because stats strings passed the hasTitle check. Now prefer candidates that
contain Chinese characters and don't start with digits, falling back to
longest hasTitle candidate. Fixes 11/35 UIDs returning empty results.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* feat(route/bilibili): add /user/video-browser route using Puppeteer + XHR interception

Close #20406

Bilibili upgraded anti-crawler (WBI signing) on /x/space/wbi/arc/search
in Nov 2025, causing existing /user/video/:uid to return 412.

This new route bypasses it by intercepting the browser's own API response
via Puppeteer, extracting structured JSON data (title, bvid, pic, created
timestamp, author, play/comment counts) instead of fragile DOM scraping.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* feat(route/bilibili): fold browser mode into video route

---------

Co-authored-by: gqy20 <qingyu_ge@foxmail.com>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-05 18:07:51 +08:00
DIYgod 566f028aaf
refactor: migrate browser automation to Playwright (#21901)
* refactor: migrate browser automation to Playwright

* ci: update browser checks for Playwright
2026-05-04 21:16:18 +08:00
github-actions[bot] bd4ce4506d style: auto format 2026-05-02 03:05:48 +00:00
ashi-koki 843c3ff8c1
feat(route): add rule34video latest route (#21696)
* feat(route): add rule34video latest route

* fix(route): reduce redundant returns, use suggested full route path

* fix(route): removed user-agent  usage

* fix(route): removed redundant import
2026-05-02 11:04:46 +08:00
wanlala 496e98a4cf
fix(route/nuaa): 修复NUAA教务处DOM元素解析 (#21879)
<!--
If you have any difficulties in filling out this form, please refer to https://docs.rsshub.app/joinus/new-rss/submit-route
如果你在填写此表单时遇到任何困难,请参考 https://docs.rsshub.app/zh/joinus/new-rss/submit-route
-->

## Involved Issue / 该 PR 相关 Issue



## Example for the Proposed Route(s) / 路由地址示例

<!--
请在 `routes` 区域填写以 / 开头的完整路由地址,否则你的 PR 将会被无条件关闭。
如果路由包含在文档中列出可以完全穷举的参数(例如分类),请依次全部列出。

Please include route starts with /, with all required and optional parameters in the `routes` section. Fail to comply will result in your pull request being closed automatically.
```route
/some/route
/some/other/route
/dont/use/this/or/modify/it
/use/the/fenced/code/block/below
```
如果你的 PR 与路由无关, 请在 `routes` 区域填写 `NOROUTE`,而不是直接删除 `routes` 区域。否则你的 PR 将会被无条件关闭。
If your changes are not related to route, please fill in `routes` with `NOROUTE`. Fail to comply will result in your PR being closed.
-->

```
/nuaa/jwc/tzgg
```

## New RSS Route Checklist / 新 RSS 路由检查表

- [ ] New Route / 新的路由
  - [ ] Follows [Script Standard](https://docs.rsshub.app/joinus/advanced/script-standard) / 跟随 [路由规范](https://docs.rsshub.app/zh/joinus/advanced/script-standard)
- [x] Documentation / 文档说明
- [x] Full text / 全文获取
  - [ ] Use cache / 使用缓存
- [x] Anti-bot or rate limit / 反爬/频率限制
  - [ ] If yes, do your code reflect this sign? / 如果有, 是否有对应的措施?
- [ ] [Date and time](https://docs.rsshub.app/joinus/advanced/pub-date) / [日期和时间](https://docs.rsshub.app/zh/joinus/advanced/pub-date)
  - [ ] Parsed / 可以解析
  - [ ] Correct time zone / 时区正确
- [ ] New package added / 添加了新的包
- [ ] `Puppeteer`

## Note / 说明
更新了 DOM 元素的解析,适配了新的南航教务处页面样式
2026-05-01 15:29:41 +08:00
Haven Madray 5b2e1a5d02
fix(route/javdb): use puppeteer to overcome api restrictions (#21865)
* fix(javdb): use puppeteer to overcome api restrictions

* chore(javdb): block unnecessary requests
2026-04-30 22:38:06 +08:00
Tony 2f66481a33
fix(route/nhk): fix linebreak (#21863) 2026-04-29 17:21:27 +08:00
Tony cf2f06cdd7
fix(route/nmc): update selectors (#21854) 2026-04-29 13:34:34 +08:00
Tony e06a6dee24
fix(youtube): correct cache expiration handling in getLive function (#21853) 2026-04-29 12:52:27 +08:00
dependabot[bot] bb5a944b35
chore(deps-dev): bump tsdown from 0.21.9 to 0.21.10 (#21810)
* chore(deps-dev): bump tsdown from 0.21.9 to 0.21.10

Bumps [tsdown](https://github.com/rolldown/tsdown) from 0.21.9 to 0.21.10.
- [Release notes](https://github.com/rolldown/tsdown/releases)
- [Commits](https://github.com/rolldown/tsdown/compare/v0.21.9...v0.21.10)

---
updated-dependencies:
- dependency-name: tsdown
  dependency-version: 0.21.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* fix: migrate tsdown options

* test: fix flaky test

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-29 05:09:46 +08:00
Tony 796bbf1ecf
fix(route/yahoo): fix providers (#21852)
* fix(yahoo): fix getProviderList

* fix(yahoo): fix region config

* fix: typo
2026-04-29 04:00:53 +08:00
dependabot[bot] d811d053b2
chore(deps-dev): bump the oxc group with 5 updates (#21847)
* chore(deps-dev): bump the oxc group with 5 updates

Bumps the oxc group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [@oxlint/plugins](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint-plugins) | `1.61.0` | `1.62.0` |
| [oxfmt](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt) | `0.46.0` | `0.47.0` |
| [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint) | `1.61.0` | `1.62.0` |
| [oxlint-plugin-eslint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint-plugin-eslint) | `1.61.0` | `1.62.0` |
| [oxlint-tsgolint](https://github.com/oxc-project/tsgolint) | `0.22.0` | `0.22.1` |


Updates `@oxlint/plugins` from 1.61.0 to 1.62.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/apps_v1.62.0/npm/oxlint-plugins)

Updates `oxfmt` from 0.46.0 to 0.47.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxfmt/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxfmt_v0.47.0/npm/oxfmt)

Updates `oxlint` from 1.61.0 to 1.62.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/oxlint_v1.62.0/npm/oxlint)

Updates `oxlint-plugin-eslint` from 1.61.0 to 1.62.0
- [Release notes](https://github.com/oxc-project/oxc/releases)
- [Changelog](https://github.com/oxc-project/oxc/blob/main/npm/oxlint-plugin-eslint/CHANGELOG.md)
- [Commits](https://github.com/oxc-project/oxc/commits/apps_v1.62.0/npm/oxlint-plugin-eslint)

Updates `oxlint-tsgolint` from 0.22.0 to 0.22.1
- [Release notes](https://github.com/oxc-project/tsgolint/releases)
- [Commits](https://github.com/oxc-project/tsgolint/compare/v0.22.0...v0.22.1)

---
updated-dependencies:
- dependency-name: "@oxlint/plugins"
  dependency-version: 1.62.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxfmt
  dependency-version: 0.47.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint
  dependency-version: 1.62.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint-plugin-eslint
  dependency-version: 1.62.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint-tsgolint
  dependency-version: 0.22.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: oxc
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: ignore eslint-disable on ci

* chore: bump pnpm

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-29 03:49:51 +08:00
DIYgod 7a7453d2d2 fix(twitter): handle unavailable quoted tweets 2026-04-28 21:09:55 +08:00
Lukas Wolfsteiner 5b4fe8e68d
feat(route): add user likes activity for Hugging Face (#21838)
Introduces a new route to fetch and display user likes activity from Hugging Face, including links to liked repositories and their types.
The route is accessible via '/activity/:user/likes' and supports various repository types such as datasets, spaces, papers, and collections.

This is done by parsing the JSON provided through the HuggingFace API.
E.g.: `https://huggingface.co/api/users/dotwee/likes`
2026-04-27 03:04:25 +08:00
Volundio be87dfd523
docs: edit zaimanhua description. (#21829) 2026-04-25 20:21:21 +08:00
Tony 0ddea9ef86
fix(route): apple apps (#21824) 2026-04-24 19:39:30 +08:00
kjasn 6528dc0a2f
feat: add token option for zaimanhua route (#21815)
* feat: zaimanhua use cookie

* feat: zaimanhua recent update and comic update add token option

* Update lib/routes/zaimanhua/update.ts

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-24 18:59:58 +08:00
DIYgod 7c2bcf5bdf
feat: add HTTP cache (#21814) 2026-04-24 11:35:51 +08:00
MurphyYi 779d67a76f
fix(xiaomiyoupin): 修复众筹路由 API 失效问题 (#21785)
* fix(xiaomiyoupin): 修复众筹路由 API 失效问题

- 原依赖 /venue/page 接口返回 query_list,但该接口现已返回空 floors
- 改用 homepage/main/v1005 API,无需 sign,长期稳定
- 新增 crowdfunding.tsx 模板,展示更丰富的众筹信息(进度条、支持人数、起止时间等)
- 适配新 API 数据结构字段

Signed-off-by: zy84338719 <zy84338719@users.noreply.github.com>

* fix(xiaomiyoupin): 修复众筹路由 API 失效问题

- 原依赖 /venue/page 接口返回 query_list,但该接口现已返回空 floors
- 改用 homepage/main/v1005 API,无需 sign,长期稳定
- 新增 crowdfunding.tsx 模板,展示众筹进度、支持人数、起止时间等
- 复用 utils.ts 中的 parseModule helper

Signed-off-by: zy84338719 <zy84338719@users.noreply.github.com>

* style: fix lint issues (eqeqeq, no-negated-condition) and add data validation

- Replace != with explicit null/undefined checks
- Add safe navigation for resp.data.data.homepage
- Throw descriptive errors on missing data

Signed-off-by: zy84338719 <zy84338719@users.noreply.github.com>

* fix(xiaomiyoupin): simplify fix per maintainer feedback - add accept header only

---------

Signed-off-by: zy84338719 <zy84338719@users.noreply.github.com>
2026-04-23 06:02:26 +08:00
ifwlzs 2dc92de43e
fix(route): update zxcs domain to zxcs.click (#21768) 2026-04-19 20:48:50 +08:00
Tony 6a664a87ff
feat(route): add mhlw (#21766)
* feat(route): add mhlw

* fix(route/mhlw): simplify selector for fetching data items
2026-04-19 03:22:54 +08:00
TimoYoung a0dbb6edf0
fix(route/huxiu): restore article content fetching and unify metadata building (#21756)
* fix(route/huxiu): fix article detail fetching

- Introduced `extractArticleId` function to extract article IDs from links.
- Added `fetchArticleDetail` function to retrieve article details using the extracted ID.
- Updated `fetchItem` to first attempt fetching article details before falling back to the original link.
- Enhanced error handling for API requests and parsing failures.

* refactor(route/huxiu): enhance data fetching and processing

- Introduced `prefixHuxiu` function to standardize titles and descriptions.
- Updated `fetchData` to handle icon URLs more robustly.
- Simplified `fetchItem` logic for better error handling and data retrieval.
- Removed unused `parseInitialState` function to clean up the codebase.

* refactor(route/huxiu): enhance data fetching and metadata building

- Replaced `fetchData` with `fetchApiRouteData` for improved data retrieval across multiple routes.
- Introduced `buildFeedMetadata` and `buildHuxiuRouteTitlePrefix` functions to standardize metadata construction.
- Updated various route handlers to utilize the new data fetching and metadata building methods, improving consistency and maintainability.
- Removed the `prefixHuxiu` function as its functionality is now integrated into the new metadata building process.
2026-04-18 05:47:50 +08:00
Tony 0bed8a993d
docs: add FANTIA_COOKIE (#21755)
* docs: add FANTIA_COOKIE

* fix(user): handle optional fanClub.comment in description
2026-04-17 03:27:51 +08:00