Commit Graph
8601 Commits
Author SHA1 Message Date
Tony 5ae7432b26 fix(ofetch): use late-binding fetch in ofetch to ensure request-rewriter intercepts bundled builds (#21518) 2026-03-26 21:24:46 +08:00
TimoYoung 3086b7784f fix(route/2048): fix captcha handling and update cookie management (#21512)
* fix(route/2048): fix captcha handling and update cookie management

- Removed outdated cookie handling logic and replaced it with safeid extraction from the captcha HTML.
- Updated the response structure to use safeid instead of safe18Pass for cookie management.
- Enhanced enclosure extraction logic to support new sources。

* chore(route/2048): remove unused renderToString import

Made-with: Cursor

* fix(route/2048): prioritize magnet-text and reuse read_tpc node

Made-with: Cursor
2026-03-26 18:41:35 +08:00
studyinglover 4200769d1a feat(route/xupt): add XUPT JYC notifications route (#21451) 2026-03-26 18:02:55 +08:00
FeCCCandgithub-actions[bot] a0e75a2f10 fix(route/iwara): use puppeteer to fix subscriptions route (#21495)
* fix(route/iwara): use puppeteer to fix subscriptions route

* style: auto format

* style(route/iwara): remove unnecessary async keyword in fetchApi

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-26 03:06:13 +08:00
Zhenlong Huang 6dd8e83105 feat(route): Add route of dewu tech blogs (#21504) 2026-03-25 23:36:21 +08:00
Tony d0c386f9a6 chore: unpin jsdom (#21505)
* fix(server): update export syntax for app-bootstrap import

* chore(deps): upgrade jsdom to version 29.0.1 and related type definitions

* chore(vercel): remove unused functions configuration from vercel.json

* chore: add vercel cli

* fix: cleanup

* chore: unpin jsdom
2026-03-25 23:16:40 +08:00
github-actions[bot] 6e134d32d5 style: auto format 2026-03-25 10:35:56 +00:00
Tony 79a525cbd3 refactor: add GraphQL annotation to queries for auto formatting in oxfmt v0.42
0fe46fe333
2026-03-25 18:34:13 +08:00
github-actions[bot] 0fe46fe333 style: auto format 2026-03-25 09:24:21 +00:00
dependabot[bot]andTony df6b73d866 chore(deps-dev): bump msw from 2.4.3 to 2.12.14 (#21483)
* chore(deps-dev): bump msw from 2.4.3 to 2.12.14

Bumps [msw](https://github.com/mswjs/msw) from 2.4.3 to 2.12.14.
- [Release notes](https://github.com/mswjs/msw/releases)
- [Changelog](https://github.com/mswjs/msw/blob/main/CHANGELOG.md)
- [Commits](https://github.com/mswjs/msw/compare/v2.4.3...v2.12.14)

---
updated-dependencies:
- dependency-name: msw
  dependency-version: 2.12.14
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

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

* chore: remove supertest

MSW's setupServer() works by patching Node's http module (via @mswjs/interceptors) to intercept outgoing requests. supertest's requests to http://127.0.0.1:1200 go through the same patched http module which causes server bad request

* chore(patch): add patch for @mswjs/interceptors@0.41.3

* fix(server): update server listen options to bypass unhandled requests

* chore: update patch for @mswjs/interceptors

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Tony <TonyRL@users.noreply.github.com>
2026-03-25 02:31:42 +08:00
Tony 86088852ab test(header-generator): improve header validation (#21492) 2026-03-24 23:37:28 +08:00
LinxHex 697c3d6edb fix(route/landiannews): sanitize rendered titles (#21461)
* fix(route/landiannews): sanitize rendered titles

* refactor(route/landiannews): use sanitize-html for titles
2026-03-24 21:39:50 +08:00
Qiang Huang e3a0e74254 fix(route/likeshop): Likeshop API now supports title attribute (#21484) 2026-03-24 04:15:08 +08:00
Enoch Ma 122a5343cb feat(route/aeon): improve compatibility by enforcing the correct jpg enclosure type (#21470)
* Enforce enclosure type

* remove trailing space
2026-03-23 09:58:57 +08:00
Solitudinis e86c679a92 feat(route/cursor): support localized blog and changelog routes (#21390) 2026-03-20 23:15:55 +08:00
LinxHex f69c416291 feat(apple): add full-text Apple Newsroom route (#21384)
* feat(apple): add full-text Apple Newsroom route

Add /apple/newsroom for the official Apple Newsroom China feed.
Fetch article pages to provide full-text content with cached detail requests, and normalize article metadata and media URLs.
Remove gallery navigation, download buttons, video playback controls, empty wrapper nodes, and other non-content UI elements from articles.
Format image and video captions as distinct descriptions, and drop duplicate captions when their text matches the article body.

* fix(apple): sanitize dangerous media URLs in newsroom route

* fix(route): refine Apple Newsroom route metadata and request handling

* fix(route): simplify Apple Newsroom description cleanup
2026-03-20 22:18:15 +08:00
Yang ZhiandClaude Opus 4.6 d097ce525a feat(route): add perplexity blog (#21436)
* feat(route): add perplexity blog

Add route for Perplexity blog at /perplexity/blog, scraping
perplexity.ai/hub with Puppeteer. Extracts featured and regular
articles using data-framer-name selectors, deduplicates responsive
layout copies, and fetches full article text from detail pages.

* fix(route/perplexity): deduplicate article body text from Framer responsive copies

* fix(route/perplexity): return HTML content instead of plain text for article descriptions

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

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-20 19:34:12 +08:00
Enoch Ma 9780b3ed02 fix(route/nautil): change url (#21452) 2026-03-20 03:50:04 +00:00
Enoch Ma d6f8ca5b33 feat(route/openalex): Filter out news articles from research articles (#21444) 2026-03-19 12:24:10 +08:00
Tony a3f06e485c feat: esm directory import (#21428) 2026-03-18 15:15:28 +08:00
DIYgod 4568a6a6ab feat: add promotion 2026-03-17 15:59:10 +08:00
Tony ed6b1924c9 fix(route): update language parameter regex in zhonglun route 2026-03-17 02:05:38 +08:00
Zdenek StursaandZdenek d2d4955b18 feat(route): add Inception Labs blog route (#21386)
* feat(routes): add Inception Labs blog route

Adds RSS feed for https://www.inceptionlabs.ai/blog/

The page is built with Framer and served as SSR HTML, so no Puppeteer
is required — a regular HTTP fetch with a browser User-Agent suffices.

Two distinct blog card layouts are handled:
- Standard card: date and category in [data-framer-name="Date"] elements
- Featured card: date inside a <mark> element, category in [data-framer-name="Category"]

Each item includes title, publication date, author, category, and the
full article body extracted from [data-framer-name="Content"].

Route: /inceptionlabs/blog
Example: /inceptionlabs/blog

* refactor(routes/inceptionlabs): address review feedback

- Fix categories: technology -> programming (valid Category type)
- Remove redundant radar source (inceptionlabs.ai redirects to www)
- Add maintainer GitHub ID
- Replace custom PostMeta interface with existing DataItem type
- Use [data-framer-name="Desktop"] selector to avoid SSR duplicates
- Refactor card collection from .each()/push to .map()/.filter()

---------

Co-authored-by: Zdenek <tvuj-email@example.com>
2026-03-16 23:20:37 +08:00
LinxHex c97a5a286f feat(weibo): apply description render params to comments (#21389) 2026-03-16 21:09:59 +08:00
Dacheinandxbankeradmin 85b5444d07 fix(route/apple/podcast): adapt to new serialized-server-data structure (#21387)
Apple Podcasts changed the `#serialized-server-data` element from a
direct array to an object wrapper `{ data: [...], userTokenHash }`.

This broke the route with:
  TypeError: Cannot read properties of undefined (reading 'data')

Changes:
- Handle both old (array) and new (object with `data` key) formats
  using `Array.isArray()` check for backward compatibility
- Add defensive optional chaining on the `channel` relationship
  access chain to prevent crashes when episodes lack channel data

Fixes the same underlying issue reported by yt-dlp (yt-dlp/yt-dlp#15926).

Made-with: Cursor

Co-authored-by: xbankeradmin <admin@xbanker.ai>
2026-03-16 19:58:24 +08:00
Tony bb98fff269 fix(radar): update radar sources for multiple routes 2026-03-16 12:23:24 +08:00
tmr f9c5068797 fix(jike): update radar source for user and topic (#21395)
* fix(jike): update radar source for user and topic

* fix: split fqdn
2026-03-16 11:55:48 +08:00
tmrandClaude 9497007109 feat(routes/cognition): add category support to cognition blog route (#21394)
* feat(routes/cognition): add category support to blog route

- Add optional category parameter to blog route path
- Update radar configuration to support category routes
- Add new maintainer ttttmr
- Modify handler to handle category parameter

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix: remove unused Data import and add missing parameters field

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-15 22:18:03 +08:00
github-actions[bot] 4fc49da946 style: auto format 2026-03-13 15:58:11 +00:00
LinxHex df6572b659 fix(routes/miyuki): format news titles with bracketed categories and keep full-text body-only (#21377)
* fix(routes/miyuki): format news titles with bracketed categories and keep full-text body-only

* fix(routes/miyuki): clean news body extraction and normalize images

- Updated lib/routes/miyuki/news.ts to keep item titles as plain article titles and store category information only in the `category` field.
- Switched the route to use the canonical Miyuki domain and added the route `url` metadata.
- Refined full-text extraction so `description` keeps only the main article body and excludes page header metadata such as section title, article title, date, and category.
- Fixed malformed article-body handling for pages like `10217`, where the source HTML structure breaks the original body selector.
- Normalized article images by deduplicating `for_pc` / `for_sp` duplicates, converting relative image URLs to absolute URLs, and replacing list-based photo blocks with plain containers so RSS readers do not render black bullets.
- Resolved the related CodeFactor/lint issues and verified the file with `oxlint` and `eslint`.

* feat(apple): add full-text Apple Newsroom route

Add /apple/newsroom for the official Apple Newsroom China feed.
Fetch article pages to provide full-text content with cached detail requests, and normalize article metadata and media URLs.
Remove gallery navigation, download buttons, video playback controls, empty wrapper nodes, and other non-content UI elements from articles.
Format image and video captions as distinct descriptions, and drop duplicate captions when their text matches the article body.

* fix(routes/miyuki): simplify image handling in news descriptions

* Remove unrelated changes from PR
2026-03-13 23:57:36 +08:00
Tony 3046b6c8c5 fix: update CryptoJS import path in hqsz route 2026-03-13 01:55:24 +08:00
Sauce dcbe25be59 fix(route/bilibili/weekly): await all async items before storing in cache (#21365) 2026-03-12 16:46:18 +00:00
Zhenlong Huang d59c3eed55 feat(route): add claude blog route (#21348)
* feat(route/claude): Add claude.ai blog rss

Made-with: Cursor

* fix maintainer
2026-03-11 14:37:57 +08:00
Rigo 09a2886506 feat(route/claude): add claude code changelog route (#21347)
* feat(route/claude): add claude code changelog route

* fix: route title rule#2

* Update lib/routes/claude/code-changelog.ts

---------
2026-03-11 13:58:18 +08:00
Tony 8637e63dec feat: redirect /picnob to /picnob.info 2026-03-11 02:03:34 +08:00
YuruShiMaShiMaRinandgithub-actions[bot] e2c991a0ed feat(comic-walker.com): 新添一个路由 (#21310)
* add route

* style: auto format

* Update manga.ts

* Update manga.ts

* ts -> tsx

* Update manga.tsx

* 没法了,这是我最后的手段了(

* Update manga.ts

* Update manga.ts

* Update manga.ts

* Update manga.ts

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-11 00:44:18 +08:00
niuyi b55864eed0 feat(route/sdu): 添加山东大学研究生招生信息网路由 (#21331)
* feat(route/sdu): 添加山东大学研究生招生信息网路由

* feat(route/sdu): 更新山东大学研究生招生信息网路由信息

* feat(route/sdu): 更新研究生招生信息网名称
2026-03-10 23:33:45 +08:00
Tony 085a0ea8ff fix(route/yahoo): remove ads (#21330) 2026-03-10 02:30:50 +08:00
Leslie Leung 626d289580 fix: parse VXNA entry date (#21325) 2026-03-09 08:11:48 +00:00
8d8a435a48 fix(route/theinitium): rewrite for Ghost CMS after site migration (#21071)
* refactor(theinitium): rewrite routes for Ghost CMS, add cookie support

- Rewrite all routes to use Ghost Content API (old API deprecated)
- Add INITIUM_MEMBER_COOKIE env var for paid article full-text
- Add features block with requireConfig to all route files
- Add url field and radar rules per RSSHub standards
- Strip -zh-hans suffix from author/category display names
- Update namespace with English name and zh translations
- Mark follow route as deprecated (Ghost doesn't support it)
- Fix hostname binding to 0.0.0.0 for LAN access

* fix(theinitium): use routeExpire with refresh=false to prevent stale cache

Cache was never expiring because refresh=true (default) extends TTL on every hit.
Now uses 5-min routeExpire and won't extend on access.

* refactor(theinitium): address review feedback

- Remove unused INITIUM_USERNAME/PASSWORD/BEARER_TOKEN env keys
- Remove hardcoded User-Agent (use RSSHub's internal UA)
- Remove fragile html.length > 500 check
- Remove refresh: false from cache.tryGet
- Hoist stripLangSuffix to module scope (dedupe with cleanName)

* fix(theinitium): detect paywall CTA instead of length check

If cookie is invalid/expired, scrape returns paywall HTML.
Check for .gh-post-upgrade-cta to detect this and fall back
to cleaner Ghost API preview.

* revert(index): restore '::' hostname per #16513

* feat(theinitium): clean Ghost Koenig card HTML for RSS output

* fix(theinitium): use redirected Ghost API URL, remove unused config types

* fix(theinitium): remove unrelated neureality config changes

---------

Co-authored-by: Ryan Yao <ryanyao@Macmini.lan>
Co-authored-by: Ryan Yao <ryanyao@Ryans-Mac-mini.lan>
Co-authored-by: Ryan Yao <ryanyao@Ryans-Mac-mini.local>
2026-03-09 04:13:25 +08:00
github-actions[bot] 5277218f01 style: auto format 2026-03-08 19:29:14 +00:00
acidicxjrlandacidicxjrl 7c5c66a75b feat(routes): Add img=1 option to pornhub handlers to pass through images (#21324)
* Add img=1 option to pornhub handlers to pass through images

* Move img=1 to a path parameter, and add clarifications on :lang, etc because each must be set to set the following

---------

Co-authored-by: acidicxjrl <acidicxjrl>
2026-03-09 03:28:42 +08:00
github-actions[bot] 1ad606f40f style: auto format 2026-03-08 07:53:45 +00:00
Hualiang 8bf78f5316 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?
2026-03-08 15:53:10 +08:00
Dzming Li 5469b02b2b fix(route/zhihu): auto-fetch __zse_ck when absent from ZHIHU_COOKIES (#21321)
When ZHIHU_COOKIES is configured without __zse_ck, automatically fetch
the value from Zhihu's public static JS (static.zhihu.com/zse-ck/v3.js).

__zse_ck is a site-wide token (not user-specific) that Zhihu embeds in
a static JS file and rotates periodically. When it expires, routes that
scrape HTML pages (e.g. /zhihu/posts/people/:id) return 403, while
API-only routes are unaffected.

Users can now omit __zse_ck from ZHIHU_COOKIES and it will be fetched
and cached automatically, eliminating manual cookie rotation for this
token. Existing configs that include __zse_ck are unchanged.
2026-03-07 10:27:43 +08:00
chesha1 1c5e4b3702 fix(route/openai): 重构 research 路由,使用 RSS 源替代已失效的 TWILL API (#21309)
* fix(route/openai): 重构 research 路由,使用 RSS 源替代已失效的 TWILL API

- 移除旧的 getApiUrl 和 parseArticle 函数
- 为 fetchArticles 添加 category 过滤参数
- 提取文章作者信息
- 清理未使用的依赖(got, raw, renderToString)

* fix(route/openai): 使用 parseDate 解析 pubDate 日期字符串

* fix(route/openai): 使用重定向后的 URL 作为文章链接

使用 ofetch.raw() 获取响应,捕获重定向后的最终 URL,
避免输出中包含会被重定向的旧链接。

* fix(route/openai): 补全 URL 尾部斜杠以避免 301 重定向

在请求文章详情前为 URL 补上尾部斜杠,直接请求最终地址,
避免每篇文章都触发一次 301 重定向,减少不必要的 HTTP 请求。
2026-03-06 13:53:14 +08:00
Lipeng 6e2ca63189 feat(route): add Meritalk latest articles (#21282)
* feat: add route and namespace for MeriTalk articles

* feat: update articles route to support pagination and add description rendering

* feat: enhance articles route with improved description and error handling

* feat(meritalk): add articles route with pagination limit

- Add latest articles route for Meritalk
- Update route example and parameter description
- Implement pagination limit to avoid Cloudflare anti-bot

* fix(meritalk): remove nums param and fetch only first page

* fix(meritalk): update route category to new-media

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

* fix(meritalk): remove the post-processing of items and modify some of the logic in the handler

- Remove unnecessary sorting.
- Remove custom limit logic.

---------
2026-03-05 11:41:55 +08:00
Tony c09dacac5b feat(api): add cache probing (#21300)
* feat(api): add cache probing

* fix(tests): correct query parameter from 'path' to 'requestPath' in status tests

* feat(cache): add has to workers kv
2026-03-05 02:36:53 +08:00
github-actions[bot] 1093ce6522 style: auto format 2026-03-03 20:45:21 +00:00
Hualiang 4dec5ee309 feat(route): add gamersky.com user dynamics route (#21279)
* add user.ts

* Replace substring with slice.

* fix something
2026-03-04 04:44:46 +08:00