Commit Graph

8494 Commits

Author SHA1 Message Date
Tony d648da5549
fix(route/javtrailers): replace ofetch with puppeteer for API requests (#21055) 2026-02-04 05:27:22 +08:00
wsmbsbbz dc68ecb875
feat(route): add support for f95zone.to (#21042)
* feat(route): add f95zone routes

* fix(route): fix f95zone threads route for folo parse

* fix(route): parse f95zone thread guid from [YYYY-MM-DD] in title

* fix(route): use update date in thread title as pubDate

* fix(route/f95zone): revert image URL processing

* fix(route/f95zone): reenable image URL processing for telegram-bot

* feat(route/f95zone): support post and thread route

* feat(route/f95zone): optimize title

* feat(route/f95zone): optimize image display

* feat(route/f95zone): optimize image display

* feat(route/f95zone): reoptimize img-elements processing

* feat(route/f95zone): reset to the original route pattern

* feat(route/f95zone): optimize routes

* feat(route/f95zone): optimize content processing

* feat(route/f95zone): reduce code

* fix(route/f95zone): use parseDate for proper date handling

* fix(route/f95zone): remove broken radar

* fix(route/f95zone): remove invalid radar config and improve docs

- Remove radar config from post route (postId is in URL hash, cannot be extracted)
- Add empty radar array to prevent Folo parsing error
- Add detailed URL format documentation for both routes
- Explain how to convert browser URL to subscription URL

* fix(route/f95zone): fix invalid example URL

* fix(route/f95zone): use internally generated UA

* fix(route/f95zone): only fetch the first and the last page

* fix(route/f95zone): remove unnecessary sorting logic
2026-02-04 02:43:36 +08:00
Chih-Hsuan Yen 5ae169a201
feat(route/cna): support headlines (#21053)
* feat(route/cna): declare headlines as supported

https://www.cna.com.tw/list/headlines.aspx works the same as other
categories (aall, aipl, ...) - the same HTML structure and API

* fix(route/cna): ignore youtube links during full-text extraction

Sometimes a youtube link instead of a news page is used directly as a
news item (ex: 晚間影音新聞 during 6~7pm UTC+8 on weekdays). That
may result in HTTP 429. Full-text extraction returns nothing, anyway.

* fix(route/cna): note about where the API is from
2026-02-04 02:28:25 +08:00
Tony 55ca8bbb2b
feat(router/36kr): add WAF token handling (#21051) 2026-02-03 18:55:55 +08:00
Enoch Ma ee161b72e4
feat(route/openalex): initial support of openalex (#21032)
* initial support of openalex

* remove parseDate

* add caches and change paths
2026-02-03 02:29:48 +08:00
Enoch Ma 4047e341e2
fix: quanta magazine (#21031)
* exclude economist

* fix: use String.fromCodePoint instead of fromCharCode

* delete old version

* Update lib/routes/quantamagazine/archive.ts

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

* obtain the author information differently

---------
2026-02-03 02:13:39 +08:00
Enoch Ma e6598a0d91
fix(route): AEON (#21030)
* fix aeon

* improve layout

* remove escape chars

* Apply suggestion from TonyRL
2026-02-03 01:25:27 +08:00
Tony a4db4c217d
feat(route): add gitkraken release note (#21044) 2026-02-03 00:50:36 +08:00
Thomas 8be09381e6
fix(route/picuki): Fix video source (#21043) 2026-02-03 00:04:43 +08:00
Jaya d9a611a574
fix(route/njxzc): handle absolute URLs and update library page selectors (#21028)
* fix(route/njxzc): handle absolute URLs and update library page selectors

- Fix URL concatenation in utils to handle absolute URLs properly
- Rewrite lib.ts handler for new library page layout with updated selectors

* fix(route/njxzc): address PR review feedback

- Remove unnecessary padStart for day (already padded)
- Remove invalid response.status check (ofetch returns body directly)
- Extract PDF attachment URL instead of showing generic message

* fix(route/njxzc): handle multiple attachments in wp_articlecontent

- Remove separate wp_pdf_player handling since it's inside wp_articlecontent
- Convert wp_pdf_player iframes to download links within content
- Preserve all attachment links (PDFs, docs, etc.) in the content
- Remove invalid response.status check from utils
2026-02-02 10:26:21 +08:00
Thomas 3583fba2e8
fix(route/picuki): Fix getting video id (#21029) 2026-02-02 05:43:27 +08:00
Zhang Yan bb1d219d5f
fix(route/cool18): fix broken search parsing & add global search (#21024)
* fix(route/cool18): fix broken search parsing & add global search

* fix(route/cool18): add missing await in fetchArticleDetail

* fix(route/cool18): add extractGoldList to handle gold posts

* fix: example path

---------
2026-02-01 16:51:10 +08:00
Tony 4dc4c165d4
fix(route/coolapk): handle shareUrl (#21027)
* fix(route/coolapk): handle shareUrl

* Update lib/routes/coolapk/utils.ts

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

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-01 02:34:56 +08:00
Kota 45cf28a6c3
feat(route): add Scratch routes (#21025)
* add scratch routes

* add users'projects route

* refactor(route): remove old Scratch routes and add new MIT routes for user comments and projects
2026-02-01 01:08:27 +08:00
Tony 27869d9e3c
fix(route/oschina): migrate to oschinapi (#21026)
* fix(route/oschina): migrate to oschinapi

* fix(oschina): correct API path formatting in news and utils
2026-01-31 18:34:04 +08:00
Tony e5016e8ea7
feat(route/tiktok): add live (#21015)
* feat(route/tiktok): add live

* Apply suggestions from code review

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

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-30 12:25:36 +08:00
Tony 0b51e055b7
fix(route/typeless): add android platform support in changelog handler (#21014) 2026-01-30 10:44:10 +08:00
Tony 8f4392d32a
feat(route/nea): add nea bureaux (#21013)
* feat(route/nea): add nea bureaux

* Update lib/routes/gov/nea/bureau.ts

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

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-30 10:28:21 +08:00
Donie Leigh 9ae9d53d2e
fix(route/openai): fix chatgpt release notes extraction (#20971)
* fix(route/openai): fix chatgpt release notes extraction

- Use Puppeteer to bypass Cloudflare protection
- Extract content from rendered HTML instead of React Router data
- Use .html() to preserve formatting, links and styles in descriptions
- Support h2-h6, ul/ol, p, and other HTML elements

* refactor(route/openai): use ofetch instead of puppeteer for chatgpt release notes

- Use ofetch to fetch page content
- Simplify description extraction with prop('outerHTML')
- Use map() instead of each() + push()
- Use config.cache.routeExpire for cache duration

* fix: use first h2 as title, fallback to h1 date if h2 missing
2026-01-30 00:27:18 +08:00
ChenShiYu 5b144a6692
fix(route/nuist): update bulletin route for new website structure (#21004)
* Update bulletin.ts

* style: auto format

* Update bulletin.ts

* style: auto format

* Refactor bulletin route to improve data extraction

fix: apply code review suggestions (selector, radar, author)

* style: auto format

* Update lib/routes/nuist/bulletin.ts

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

* Update lib/routes/nuist/bulletin.ts

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

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-01-29 13:59:38 +00:00
MMA 07cd821cd2
feat(route): add support for dailypush.dev (#20972)
* add support for dailypush.dev

* fix base url

* use map over push

* remove unnecessary option

* remove unnecessary option

* change tag route

* fix

* fix base url
2026-01-27 23:39:14 +08:00
后稷 05437e4252
feat(route/zzu math & sxy): add math and business department route (#20970)
* feat(route/zzu math & sxy): add math and business department route
- Add new route for Zhengzhou University School of Mathematics
- Add new route for Zhengzhou University Business School

* fix(zzu/sxy): 少量修复内容
2026-01-27 08:49:45 +08:00
Donie Leigh 3feaff89fd
feat(route): Add ChatGPT Atlas release notes route (#20969)
* Add ChatGPT Atlas release notes route

- Add route: /openai/chatgpt-atlas/release-notes
- Parse release notes from OpenAI help center
- Use Puppeteer to bypass Cloudflare protection
- Extract build version, date, and content sections
- Cache results for 24 hours
- Proper resource cleanup (browser.close())

* Add ChatGPT Atlas release notes route

- Add route: /openai/chatgpt-atlas/release-notes
- Parse release notes from OpenAI help center
- Use Puppeteer to bypass Cloudflare protection
- Extract build version, date, and content sections
- Cache results for 24 hours
- Proper resource cleanup (browser.close())
2026-01-27 01:48:26 +08:00
dreaifekks 895672f5ea
docs: Clarify YouTube API key(YouTube Data API v3 enable) requirement for live route (#20974)
* Add CLI script for youtube live lookup

* Make youtube live debug script standalone

* Update YouTube API key requirement docs

* Clarify YouTube API key requirement for live route

* Adjust YouTube live API key docs

* Enhance YOUTUBE_KEY description with API link

Updated the description for the YOUTUBE_KEY configuration to include a link to the YouTube Data API v3.

* Update youtube Data API v3 enable doc url
2026-01-26 22:26:21 +08:00
Circloud 7ae15a88bc
feat(route): add XJTLU news route (#20966)
* feat(route): add XJTLU news route

* feat(route): update feed title format

* refactor(route/xjtlu): move "all" category into categories object

* fix(route/xjtlu): remove unnecessary category parameter from radar rules

* fix(route/xjtlu): replace generic error handling with custom one
2026-01-26 13:00:05 +08:00
Circloud 2e756e027d
fix(route/baoyu): handle HTTP redirect for feed.xml (#20968) 2026-01-25 19:18:39 +08:00
sheetung ad3acba9ce
feat(route): add gzjy routes (#20954)
* add gzjy routes

* Update lib/routes/gov/guizhou/jyt.ts
2026-01-25 03:37:24 +08:00
Donie Leigh 8ce077182a
fix(route/perplexity): update changelog title selector for new page structure (#20964)
The page now uses h4 instead of p for titles. Updated selector from
`[data-framer-name="Title"] p` to `[data-framer-name="Title"]` and added
URL slug fallback when title element is not found.
2026-01-25 02:26:22 +08:00
jxtan 71d5ded520
feat(route): add maoyan (猫眼电影) routes (#20956)
* feat(route): add LinuxDo RSS routes

- Add /linux-do/posts route for latest posts
- Add /linux-do/top/:period route for trending topics with period filter
- Optimize /linux-do/latest route
- Update namespace documentation with descriptions
- Handle Zstandard compression by using Accept-Encoding: identity

* revert: remove linux-do routes (PR rejected)

* feat(route): add codefather (编程导航) routes

- Add posts route with hot/new/recommend sorting and category filter
- Add questions route with new/hot sorting
- Support for 编程导航 programming community

* fix: address all PR review comments

- Reorder path params: category before sort
- Remove config.trueUA (not needed)
- Use upvotes/comments fields instead of description
- Remove title slicing
- Change default sort to 'new'
- Remove title from description
- Remove content truncation

* feat(route): add maoyan (猫眼电影) routes

Add three new routes for Maoyan:
- /maoyan/box - Real-time box office ranking
- /maoyan/hot - Currently showing movies
- /maoyan/coming - Upcoming movies

* fix: address PR review comments

- Remove author field from box.ts (releaseInfo is not author)
- Remove unnecessary mobile User-Agent from coming.ts and hot.ts
2026-01-24 13:43:07 +08:00
后稷 417b943241
feat(route): add ZZU (Zhengzhou University) routes (#20941)
* feat(route): add ZZU (Zhengzhou University) routes

Add routes for Zhengzhou University departments:
- news: 新闻网 (要闻速递、教学科研、基层动态、媒体郑大)
- tzhb: 党委统战部 (工作动态、通知公告)
- dzb: 党政办 (新闻资讯、通知公告)
- dwzzb: 党委组织部 (党建工作、干部工作、人才工作、乡村振兴工作)
- xuan: 党委宣传部 (工作动态、通知公告)
- rsc: 人事部 (人事要闻、通知公告、招聘公告)
- jwc: 教务部 (新闻快递、通知公告)
- student: 学生处 (新闻资讯、通知公告)
- kjc: 科研院 (新闻资讯、通知公告)
- ss: 社科院 (新闻资讯、通知公告)
- zcycwb: 资产与财务部 (新闻资讯、通知公告)
- gs: 研究生院 (新闻资讯、通知公告)
- xbx: 校长办 (新闻资讯、通知公告)

* refactor(routes): replace puppeteer with API in dwzzb and fix code style issues

- refactor(dwzzb): use /mp/portal/article/list API endpoint instead of puppeteer
- refactor(all zzu routes): rename type_dict to typeDict (camelCase)
- refactor(dzb, tzhb): remove useless mapping operations
- fix: update maintainers from 'misty' to 'amandus1990'

* refactor(routes/zzu): optimize code style and fix date format

- refactor(student): convert date format from 'yyyy年mm月dd日' to RFC 2822
- fix(tzhb): correct radar URL (hhttps -> https)
- refactor: simplify typeDict formatting across all routes
- refactor: adjust slice limits for better pagination (20 -> 10/15)
- refactor(gs, jwc): simplify title extraction and date cleaning

* fix(routes/zzu): fix date parsing and radar source URLs

- fix(ss): handle different date formats for xwzx (MM-DD) and tzgg (yyyy-mm-dd)
- fix(student): parse Chinese date format (yyyy年mm月dd日) using regex instead of Date constructor
- refactor(all zzu routes): remove protocol from radar[].source URLs
- radar rules can only match URL pathname, not protocol or query strings
2026-01-24 07:53:17 +08:00
Donie Leigh 70576d03a8
feat(route): fetch full content for changelog items (#20953)
* feat(perplexity): fetch full content for changelog items

- Fetch full article content for each changelog item
- Use Puppeteer to render JavaScript-rendered pages
- Remove hero image from description
- Cache parsed content using cache.tryGet

* fix(perplexity): resolve review comments
- Simplify CSS selector for content extraction
- Fix dangling promises issue by properly returning and using Promise results
- Ensure cache mechanism works correctly by returning new objects instead of mutating
- Remove redundant fallback logic
2026-01-24 01:18:15 +08:00
Tony 803c6fc547
fix(route/slashdot): fix import typo 2026-01-24 00:33:13 +08:00
DIYgod c90e71c359
feat(xiaohongshu): add proxy configuration support (#20952)
Allow xiaohongshu routes to bypass anti-scraping measures by routing requests through a configurable proxy. When XIAOHONGSHU_PROXY is set, all xiaohongshu HTTP requests (user, board, notes) will be routed through the proxy endpoint instead of using Puppeteer.

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
2026-01-22 17:17:04 +08:00
jxtan 4c4cbbad1a
feat(route): add codefather (编程导航) routes (#20922)
* feat(route): add LinuxDo RSS routes

- Add /linux-do/posts route for latest posts
- Add /linux-do/top/:period route for trending topics with period filter
- Optimize /linux-do/latest route
- Update namespace documentation with descriptions
- Handle Zstandard compression by using Accept-Encoding: identity

* revert: remove linux-do routes (PR rejected)

* feat(route): add codefather (编程导航) routes

- Add posts route with hot/new/recommend sorting and category filter
- Add questions route with new/hot sorting
- Support for 编程导航 programming community

* fix: address all PR review comments

- Reorder path params: category before sort
- Remove config.trueUA (not needed)
- Use upvotes/comments fields instead of description
- Remove title slicing
- Change default sort to 'new'
- Remove title from description
- Remove content truncation
2026-01-22 11:52:22 +08:00
Tony e9e8cb0845
feat(route): add typeless changelog (#20943) 2026-01-22 09:30:02 +08:00
Tony 02826c6d9c
feat(route): add slashdot (#20942)
* feat(route): add slashdot

* chore: apply changes
2026-01-22 07:02:53 +08:00
Radon Rosborough 685598f0f8
feat(route): add bvisness.me blog route (#20929) 2026-01-21 00:36:03 +00:00
DIYgod 25cd9f1a28
feat: add Cloudflare Containers deployment support (#20932)
- Create Container Worker entry point with load balancing (20 instances)
- Add wrangler-container.toml configuration with KV binding for environment variables
- Configure container to use standard-1 instance type with Chromium support
- Implement dynamic environment variable loading from Cloudflare KV

Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
2026-01-20 15:29:13 +08:00
Donie Leigh 77b7763cd7
feat(route): add perplexity changelog route (#20919)
* feat(route): add perplexity changelog route

* fix: address review comments

- Use ^= instead of *= for href selector
- Remove CSS-in-JS class selector (framer-styles-preset-16bzrdu)
- Use map instead of each + push
- Remove HTML caching (per review feedback)
- Fix date format parsing (MM.DD.YY not YY.MM.DD)
- Fix summary selector fallback logic
- Update maintainer to xbot
2026-01-20 03:13:50 +08:00
Shirley Yi dd5e1ffcf8
feat(route): Add GanjingWorld (#20086)
* Created route for channel videos

* chore: updated route name

* feat: add short video route

* Added Article Route

* Added Posts Route

* chore: change file name

* chore: reorder folder structure

* Update lib/routes/ganjingworld/namespace.ts

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

* fix(route/ganjingworld): fix target url; fix repeated name, fix redundant parsing, fix video poster attribute, fix naming convention

* fix(route/ganjingworld) fix examples

* fix(route/ganjingworld) fix optional empty string

* chore(route/ganjingworld): fix example link

* style: auto format

* New files from Fly.io Launch

* Revert "New files from Fly.io Launch"

This reverts commit 71d9f42f5f0073f35bc34ac4e9417e4a4a1d94fc.

* Fix: resolved requested changes

* fix: implement suggested changes

* fix: fix variable names

* fix: update error messages and improve data handling in Ganjing World routes

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Fly.io <noreply@fly.io>
Co-authored-by: fly-io[bot] <52462049+fly-io[bot]@users.noreply.github.com>
2026-01-20 01:14:22 +08:00
Tony ac1a0230ce
feat(route): discord quests (#20911)
* feat(route): discord quests

* fix(route): handle missing Discord authorization config
2026-01-18 08:58:27 +08:00
Chen Yang 4c7e027ff3
feat(route): add mrinalxdev blog RSS route (#20909)
Co-authored-by: Mike Chen <yang.chen.mike@gojek.com>
2026-01-18 03:25:24 +08:00
redwood9 06858d215d
feat(route): add ai-bot daily-ai-news route (#20851)
* feat(route): add ai-bot daily-ai-news route

* feat(route): add ai-bot daily-ai-news route

* refactor(route/ai-bot): use flatMap and parseDate utility

- Replace push with flatMap for cleaner code
- Use RSSHub's parseDate utility instead of custom Date creation

* refactor(route/ai-bot): use timezone utility instead of hardcoded time
2026-01-17 21:05:01 +08:00
Pilgrim Lyieu 8bb3d6f019
feat(bilibili): add messages routes (#20890)
* feat(bilibili): add messages routes

* fix(bilibili/message): do not display summary when no unread messages

* fix(bilibili/message): update cache duration to use configurable routeExpire
2026-01-16 01:34:43 +00:00
Tony c21c82fc05
feat(route/digg): add digg community posts (#20900)
* feat(route/digg): add digg community posts

* Update lib/routes/digg/community.tsx

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

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-15 22:01:16 +08:00
Vanilla 3ecf9ee350
fix(lib/registry.ts): Allow hide debug info. (#20891) 2026-01-15 19:33:36 +08:00
YuRuiH bef22f9500
feat(route): add some nowcoder route (#20712)
* feat(route): add nowcoder hots content route

* refactor(nowcoder): use query param for hots size

* feat(route): add nowcoder interview experience

* fix(nowcoder/interview): align interview route with RSSHub conventions

* fix(nowcoder/hots): align hots router with RSShub conventions

* fix(nowcoder): polish hots route
2026-01-15 17:03:49 +08:00
Tony 671f05e645
fix(route/rsshub): route updates (#20888)
* fix(route/rsshub): route updates

* fix(handler): simplify data parsing and improve route link formatting
2026-01-15 05:40:50 +08:00
Samuel.G 1f3b11c919
feat(route): add lancedb blog route (#20886)
* feat: add lancedb blog

* resolve comment
2026-01-15 03:04:11 +08:00
Pilgrim Lyieu 0e48234e14
fix(github): allow empty notifications feed (#20875)
* fix(github): allow empty notifications feed

* fix(github): set `allowEmpty` to be always true
2026-01-13 23:07:20 +08:00