* feat(route): add supercell game blog routes
- Add support for 5 supercell games (Clash Royale, Brawl Stars, Clash of Clans, Boom Beach, Hay Day)
- Support 12 languages (en, zh, zh-hans, fr, de, id, it, ja, ko, pt, ru, es)
- Extract blog posts from __NEXT_DATA__ JSON
- Cache full article content with fallback to summary
* feat: add Supercell game blog route
* fix(supercell): use regex to extract __NEXT_DATA__ JSON, remove cheerio dependency
* fix(supercell): use bodyCollection to render content, fix namespace capitalization
* fix: improve supercell blog route to extract full content from bodyCollection
- Implement renderRichText and renderNodeContent functions to properly parse rich text JSON format
- Handle both TextBlock and FeatureBlock types from bodyCollection
- Support text formatting marks (bold, italic, underline, code)
- Add proper type annotations to handler function and variables
- Use Next.js JSON endpoint instead of HTML parsing for better performance
- Add error handling with fallback to description if full content extraction fails
* feat(supercell): add ImageBlock and CarouselBlock support for multi-game content extraction
* fix(supercell): use else-if chain and for-of loop for block handling
* refactor(supercell): extract renderBlock function to reduce complexity
* fix(supercell): use switch statement for block type handling
* fix(route): fix wrong title of /ecnu/bksy
Co-authored-by: FrozenStarrrr <frozenstars@qq.com>
* feat(route): add ECNU Software Engineering Insitute notices route
* fix(route): modify wrong radar target
* add School of Computer Science and Technology ECNU notices route
* add School of data science and engineering notices route
* add School of Comm. & Elec. Engineering notices route
* add School of Geospace A.I. Engineering ECNU notices route
* add ECNU faculty of Edu. notices route
* add ECNU faculty of Earth Sci. notices route
* add ECNU Meng Xiancheng notices route
* add ECNU Guanghua notices route
* fix(route): add empty line at the end of files.
* add department of history ECNU notices route
* add department of Philo. ECNU notices route
* fix(route): add maintainer of /ecnu/bksy
* fix(route): delete unnecessary try-catch statment, modified incorrect url, fix image url.
* fix(route): fix unnecessary try-catch, description, condition and wrond url
* fix(route): fix image display
* fix(route): fix problems in bksy.ts
* feat(route): add ecnu/pharm
* feat(route): add art insititute of ECNU
* feat(route): add route of school of Stat. ECNU
* feat(route): add route of school of Phy. & Elec., ECNU
* feat(route): add route of school of Chem. & Mol., ECNU
* feat(route): add route of school of Eco. & Envir., ECNU
* feat(route): add route of school of Comm., ECNU
* feat(route): add route of school of International Chinese Studies, ECNU
* feat(route): add route of school of Psy. & cognitive Sci., ECNU
* feat(route): add route of college of Phy. Edu. & health , ECNU
* feat(route): add route of college of public management, ECNU
* feat(route): add route of college of Marxismus, ECNU
* fix(routes): fix incorrect time display and remove unnecessary codes
* fix(foute): format the code
---------
Co-authored-by: FrozenStarrrr <frozenstars@qq.com>
* tumblr.com: Code to access tagged/ endpoint
* tumblr.com: Change processPost for tagged endpoint
* Tumblr.com: "Tagged" response is a list of posts
* tumblr.com: removed unnecessary link
* tumblr.com: fixing api key auth as per https://www.tumblr.com/docs/en/api/v2#authentication
* tumblr.com: user query params properly
* tumblr.com: compliance with Script Standard
* tumblr.com: ensuring `api_key` works for posts.ts
* tumblr: don't mess up the types this time
* tumblr/tagged/:tag Feed Description + Link
* /tumblr Can now parse blog answers
* /tumblr "answer" is the correct type
* /tumblr: Better format for blog answers
* /tumblr: fixed misplaced </p> tag
* lib/routes/tumblr/tagged.ts: Removed unnecessary template literals
Co-authored-by: Tony <TonyRL@users.noreply.github.com>
* /tumblr/tagged: Only one category
* /tumblr: Fixed how the asker's url is handled
* Ran ESLint
---------
Co-authored-by: Tony <TonyRL@users.noreply.github.com>
* fix(route/huggingface): restore article list and author parsing
- lib/routes/huggingface/blog-zh.ts: Read articles from data.props.allBlogs and construct /blog/zh/:slug links; use authorsData (fullname or name) for author names.
- lib/routes/huggingface/blog.ts: Read articles from data.props.allBlogs and switch author parsing to authorsData (fullname or name); preserve upvotes and thumbnail handling.
- lib/routes/huggingface/daily-papers.ts: Relax selector to read data.props from div[data-target="DailyPapers"] so DailyPapers props can be retrieved.
* fix(route/huggingface): use api instead of http; title is at right property.
* fix(route/substack): clean up xml before parsing
* fix(route/substack): use ofetch directly to avoid xml parse errors
* fix(route/substack): use isValidHost to validate the user
* feat(route/weibo): Fetch visitor Cookies before accessing some APIs
Signed-off-by: Rongrong <i@rong.moe>
* fix(route/weibo/utils): getCookies: return too early on slow connection
Signed-off-by: Rongrong <i@rong.moe>
* fix(route/weibo/utils): getCookies: Redirection assertion is too loose
Signed-off-by: Rongrong <i@rong.moe>
---------
Signed-off-by: Rongrong <i@rong.moe>
The `rss-parser`'s internal `parseURL` method can fail with an "Error:
Non-whitespace before first tag" on feeds that are gzipped or contain a
Byte Order Mark (BOM), as it lacks robust decompression and encoding
handling.
This change switches the Phoronix route to:
Fetch the raw XML string using `ofetch`, which handles compression and
encoding correctly.
Pass the resulting clean string to `parser.parseString()`.
This resolves the parsing issue and ensures the route is reliable.
* ci(docker-release): enable ZRAM to reduce memory pressure
This should hopefully help reduce stuck build jobs. Note that this can't
completely eliminate stuck builds since this is usually caused by
synchronization issues in QEMU.
Signed-off-by: Rongrong <i@rong.moe>
* build(Dockerfile): Add support for puppeteer-real-browser
Sets CHROMIUM_EXECUTABLE_PATH on AMD64 and installs essential
dependencies.
Signed-off-by: Rongrong <i@rong.moe>
* fix(route/picnob): bring back support for diygod/rsshub:chromium-bundled
The support for puppeteer-real-browser on diygod/rsshub:chromium-bundled
was improperly implemented in 400fb1fa49 ("fix(route/picnob): use
puppeteer-real-browser to pass cf check (#20478)") and was then removed
in 2cb11d7c7e ("fix(route/picnob): support img not in slide").
With proper support for puppeteer-real-browser added to Dockerfile, this
patch brings back the support for diygod/rsshub:chromium-bundled.
This partially reverts commit 2cb11d7c7e ("fix(route/picnob): support
img not in slide").
Signed-off-by: Rongrong <i@rong.moe>
* chore(route/picnob): add myself as maintainer
This route explicitly consult CHROMIUM_EXECUTABLE_PATH from the docker
image variant `diygod/rsshub:chromium-bundled`. Since I am the author of
the image variant, add myself as one of route maintainers so that I am
mentioned when the route is broken.
Signed-off-by: Rongrong <i@rong.moe>
# Conflicts:
# lib/routes/picnob/user.ts
---------
Signed-off-by: Rongrong <i@rong.moe>