* 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
* 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
* 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
---------
* 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
* 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>
* 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
* 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): 少量修复内容
* 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
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.
* 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
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>
- 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>
* 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
* 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
* 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