Commit Graph

8752 Commits

Author SHA1 Message Date
TonyRL 0a2e5b91db fix: fromCodePoint RangeError error
#22172
2026-06-03 22:50:26 +00:00
Jiamin 7a8c5c6c62
feat(route): add Henan Museum exhibition route (#22138)
* feat(route): add Henan Museum exhibition route

* fix: remove trim for title
2026-06-04 06:03:31 +08:00
CaoMeiYouRen233 f5dc400cb2
fix(route/iwara): 修复 apiRootUrl 引用错误 (#22176) 2026-06-04 05:30:53 +08:00
Tony fbe1a46018 fix(route/twitter): throw exception on invalid user 2026-06-04 05:25:46 +08:00
Tony 8eaa2e06f9
fix(route/cls): fix telegraph api (#22171) 2026-06-03 11:45:31 +08:00
Jiamin 7931a8d4ce
fix(route): fix zh name for shanximuseum (#22169) 2026-06-03 02:18:32 +08:00
Jiamin f82a357623
feat: add shanxi museum temporary exhibition route (#22046)
* feat: add shanxi museum temporary exhibition route

* chore: trigger ci

* fix: remove pubDate if no return information

* fix: remove redundancy

* fix:fix the timezone error and refactor the resData and list

* fix: remove ! check for imgurl

* fix: remove empty message and add trycatch
2026-06-02 22:18:47 +08:00
BeaCox 575f71abde
feat(route/sjtu): add CS school academic activities (#22050)
* feat(route/sjtu): add CS school academic activities

* refactor(route/sjtu/cs/xshd): use JSX for description and respect dedicated item fields

  - Switch to .tsx with renderToString (Rule 25)
  - Move 时间→pubDate (with HH:mm), 报告人→author, 封面→image (Rule 11)
  - Drop hand-written referrerpolicy attributes (Rule 39)
  - pubDate now preserves hour/minute when source provides it

* fix(route/sjtu/cs/xshd): separate publish date from event time

  - pubDate now reflects announcement publish date:
    - in-site articles: detail page 发布日期 (authoritative)
    - WeChat-redirect items: extracted from image URL path /upload/image/YYYYMMDD/
  - 举办时间 (event time) moved back into description (no longer duplicates pubDate)

* fix(route/sjtu/cs/xshd): remove manual title trimming (Rule 16)

* fix(route/sjtu/cs/xshd): address review comments

  - Use response URL to detect WeChat redirect
  - Fetch WeChat MP content via fetchArticle
  - Remove try-catch around detail requests
  - Remove dangerouslySetInnerHTML from JSX rendering

* fix(route/sjtu/cs/xshd): use ofetch consistently

* fix(route/sjtu/cs/xshd): fallback on WeChat MP WAF errors

* fix(route/sjtu/cs/xshd): fallback when detail enrichment fails

  The route enriches list items by fetching detail pages, but some SJTU
  detail URLs are redirect stubs to WeChat MP. In CI, those intermediate
  detail requests can fail with no response before the route reaches the
  WeChat MP parser, causing Promise.all to reject and the whole feed to
  return 503.

  Switch detail enrichment aggregation from Promise.all to
  Promise.allSettled and fall back to list-page metadata for only the
  failed item. Successful items are still enriched with in-site article
  content or WeChat MP content.

  This follows the existing resilient detail-fetching pattern in
  lib/routes/usenix/usenix.ts and keeps the scoped WeChatMpError fallback
  around fetchArticle(), similar to lib/routes/wechat/sogou.ts.
2026-06-01 05:33:37 +08:00
github-actions[bot] d486205245 style: auto format 2026-05-30 03:38:43 +00:00
Jsongcloud db1e74c6f9
fix(route/twitter): handle TweetPreviewDisplay for subscriber-only posts (#21957)
* fix(twitter): handle TweetPreviewDisplay for subscriber-only posts

* fix(twitter): remove unused screenName variable

* fix(twitter): fix indentation and use English comments

* fix(twitter): fix indentation and remove unused variables

* fix(twitter): revert mobile-api changes as mobile API is disabled

* fix(twitter): add configurable prefix options for subscriber-only posts

---------

Co-authored-by: root <root@exquisite-echo-2.localdomain>
2026-05-30 11:37:37 +08:00
Tony 9a34eef2af docs: fix description 2026-05-30 05:49:25 +08:00
Jiamin 5ac2c937a6
feat(route): add shanghai museum news route (#22049)
* feat: add shanghai museum news route

* feat: add shanghai museum news route

* fix: update radar

* fix: remove redundancy and fix the time zone
2026-05-30 05:25:54 +08:00
github-actions[bot] 99e35563c4 style: auto format 2026-05-26 23:10:33 +00:00
Jiamin 9446e707ff
feat(route): add the Palace Museum route (#21960)
* feat(route): add the Palace Museum route

* fix: fix trailing space, array and radar target

* fix: fix array

* fix: follow rule22

* refactor(dpm): migrate exhibitions route to JSX format (.tsx)

* fix(dpm): use arrow function in cheerio filter

* fix: update example

* fix: remove redundancy and fix error for endDate and fullduration

* chore: trigger gh actions retry

* fix: remove trim for fullduration

* fix:remove ! check for imgurl and fullduration

* fix: remove exhibition_item
2026-05-27 07:09:21 +08:00
dependabot[bot] 2c349add50
chore(deps-dev): bump the oxc group across 1 directory with 4 updates (#22107)
* chore(deps-dev): bump the oxc group across 1 directory with 4 updates

Bumps the oxc group with 4 updates in the / directory: [@oxlint/plugins](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint-plugins), [oxfmt](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxfmt), [oxlint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint) and [oxlint-plugin-eslint](https://github.com/oxc-project/oxc/tree/HEAD/npm/oxlint-plugin-eslint).


Updates `@oxlint/plugins` from 1.66.0 to 1.67.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.67.0/npm/oxlint-plugins)

Updates `oxfmt` from 0.51.0 to 0.52.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.52.0/npm/oxfmt)

Updates `oxlint` from 1.66.0 to 1.67.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.67.0/npm/oxlint)

Updates `oxlint-plugin-eslint` from 1.66.0 to 1.67.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.67.0/npm/oxlint-plugin-eslint)

---
updated-dependencies:
- dependency-name: "@oxlint/plugins"
  dependency-version: 1.67.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxfmt
  dependency-version: 0.52.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint
  dependency-version: 1.67.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
- dependency-name: oxlint-plugin-eslint
  dependency-version: 1.67.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: oxc
...

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

* chore: use native unicorn/import-style

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-27 00:51:12 +08:00
LunyaaDev f29e5ccb55
feat(route/kleinanzeigen): add Kleinanzeigen (kleinanzeigen.de) (#21959)
* add Kleinanzeigen.de search feed

* simplify route name

* Update lib/routes/kleinanzeigen/search.ts

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

* remove title cloning

* include all images

* improve description parsing

---------
2026-05-25 10:25:39 +08:00
Jiamin 0788983eac
feat: add China National Museum exhibition route (#21891)
* feat: add China National Museum exhibition route

* Update route.ts

* Update zl.ts

* Update zl.ts

* Update zl.ts

* fix: refactor to JSX and fix cache import

* fix: refactor to JSX, fix duration and fix import

* fix: replaceAll, if and regualr expression range

* Update zl.ts

* fix: refactor extra output and import namespace

* fix: fix error

* fix: adjust fullduration logic

* feat: refactor route file with type and subtype used

* fix: reduce the complexity

* fix: remove trim() for title

* fix: remove redundancy and fix error

* fix: remove toLowerCase redundancy

* fix: remove trim for title

* fix: Apply suggestions from code review and error fix

Co-authored-by: Tony <TonyRL@users.noreply.github.com>

---------
2026-05-24 12:29:39 +08:00
github-actions[bot] cd6a40c14f style: auto format 2026-05-23 13:39:38 +00:00
Andvari 6f9b7c99f3
fix(route/scmp): Adapt to new section format (#22085)
* fix(route/scmp): Adapt to new section format

* Update utils.ts
2026-05-23 21:38:33 +08:00
Chih-Hsuan Yen b5bcb8a567
feat(route/cna): cleanup extracted full texts (#21962)
Here is a page with description-box:
https://www.cna.com.tw/news/aipl/202605070117.aspx

Explanation for the term 憲法第130條 is injected in the middle of a
paragraph and makes that paragraph hard to read. This change fixes that.
2026-05-23 05:21:45 +00:00
Azan c2d357fc03
fix(route/4gamers): handle InsertOneAdsSection (#22071) 2026-05-21 21:52:17 +08:00
Ch3n4y e5e2368fe0
feat(route): add itsec news (#22066)
* feat(route): add itsec news

* fix(route): preserve itsec titles

---------

Co-authored-by: Ch3n4y <ch3n4y@gmial.com>
2026-05-21 13:51:27 +08:00
github-actions[bot] 9d3790f73c style: auto format 2026-05-14 14:26:50 +00:00
Jiamin 5cb99133d9
feat: add Shanghai Museum exhibition route (#21890)
* feat: add Shanghai Museum exhibition route

* Update shanghaimuseum.ts

* feat: add Shanghai Museum exhibition route

* Update shanghaimuseum.ts

* Update shanghaimuseum.ts

* docs: add namespace for shanghaimuseum

* feat(route): rename to offline-exhibit and update metadata

* fix: update with fixed output and fix errors

* fix: fix errors

* fix: add exhibitiontype

* fix: refactor to JSX

* feat: update shanghai museum route with type param

* fix: update offline-exhibit to use path params

* fix: exhibitItem from ExhibitItem

* fix: update interface
2026-05-14 22:25:36 +08:00
DIYgod 30776baef7 fix: update obsidian community routes 2026-05-14 15:47:50 +08:00
DIYgod 265921b7b8 fix(route): normalize Bilibili mall image URLs 2026-05-14 13:18:46 +08:00
chansantheman 591dcb85be
feat(route/gigazine): add English news full-text feed (#21757)
* route(gigazine): add English news full-text feed

Adds /gigazine/en route that fetches full article content from
GIGAZINE's English news listing. Uses sequential fetching with
delays to respect Cloudflare rate limits; subsequent loads are
served from cache.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* route(gigazine): improve english feed resilience

* test(gigazine): add english route coverage

* test(gigazine): move route coverage out of route tree

* test(api): cover route status cache fallbacks

* refactor(gigazine): apply PR review feedback to english route

- Use ofetch built-in auto-retry instead of hand-rolled circuit breaker
- Remove config.trueUA; let request-rewriter inject random browser UA
- Simplify Number.parseInt call (drop redundant ?? '' fallback)
- Update tests to match new retry and UA behaviour

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore: remove unrelated changes and unnecessary test file

* refactor(gigazine): simplify selectors and cleanup logic per review

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 03:54:02 +08:00
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