Tony 8ce50e4a39 feat: migrate deprecated routes (#23071)
* feat: migrate batch-0

* feat: migrate batch-a

batch-0
Migrated (3 routes)
┌────────────────────────────────┬───────────────────────┐
│            old path            │       new path        │
├────────────────────────────────┼───────────────────────┤
│ /755/user/:username            │ /7gogo/user/:username │
├────────────────────────────────┼───────────────────────┤
│ /99percentinvisible/transcript │ unchanged             │
├────────────────────────────────┼───────────────────────┤
│ /forum4399/:mtag               │ /4399/forums/:mtag    │
└────────────────────────────────┴───────────────────────┘
Not needed — already covered by an existing route (3 units, 6 files)
┌────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                    deleted                     │                                                covered by                                                │
├────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 10000link/news.js (/10000link/news/:category?) │ 10000link/info.ts → /10000link/info/newslists/My01                                                       │
├────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 199it/{index,category,tag,utils}.js            │ 199it/index.tsx → /199it/:category{.+}?;                                                                 │
├────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ 60s-science/transcript.js (/60s-science)       │ scientificamerican/podcast.ts → /scientificamerican/podcast/:id?                                         │
└────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Dropped (1) — (/12379)

batch-a
Migrated (12 routes, 26 new files) — acm/amturingaward, acwifi, allpoetry, aozora/newbook, archdaily, arxiv/:query, asahi, asml/press-releases, autotrader/:query, av01/actor, av01/tag, axis-studios/work.
Not needed — already covered (8 registrations)
┌─────────────────────────────────────────────────┬────────────────────────────────────────────────────────────┐
│                     deleted                     │                         covered by                         │
├─────────────────────────────────────────────────┼────────────────────────────────────────────────────────────┤
│ adquan/index.js (/adquan/:type?)                │ adquan/index.ts → /adquan                                  │
├─────────────────────────────────────────────────┼────────────────────────────────────────────────────────────┤
│ aflcio/blog.js                                  │ aflcio/blog.ts                                             │
├─────────────────────────────────────────────────┼────────────────────────────────────────────────────────────┤
│ amazfitwatchfaces/{fresh,updated,top,search}.js │ amazfitwatchfaces/index.ts → /:device/:sort/:searchParams? │
├─────────────────────────────────────────────────┼────────────────────────────────────────────────────────────┤
│ appsales/index.js                               │ app-sales/ namespace                                       │
├─────────────────────────────────────────────────┼────────────────────────────────────────────────────────────┤
│ anytxt/release-notes.js                         │ anytxt/release-notes.ts                                    │
├─────────────────────────────────────────────────┼────────────────────────────────────────────────────────────┤
│ aqicn/index.js                                  │ aqicn/aqi.ts;                                              │
└─────────────────────────────────────────────────┴────────────────────────────────────────────────────────────┘
Dropped (3) — algocasts/all.js (algocasts.io 404), aiyanxishe/home.js (api.yanxishe.com no longer resolves), amd/graphicsdrivers.js

* feat: migrate batch-b

Migrated (8 registrations, 14 new files)
┌─────────────────────────────────────────────────────────┬────────────────────────────────────────────────────────────────────┐
│                        old path                         │                              new path                              │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────┤
│ /babykingdom/:id/:order?                                │ /baby-kingdom/:id/:order?                                          │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────┤
│ /bahamut/creation/:author/:category?                    │ /gamer/creation/:author/:folder? (param renamed category→folder)   │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────┤
│ /bahamut/creation_index/:category?/:subcategory?/:type? │ /gamer/creation_index/... (unchanged shape)                        │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────┤
│ /banyuetan/byt/:time?                                   │ unchanged — new byt.ts added into the existing banyuetan namespace │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────┤
│ /benedictevans                                          │ /ben-evans                                                         │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────┤
│ /blow-studio                                            │ /blowstudio                                                        │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────┤
│ /blur-studio                                            │ /blur                                                              │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────────────────────────────┤
│ /booth.pm/shop/:subdomain                               │ unchanged (dir booth-pm → booth.pm)                                │
└─────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────────────┘
Not needed — already covered (3)
┌─────────────────────────────────────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│                   deleted                   │                                                              covered by                                                               │
├─────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ banyuetan/index.js (/banyuetan/:name)       │ existing banyuetan/index.ts → /banyuetan/:id?                                                                                         │
├─────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ bandisoft/index.js (/bandisoft/:id?/:lang?) │ existing bandisoft/history.ts → /bandisoft/history/:id?/:language? (same {lang}.bandisoft.com/{id}/history/ pages)                    │
├─────────────────────────────────────────────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ bookwalkertw/news.js (/bookwalkertw/news)   │ existing bookwalker/search.tsx → /bookwalker/search/order=sell_desc&series_display=1&d=1 - the exact URL the deprecated route fetched │
└─────────────────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Dropped (2)
- bibgame/category.js (/bibgame/:category?/:type?) - bibgame.com is now a parked-domain lander.
- bsblog123/index.js (/bsblog123) - bsblog123.com no longer resolves.

* feat: migrate batch-c

Migrated (26)
cell/cell, cell/cover, centbrowser/history, cgtn/most, cgtn/opinions, chaoli, checkee, chicagotribune, chinafile, chocolatey/software, chouti, chouti/top, chsi/zszcgd, chuhaibiji, cninfo/announcement, coolbuy/newest, cowlevel/element, creaders/headline, csc/notice, ctei/news, ctfhub/search, ctfhub/upcoming.

Path changed (3):
┌───────────────────────────────────┬──────────────────────┐
│                old                │         new          │
├───────────────────────────────────┼──────────────────────┤
│ /checkra1n/releases               │ /checkra.in/releases │
├───────────────────────────────────┼──────────────────────┤
│ /cnu/selected, /cnu/discovery/... │ /cnu.cc/...          │
├───────────────────────────────────┼──────────────────────┤
│ /cpython/:pre?                    │ /python/:pre?        │
└───────────────────────────────────┴──────────────────────┘

Not needed — already covered (3)
┌────────────────────────┬────────────────────────┐
│        deleted         │  covered by            │
├────────────────────────┼────────────────────────┤
│ cbndata/information.js │ cbndata/information.ts │
├────────────────────────┼────────────────────────┤
│ ccg/index.js           │ ccg/index.ts           │
├────────────────────────┼────────────────────────┤
│ chinadaily/english.js  │ chinadaily/language.ts │
└────────────────────────┴────────────────────────┘

Dropped (3)

- cfan/news.js
- citavi/index.js
- clb/commentary.js

* feat: migrate batch-d

Migrated (18 units)

daodu, daxiaamu/home, dbaplus/activity, dcinside/board, dekudeals, deloitte/industries, dgtle ×5 (index, whale, whale-rank, trade, keyword), digitaling ×3, discuss, disqus/posts, dongmanmanhua/comic.

Moved to top-level namespaces:
┌────────────────────────────────────────────────┬───────────┐
│                      old                       │    new    │
├────────────────────────────────────────────────┼───────────┤
│ /dgut/xsc/:type?                               │ unchanged │
├────────────────────────────────────────────────┼───────────┤
│ /dlmu/news/:type, /dlmu/grs/zsgz/:type         │ unchanged │
├────────────────────────────────────────────────┼───────────┤
│ /dlu/jiaowu/news                               │ unchanged │
├────────────────────────────────────────────────┼───────────┤
│ /dpu/jiaowu/news/:type?, /dpu/wlfw/news/:type? │ /dlpu/…   │
└────────────────────────────────────────────────┴───────────┘

Not needed — already covered (6)
┌─────────────────────────────────────────────┬───────────────────────────────────────────────────────────────┐
│                   deleted                   │                          covered by                           │
├─────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ dailyart/index.js (/dailyart/:language?)    │ getdailyart/index.ts → /getdailyart/:language? (path changed) │
├─────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ dbaplus/tab.js (/dbaplus/:tab?)             │ dbaplus/rss.ts (/) + dbaplus/new.ts (/news/:id?)              │
├─────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ deepl/blog.js                               │ deepl/blog.ts — identical path                                │
├─────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ dw/index.js (/dw/:lang?/:caty?)             │ dw/news.ts + dw/rss.ts                                        │
├─────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ duozhi/index.js                             │ duozhi/index.ts                                               │
├─────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ universities/dgut/jwc.js (/dgut/jwc/:type?) │ dgut/jwb.ts → /dgut/jwb/:type?;                               │
└─────────────────────────────────────────────┴───────────────────────────────────────────────────────────────┘

Dropped (3 units, 6 registrations)
- ddrk
- dida365/habit-checkins.js
- ditto/changes.js

* feat: migrate batch-e

Migrated (11 units)
edrawsoft/mindmap, emi-nitta, etherscan/transactions, etoland/board, europapress, eztv/imdb, ebb, eeo.

Path changed (3):
┌──────────────────────┬───────────────────────┐
│         old          │          new          │
├──────────────────────┼───────────────────────┤
│ /eleme/open/announce │ /ele.me/open/announce │
├──────────────────────┼───────────────────────┤
│ /everything/changes  │ /voidtools/changes    │
├──────────────────────┼───────────────────────┤
│ /engadget/:lang?     │ /engadget/            │
└──────────────────────┴───────────────────────┘

Not needed (1 unit, 2 registrations + 2 dangling)
/dytt and /dytt/index

Dropped (2 units, 4 registrations)
- enclavebooks/{category,user,collection}.js

* feat: migrate batch-f

┌────────────────────────────────────────────────────────────────────┬───────────────────────────────────────────────────────┐
│                                old                                 │                          new                          │
├────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────┤
│ /fanfou                                                            │ unchanged                                             │
├────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────┤
│ /fashionnetwork/news/:sectors?/:categories?/:language?             │ /fashionnetwork/news/:sectors?/:categories?/:country? │
├────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────┤
│ /fashionnetwork/headline/:country?                                 │ unchanged                                             │
├────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────┤
│ /fgo/news                                                          │ /fate-go/news                                         │
├────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────┤
│ /fnal/news/:category?                                              │ unchanged                                             │
└────────────────────────────────────────────────────────────────────┴───────────────────────────────────────────────────────┘
Universities (a-f)
- fzu/news-min.ts deleted

* feat: migrate batch-g

Migrated

gab/user, gameres, gitlab, gocomics, gushiwen, guat, guet, gwern, gzmtu, gdou, ngd, gov/caict, gov/cnca, gov/harbin/kjj, gov/mohrss/sbjm, gov/mohurd/policy, gov/shanxi/rst, gov/wuhan, gov/beijing/mhc.
/gdoujwc → /gdou/jwc;
/ngd

path changed (14)
┌─────────────────────────────────────────────────────────┬────────────────────────────────────────────┐
│                           old                           │                    new                     │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /geektime/column/:cid                                   │ /geekbang/column/:cid                      │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /guardian/:type                                         │ /theguardian                               │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /grandchallenge/                                        │ /grand-challenge/                          │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /go.jp/mofa                                             │ /mofa                                      │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /gov/beijing/bjeea/:type                                │ /bjeea/:type                               │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /gov/hubei/hbsia/:caty                                  │ /hbsea/:id                                 │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /gov/guangdong/{edu,eea}/:caty                          │ /gov/gd/{edu,eea}/:caty                    │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /gov/hunan/notice/:type                                 │ /gov/ccgp-hunan/notice/:type?              │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /gov/veterans/:type                                     │ /gov/mva/:type                             │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /gov/veterans/hebei/:type                               │ /gov/hebei/tyjrswt/:type                   │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /gov/taiwan/mnd                                         │ /gov/mnd                                   │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /gov/xinwen/tujie/:caty                                 │ /gov/cn/xinwen/tujie/:caty                 │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /gov/city/:name/:category (nanjing-only dispatcher)     │ /gov/nanjing/:category                     │
├─────────────────────────────────────────────────────────┼────────────────────────────────────────────┤
│ /gov/province/:name/:category (jiangsu-only dispatcher) │ /gov/jiangsu/:category                     │
└─────────────────────────────────────────────────────────┴────────────────────────────────────────────┘
gov/shanghai/sthj → gov/sh/sthj
gov/cppcc

Not needed (2)
- gnn/gnn.js - covered by batch-b's /gamer/gnn/:category?
- getdailyart - from batch-d

Dropped (8 units)
- galaxylab, guanggoo, gov/chongqing/ljxq
- gov/sapprft/7026 → gov/nppa
- gaoqing/latest
- gov/statecouncil/briefing
- gov/shuju

* refactor: cleanup

* feat: migrate batch-h

Migrated (12 units)

hackerone, hainanu/ssszs, hanime/video, hentaimama/videos, hexo, huya/live, hbut/news, henu/news, hfut/tzgg, hnust, hhu/libNews.
hdx -> /huodongxing/explore

Migrated - public path changed (3)
┌─────────────────────────────────┬───────────────────────────────────────────┐
│               old               │                    new                    │
├─────────────────────────────────┼───────────────────────────────────────────┤
│ /porn-images-xxx/:type?/:name?  │ /hentai-cosplays-xxx/:type?/:name?        │
├─────────────────────────────────┼───────────────────────────────────────────┤
│ /hatena/anonymous_diary/archive │ /hatelabo/anonymous_diary/archive         │
├─────────────────────────────────┼───────────────────────────────────────────┤
│ /hbut/cs/:type                  │ /hbut/scs/:type (school renamed cs → scs) │
└─────────────────────────────────┴───────────────────────────────────────────┘

Not needed (2)
- hkej/index.js -> master's hkej/index.tsx
- /hubu/news.js -> hubu/index.ts

Dropped (3 units)
- haohaozhu
- hudongba
- hhu/libNewsc

* feat: migrate batch-i

Migrated (8 units)
┌───────────────┬────────────────────────────────┐
│     route     │              path              │
├───────────────┼────────────────────────────────┤
│ ichunqiu      │ /ichunqiu                      │
├───────────────┼────────────────────────────────┤
│ iciba         │ /iciba/:days?/:img_type?       │
├───────────────┼────────────────────────────────┤
│ icity         │ /icity/:id                     │
├───────────────┼────────────────────────────────┤
│ icourse163    │ /icourse163/newest             │
├───────────────┼────────────────────────────────┤
│ idownloadblog │ /idownloadblog                 │
├───────────────┼────────────────────────────────┤
│ ifnews        │ /ifnews/:cid                   │
├───────────────┼────────────────────────────────┤
│ im2maker      │ /im2maker/:channel?            │
├───────────────┼────────────────────────────────┤
│ itslaw        │ /itslaw/judgements/:conditions │
└───────────────┴────────────────────────────────┘

Dropped (2 units)
- interesting-sky
- invisionapp/inside-design

* feat: migrate batch-j

Migrated (5 units)
┌────────────────────────────────────────────────┬────────────────────────────────────┐
│                      old                       │                new                 │
├────────────────────────────────────────────────┼────────────────────────────────────┤
│ /jgsu/jwc                                      │ unchanged                          │
├────────────────────────────────────────────────┼────────────────────────────────────┤
│ /jlbtc/:category?, /jlbtc/jwc/:id?,            │ unchanged (jwc param now           │
│ /jlbtc/kyc/:category?                          │ :category{.+}?)                    │
├────────────────────────────────────────────────┼────────────────────────────────────┤
│ /jnu/yw/:type?                                 │ unchanged                          │
├────────────────────────────────────────────────┼────────────────────────────────────┤
│ /ju/jwc/:type?                                 │ /jiangnan/jwc/:type?               │
├────────────────────────────────────────────────┼────────────────────────────────────┤
│ /jx3/:caty?                                    │ /xoyo/jx3/:caty?                   │
│                                                │                                    │
└────────────────────────────────────────────────┴────────────────────────────────────┘

Dropped (2)
- universities/jlu/oa.js (/jlu/oa)
- universities/jnu/xysx/index.js (/jnu/xysx/:type)

* feat: migrate batch-k

Migrated (7 units)
┌─────────────────────────────────────┬──────────────────┐
│                 old                 │       new        │
├─────────────────────────────────────┼──────────────────┤
│ /kaiyan/index                       │ /kaiyanapp/index │
├─────────────────────────────────────┼──────────────────┤
│ /kaoyan                             │ unchanged        │
├─────────────────────────────────────┼──────────────────┤
│ /kchuhai                            │ /kchuhai/report  │
├─────────────────────────────────────┼──────────────────┤
│ /kenshin/:category?/:type?          │ unchanged        │
├─────────────────────────────────────┼──────────────────┤
│ /keyakizaka46/{news,blog}           │ unchanged        │
├─────────────────────────────────────┼──────────────────┤
│ /kongfz/{people/:id,shop/:id/:cat?} │ unchanged        │
├─────────────────────────────────────┼──────────────────┤
│ /kmust/jwc/:type?                   │ unchanged        │
└─────────────────────────────────────┴──────────────────┘

Not needed (1)
- kuai/id.js (/kuai/:id) → merged into kuai/index.ts as /kuai/:category?

Dropped (3 units, 4 registrations)
- kingarthur (/kingarthur/:type)
- kmust/job/{careers,jobfairs}
- kotaku/story

* feat: migrate batch-l

law/* aggregate
┌───────────┬──────────────────────────────────────────────┐
│    old    │                     new                      │
├───────────┼──────────────────────────────────────────────┤
│ /law/dh   │ dehenglaw                                    │
├───────────┼──────────────────────────────────────────────┤
│ /law/jh   │ junhe                                        │
├───────────┼──────────────────────────────────────────────┤
│ /law/zl   │ zhonglun                                     │
├───────────┼──────────────────────────────────────────────┤
│ /law/gf   │ /grandwaylaw                                 │
├───────────┼──────────────────────────────────────────────┤
│ /law/hq   │ /haiwen-law                                  │
├───────────┼──────────────────────────────────────────────┤
│ /law/hw   │ /glo                                         │
├───────────┼──────────────────────────────────────────────┤
│ /law/jctd │ /jtn                                         │
├───────────┼──────────────────────────────────────────────┤
│ /law/jtc  │ /allbrightlaw                                │
├───────────┼──────────────────────────────────────────────┤
│ /law/ts   │ /tongshang                                   │
└───────────┴──────────────────────────────────────────────┘

Migrated - same public path (9 units)
lagou/jobs, latexstudio/home, letterboxd, lifetimes, lizhi/user, lwn/alerts, and lit, lntu/jwnews, lyu/news

Migrated - public path changed (3 units)
┌─────────────────────────────────────────┬────────────────────────────────────┐
│                        old              │         new                        │
├─────────────────────────────────────────┼────────────────────────────────────┤
│ /lastfm/{recent,loved}/:user,           │ /last.fm/                          │
│ /lastfm/top/:country?                   │                                    │
├─────────────────────────────────────────┼────────────────────────────────────┤
│ /liyuan-forums/threads[...]             │ /liyuans/threads                   │
├─────────────────────────────────────────┼────────────────────────────────────┤
│ /lolapp/{recommend,article/:uuid}       │ /qq/mlol/{recommend,article/:uuid} │
└─────────────────────────────────────────┴────────────────────────────────────┘

Dropped (1 unit,)
- laosiji

* feat: migrate batch-m

Migrated - same public path (20 units)

mafengwo, mamibuy, manictime/releases, maoyan, marginnote/tag, mathunion/fields-medal, meihua, meipai/user, meituan/open/announce, melon/chart, mihoyo, missevan, moxingfans, mubu/explore, muchong, monotype/article, mcdonalds, and mit/csail/news, mit/ocw-top.

Migrated - public path changed (5)
┌──────────────────────────────────────────────┬─────────────────────────────────────────────┐
│                     old                      │                new                          │
├──────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ /method-studios/:menu?                       │ /company3                                   │
├──────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ /mhw/{update,news}                           │ /monsterhunter/{update,world-iceborne-news} │
├──────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ /microsoft-store/updates/:productid/:market? │ /microsoft/store/updates/                   │
├──────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ /manxiaosi/book/:id                          │ /jjmhw/book/:id                             │
├──────────────────────────────────────────────┼─────────────────────────────────────────────┤
│ /mit/graduateadmissions/:type/:name          │ /mit/oge/:type?/:name?                      │
└──────────────────────────────────────────────┴─────────────────────────────────────────────┘

Dropped (7 units)
magireco, mcbbs, micmicidol, rthk/mediadigest, manhuadb, mofish

* refactor: cleanup

* feat: migrate batch-n

Migrated - same public path (8)
nobelprize/:caty?, nosetime, noi, nchu/jwc, nciae, njfu/jwc, njtech/jwc.

Migrated - public path changed (2)
┌──────────────────────┬──────────────────────┐
│         old          │   new                │
├──────────────────────┼──────────────────────┤
│ /nace/blog/:sort?    │ /naceweb/blog/:sort? │
├──────────────────────┼──────────────────────┤
│ /novel/uukanshu/:uid │ /uukanshu/:uid       │
└──────────────────────┴──────────────────────┘

Not needed - already covered (3)
- novel/{biquge,biqugeinfo}.js → biquge
- nku/jwc → nankai/jwc.ts
- nudt/yjszs → nudt/yjszs.ts

Dropped (6)
navisec, noi/rg-news, now/rank, nwpu, nuc, nvidia/webdriverupdate

* feat: migrate batch-o

Migrated (3)
┌────────────┬─────────────────────┐
│   route    │        path         │
├────────────┼─────────────────────┤
│ ofweek     │ /ofweek/news        │
├────────────┼─────────────────────┤
│ onejav     │ /onejav/:type/:key? │
├────────────┼─────────────────────┤
│ onenotegem │ /onenotegem/release │
└────────────┴─────────────────────┘

Not needed (2)
- one/index.js -> wufazhuce/one.ts
- ornl/news -> ornl/all-news

Dropped (1 units)
- owspace/read

* feat: migrate batch-p

Migrated - same public path (5 units)
patchwork.kernel.org/comments/:id, phrack, piapro, polimi/news/:language?, proletar/:type?/:id?.

Migrated - public path changed (2)
┌────────────────────────────┬───────────────────────────────┐
│            old             │         new                   │
├────────────────────────────┼───────────────────────────────┤
│ /parcel/hermesuk/:tracking │ /evri/:tracking (rebrand)     │
├────────────────────────────┼───────────────────────────────┤
│ /project-zero-issues       │ /chromium/project-zero-issues │
└────────────────────────────┴───────────────────────────────┘

Not needed - already covered (1)
- potplayer/update.js → master daum/potplayer.ts

Dropped (3)
- paidai, pmcaff, ptpress/book

* feat: migrate batch-q

Migrated - same public path (5)
┌───────────┬─────────────────────────────┐
│   route   │            path             │
├───────────┼─────────────────────────────┤
│ qnap      │ /qnap/release-notes/:id     │
├───────────┼─────────────────────────────┤
│ qttabbar  │ /qttabbar/change-log        │
├───────────┼─────────────────────────────┤
│ queshu    │ /queshu/{sale,book/:bookid} │
├───────────┼─────────────────────────────┤
│ qutoutiao │ /qutoutiao/category/:cid    │
├───────────┼─────────────────────────────┤
│ qzcea     │ /qzcea/:caty?               │
└───────────┴─────────────────────────────┘

Migrated - public path changed (1)
- /qcloud/mlvb/changelog → /tencent/qcloud/mlvb/changelog

* feat: migrate batch-r

Migrated - same public path (3 units)
rescuetime/release-notes/:os?, ruby-china, rmlt/idea*.
/rmlt/idea/:category? -> new /rmlt/idea

Migrated - public path changed (4)
┌────────────────────────────┬────────────────────────────┐
│            old             │                   new      │
├────────────────────────────┼────────────────────────────┤
│ /react/react-native-weekly │ /reactnativenewsletter     │
├────────────────────────────┼────────────────────────────┤
│ /remote-work/:caty?        │ /yuancheng.work/:caty?     │
├────────────────────────────┼────────────────────────────┤
│ /rf/article                │ /eefocus/rf/article        │
├────────────────────────────┼────────────────────────────┤
│ /rthk-news/:lang/:category │ /rthk/news/:lang/:category │
└────────────────────────────┴────────────────────────────┘

* feat: migrate batch-t

Migrated - same public path (13)
samsungmembers, secshi, sesame/release_notes, sexinsex, simonsfoundation, simpread, sketch, socialbeta/home, soundcloud, ssydt/article, sznews/ranking, shanbay/checkin, scu, shanghaitech, shou/www, swufe/seie, swust, sctu/jwc.

Migrated - public path changed (7)
┌────────────────────────────────────────────┬───────────────────────────────────────────────────────────────┐
│                    old                     │                              new                              │
├────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ /siren/news                                │ /hypergryph/siren/news                                        │
├────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ /socialclub/events/:game?                  │ /rockstargames/socialclub/events/:game?                       │
├────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ /security/pulses                           │ /sec.today/pulses                                             │
├────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ /souyun/today                              │ /sou-yun/today                                                │
├────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ /soul/:id, /soul/posts/hot/:pid*           │ /soulapp/:id, /soulapp/posts/tag/:tid                         │
├────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ /shanbay/footprints/:category?             │ /shanbay/news/:category?                                      │
├────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ /sctu/xgxy                                 │ /sctu/it                                                      │
├────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ /slu/                                      │ /lixin/                                                       │
└────────────────────────────────────────────┴───────────────────────────────────────────────────────────────┘

Dropped (4)
- scboy/thread
- sznews/press
- steamgifts/discussions
- semiconductors/latest-news -> semiconductors/index

* feat: migrate batch-t

Migrated - same public path (7)
technologyreview, testerhome/newest, thunderbird/release, tianyancha/hot, touhougarakuta/:language/:type, trakt/collection, thu -> tsinghua/{career,info}.

Migrated - public path changed (7)
┌──────────────────────────────────────────────────────────┬──────────────────────────────────────┐
│                           old                            │                 new                  │
├──────────────────────────────────────────────────────────┼──────────────────────────────────────┤
│ /totalcommander/whatsnew                                 │ /ghisler/whatsnew                    │
├──────────────────────────────────────────────────────────┼──────────────────────────────────────┤
│ /tingshen                                                │ /gov/court                           │
├──────────────────────────────────────────────────────────┼──────────────────────────────────────┤
│ /tucaoqq/post/:project/:key                              │ /qq/txc/post/:project                │
├──────────────────────────────────────────────────────────┼──────────────────────────────────────┤
│ /weixin/miniprogram/{framework,release,devtools,wxcloud} │ /qq/weixin/miniprogram/              │
├──────────────────────────────────────────────────────────┼──────────────────────────────────────┤
│ /wechat-open/pay/announce                                │ /qq/weixin/pay/announce              │
├──────────────────────────────────────────────────────────┼──────────────────────────────────────┤
│ /tprtc/{news,cqzr,qyzc}                                  │ /tpre/                               │
├──────────────────────────────────────────────────────────┼──────────────────────────────────────┤
│ /topbook/{overview/:id?,today}                           │ /topbook/:id?                        │
└──────────────────────────────────────────────────────────┴──────────────────────────────────────┘
/tingdiantz/95598/:province/:city/:district? -> /sttcq/:province/:city/:district?
/tingdiantz/nanjing -> /sgcc/95598/blackoutNotice/:adcode

Dropped (4)
- tanchinese
- titsguru
- wechat-open/community/{announce,question} - login wall

sm2 benchmark
┌───────────────────────────┬────────┬─────────┬─────────┬───────┬──────────────────────┐
│            lib            │  sm3   │ sm4 enc │ sm4 dec │  sm2  │ per request envelope │
├───────────────────────────┼────────┼─────────┼─────────┼───────┼──────────────────────┤
│ sm-crypto@0.5.6           │ 245k/s │ 166k/s  │ 3.0k/s  │ 72/s  │ 14.3ms               │
├───────────────────────────┼────────┼─────────┼─────────┼───────┼──────────────────────┤
│ sm-crypto-v2@1.15.1       │ 281k/s │ 130k/s  │ 2.5k/s  │ 343/s │ 3.3ms                │
├───────────────────────────┼────────┼─────────┼─────────┼───────┼──────────────────────┤
│ gm-crypto@0.1.12          │ 265k/s │ 173k/s  │ 2.6k/s  │ 58/s  │ 17.5ms               │
└───────────────────────────┴────────┴─────────┴─────────┴───────┴──────────────────────┘

* refactor: cleanup

* feat: migrate batch-u

┌─────────────────────────────────────────────┬───────────────────────────────────────┐
│                     old                     │            new                        │
├─────────────────────────────────────────────┼───────────────────────────────────────┤
│ /us/supremecourt/argument_audio/:year?      │ /supremecourt/argument_audio/:year?   │
├─────────────────────────────────────────────┼───────────────────────────────────────┤
│ /cia/foia-annual-report (handler under us/) │ /cia/foia-annual-report               │
├─────────────────────────────────────────────┼───────────────────────────────────────┤
│ /treasury/press-releases/:category?/:title? │ unchanged                             │
├─────────────────────────────────────────────┼───────────────────────────────────────┤
│ /ustr/press-releases/:year?/:month?         │ /ustr/press-releases                  │
└─────────────────────────────────────────────┴───────────────────────────────────────┘

Migrated - same public path (6 units)
uisdc/hangye/:caty?, un/scveto, unit-image/films/:type?, uwants/:fid, usst/jwc, utdallas/isso

Migrated - public path changed (1)
- /ui-cn/{article,user/:id} → /ui.cn/

* feat: migrate batch-v

Migrated - public path changed (4)
┌────────────────────────────┬──────────────────────────────────┐
│            old             │               new                │
├────────────────────────────┼──────────────────────────────────┤
│ /vgn/:platform?            │ /vgnlab                          │
├────────────────────────────┼──────────────────────────────────┤
│ /voa/:language/:channel?   │ /voanews/:language/:channel?     │
├────────────────────────────┼──────────────────────────────────┤
│ /vol/:mode?                │ /kzo.moe                         │
├────────────────────────────┼──────────────────────────────────┤
│ /vscode/marketplace/:type? │ /visualstudio/marketplace/:type? │
└────────────────────────────┴──────────────────────────────────┘

Migrated - same public path (1)
- /vulture/:tag/:excludetags?

Not needed - already covered (1)
- vocus/user.js

* feat: migrate batch-w

Migrated - same public path (7 units)
wegene, weidian/goods/:id, wenxuecity, whb/:category, wto/dispute-settlement/:year?, wzbc/:type?, webtoons/:lang/:category/:name/:id.

Migrated - public path changed (4)
┌─────────────────────────────────────┬───────────────────────────────────┐
│                 old                 │            new                    │
├─────────────────────────────────────┼───────────────────────────────────┤
│ /watchface/:watch_type?/:list_type? │ /bandbbs/:watch_type?/:list_type? │
├─────────────────────────────────────┼───────────────────────────────────┤
│ /webtoons/naver/:id                 │ /naver/comic/:id                  │
├─────────────────────────────────────┼───────────────────────────────────┤
│ /worldhappiness/archive             │ /worldhappiness/analysis          │
├─────────────────────────────────────┼───────────────────────────────────┤
│ /worldhappiness/blog                │ /worldhappiness/news              │
└─────────────────────────────────────┴───────────────────────────────────┘

Not needed - already covered (1)
- wainao/index.js

Dropped (2 units)
- weexcn
- wikipedia/mainland

* feat: migrate batch-x

Migrated - same public path (8)
xclient/app/:name, xmind/mindmap/:lang?, xuangubao/subject/:subject_id, xyplorer/whatsnew, xynu/zkb/:category, xmu/aero/:type, xiachufang/popular/:timeframe?.

Migrated - reshaped (3)
┌────────────────────────────────────────────────────────────────────────────┬───────────────────────────────────────────────────────────────┐
│                                    old                                     │                              new                              │
├────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ /xiachufang/user/{cooked,created}/:id                                      │ /xiachufang/user/:id/:type?                                   │
├────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ /xuetangx/course/:cid/:type, /course/list/:mode/:credential/:status/:type? │ /course/:sign, /course/list/:classify?/:status?/:sellingType? │
├────────────────────────────────────────────────────────────────────────────┼───────────────────────────────────────────────────────────────┤
│ /xinwenlianbo/index                                                        │ /govopendata/xinwenlianbo                                     │
└────────────────────────────────────────────────────────────────────────────┴───────────────────────────────────────────────────────────────┘
/xiaomieu/releases -> /xiaomi.eu/releases
No Need(1)
- x410/news

* feat: migrate batch-y

Migrated - same public path (7)
- yidoutang
- yinxiang
- ynnu
- ynu
- yzu
- youdao
- youzan

Migrated - path changed (1)
┌───────────────────────┬───────────────────────┐
│          old          │          new          │
├───────────────────────┼───────────────────────┤
│ /yahoo-author/:author │ /yahoo/author/:author │
└───────────────────────┴───────────────────────┘

Dropped - dead (1)
- yuzu-emu (/yuzu-emu/entry)

* feat: migrate batch-z

Migrated - same public path (6)
- zhimap
- zhishifenzi
- zimuku
- zsnews
- zjgsu
- zzuli

Migrated - reshaped (3)
┌───────────────────────────────────────────────────────┬───────────────────────────────────────────────────────┐
│                          old                          │                          new                          │
├───────────────────────────────────────────────────────┼───────────────────────────────────────────────────────┤
│ /zucc/news/latest, /zucc/cssearch/latest/:webVpn/:key │ /hzcu/news/latest, /hzcu/cssearch/latest/:webVpn/:key │
├───────────────────────────────────────────────────────┼───────────────────────────────────────────────────────┤
│ /zjut/:type, /zjut/design/:type                       │ /zjut/:type?, /zjut/design/:type                      │
├───────────────────────────────────────────────────────┼───────────────────────────────────────────────────────┤
│ /zzu/soft/news/:type                                  │ /zzu/soft/news/:type?                                 │
└───────────────────────────────────────────────────────┴───────────────────────────────────────────────────────┘

No Need (2)
- zongheng/chapter
- zzu/news

Dropped (1)
- zreading

* feat: migrate batch-z

* refactor: cleanup

* refactor: cleanup

* feat: remove router.js

* fix: increase timeout

* feat: fix author

jacky2001114 -> yangkghjh #288
Lava-Swimmer -> LandonLi #4393
xfangbao -> salviox #4756

* fix: exported utils name

* fix: codeql

* fix: remove fake date

* feat!: drop swust

* fix: update oxlint ignore

* fix: address review

* fix: remove dead comments

* fix: address review

* fix: address review
2026-08-22 12:18:37 +08:00
2026-01-13 00:06:06 +08:00
2018-04-11 01:48:11 +08:00
2025-12-07 00:15:41 +08:00
2026-01-13 00:06:06 +08:00
2025-06-06 21:38:15 +08:00
2025-12-28 18:42:39 +08:00
2024-03-09 20:30:59 +08:00
2024-03-03 17:36:08 +08:00
2026-07-09 05:31:38 +08:00
2026-07-09 02:37:41 +08:00
2026-03-25 23:16:40 +08:00
2026-07-10 23:26:43 +08:00

RSSHub

RSSHub

🧡 Everything is RSSible

docker publish npm publish test Test coverage Visitors

Telegram group Telegram channel X (Twitter)

Folo
RSSHub pairs especially well with Folo, an AI RSS reader for feed discovery and modern reading workflows. The project is also open source on GitHub.

Introduction

RSSHub is the world's largest RSS network, consisting of over 5,000 global instances.

RSSHub delivers millions of contents aggregated from all kinds of sources, our vibrant open source community is ensuring the deliver of RSSHub's new routes, new features and bug fixes.

Documentation | Folo | Telegram Group | Telegram Channel | X (Twitter)

  • Folo | An AI RSS reader that works especially well with RSSHub. Source code: GitHub.
  • RSSHub Radar | A browser extension that can help you quickly discover and subscribe to the RSS and RSSHub of current websites.
  • RSSBud | RSSHub Radar for iOS platform, designed specifically for mobile ecosystem optimization.
  • RSSAid | RSSHub Radar for Android platform built with Flutter.
  • DocSearch | Link RSSHub DocSearch into Raycast.
  • Awesome RSSHub Routes | Curated list of RSS feeds and RSSHub routes.

Contribute

We welcome all pull requests. Suggestions and feedback are also welcomed here.

Refer to Quick Start

Deployment

Refer to Deployment

Special Thanks

Logo designer sheldonrrr

              

Author

RSSHub © DIYgod, Released under the AGPL-3.0 License.
Authored and maintained by DIYgod with help from contributors (list).

Blog @DIYgod · GitHub @DIYgod · X (Twitter) @DIYgod · Telegram Channel @awesomeDIYgod

Languages
TypeScript 99.5%
JavaScript 0.3%