* 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
* 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>
* 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
* 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>
* 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>
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>
* 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>
* 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
* 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>
* 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>
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.
* 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.
---------