rsshub 1.0.0-master.fb6d4f3 → 1.0.0-master.fb7e42c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (460) hide show
  1. package/lib/assets/logo.svg +1 -0
  2. package/lib/config.ts +10 -0
  3. package/lib/errors/index.test.ts +15 -5
  4. package/lib/errors/types/captcha.ts +5 -0
  5. package/lib/middleware/cache.ts +4 -0
  6. package/lib/middleware/parameter.ts +1 -1
  7. package/lib/registry.ts +6 -2
  8. package/lib/routes/10000link/info.ts +1 -1
  9. package/lib/routes/18comic/album.ts +1 -0
  10. package/lib/routes/18comic/blogs.ts +1 -0
  11. package/lib/routes/18comic/search.ts +1 -0
  12. package/lib/routes/199it/index.ts +1 -1
  13. package/lib/routes/21caijing/channel.ts +1 -1
  14. package/lib/routes/51cto/utils.ts +1 -1
  15. package/lib/routes/6v123/index.ts +487 -0
  16. package/lib/routes/6v123/namespace.ts +1 -0
  17. package/lib/routes/8kcos/cat.ts +3 -0
  18. package/lib/routes/8kcos/latest.ts +1 -0
  19. package/lib/routes/8kcos/tag.ts +1 -0
  20. package/lib/routes/91porn/author.ts +1 -0
  21. package/lib/routes/95mm/category.ts +1 -0
  22. package/lib/routes/95mm/tag.ts +1 -0
  23. package/lib/routes/aa1/60s.ts +189 -0
  24. package/lib/routes/{xinhuanet → aa1}/namespace.ts +3 -3
  25. package/lib/routes/abc/index.ts +1 -1
  26. package/lib/routes/abskoop/index.ts +3 -0
  27. package/lib/routes/abskoop/nsfw.ts +3 -0
  28. package/lib/routes/acgvinyl/namespace.ts +6 -0
  29. package/lib/routes/acgvinyl/news.ts +86 -0
  30. package/lib/routes/ally/rail.ts +1 -1
  31. package/lib/routes/amazfitwatchfaces/index.ts +1 -2
  32. package/lib/routes/anthropic/news.ts +13 -11
  33. package/lib/routes/apnews/mobile-api.ts +1 -1
  34. package/lib/routes/apnews/sitemap.ts +1 -1
  35. package/lib/routes/app-sales/index.ts +1 -1
  36. package/lib/routes/apple/apps.ts +2 -2
  37. package/lib/routes/apple/podcast.ts +58 -25
  38. package/lib/routes/apple/security-releases.ts +2 -2
  39. package/lib/routes/asiafruitchina/categories.ts +1 -1
  40. package/lib/routes/asiantolick/index.ts +3 -0
  41. package/lib/routes/asmr-200/index.ts +1 -0
  42. package/lib/routes/bandisoft/history.ts +2 -2
  43. package/lib/routes/bangumi.tv/group/reply.ts +1 -1
  44. package/lib/routes/banshujiang/index.ts +1 -1
  45. package/lib/routes/banyuetan/index.ts +1 -1
  46. package/lib/routes/baozimh/index.ts +21 -3
  47. package/lib/routes/baselang/index.ts +117 -0
  48. package/lib/routes/baselang/namespace.ts +6 -0
  49. package/lib/routes/bbc/learningenglish.ts +35 -20
  50. package/lib/routes/bestofjs/monthly.ts +137 -0
  51. package/lib/routes/bestofjs/namespace.ts +7 -0
  52. package/lib/routes/bestofjs/templates/description.art +36 -0
  53. package/lib/routes/bilibili/cache.ts +17 -1
  54. package/lib/routes/bilibili/dynamic.ts +34 -8
  55. package/lib/routes/bilibili/page.ts +1 -1
  56. package/lib/routes/bilibili/ranking.ts +25 -17
  57. package/lib/routes/bilibili/wasm-exec.ts +1 -1
  58. package/lib/routes/bilibili/weekly-recommend.ts +22 -6
  59. package/lib/routes/bjp/apod.ts +1 -1
  60. package/lib/routes/bnext/index.ts +58 -0
  61. package/lib/routes/bnext/namespace.ts +7 -0
  62. package/lib/routes/bookwalker/namespace.ts +9 -0
  63. package/lib/routes/bookwalker/search.ts +114 -0
  64. package/lib/routes/bookwalker/templates/description.art +13 -0
  65. package/lib/routes/booru/mmda.ts +1 -0
  66. package/lib/routes/buaa/jiaowu.ts +1 -1
  67. package/lib/routes/bullionvault/gold-news.ts +4 -4
  68. package/lib/routes/cast/index.ts +1 -1
  69. package/lib/routes/cbndata/information.ts +250 -0
  70. package/lib/routes/cbndata/namespace.ts +9 -0
  71. package/lib/routes/cbndata/templates/description.art +17 -0
  72. package/lib/routes/cccmc/index.ts +1 -1
  73. package/lib/routes/ccg/index.ts +181 -0
  74. package/lib/routes/ccg/namespace.ts +9 -0
  75. package/lib/routes/ccg/templates/description.art +21 -0
  76. package/lib/routes/chikubi/category.ts +1 -0
  77. package/lib/routes/chikubi/navigation.ts +1 -0
  78. package/lib/routes/chikubi/nipple-video-category.ts +1 -0
  79. package/lib/routes/chikubi/nipple-video-maker.ts +1 -0
  80. package/lib/routes/chikubi/search.ts +1 -0
  81. package/lib/routes/chinadaily/language.ts +1 -1
  82. package/lib/routes/chinaratings/credit-research.ts +1 -1
  83. package/lib/routes/chub/characters.ts +3 -0
  84. package/lib/routes/civitai/discussions.ts +1 -0
  85. package/lib/routes/civitai/models.ts +1 -0
  86. package/lib/routes/civitai/user.ts +3 -0
  87. package/lib/routes/cline/blog.ts +34 -23
  88. package/lib/routes/coolapk/utils.ts +5 -4
  89. package/lib/routes/coolbuy/index.ts +106 -0
  90. package/lib/routes/coolbuy/namespace.ts +9 -0
  91. package/lib/routes/coolbuy/templates/description.art +48 -0
  92. package/lib/routes/coolidge/film-guide.ts +60 -0
  93. package/lib/routes/coolidge/namespace.ts +7 -0
  94. package/lib/routes/coolidge/news.ts +65 -0
  95. package/lib/routes/coolidge/templates/description.art +4 -0
  96. package/lib/routes/coomer/index.ts +4 -6
  97. package/lib/routes/copymanga/comic.ts +2 -1
  98. package/lib/routes/cosplaytele/category.ts +1 -0
  99. package/lib/routes/cosplaytele/latest.ts +1 -0
  100. package/lib/routes/cosplaytele/popular.ts +1 -0
  101. package/lib/routes/cosplaytele/tag.ts +1 -0
  102. package/lib/routes/cpta/handler.ts +1 -1
  103. package/lib/routes/creative-comic/book.ts +1 -1
  104. package/lib/routes/crush/index.ts +77 -0
  105. package/lib/routes/crush/namespace.ts +7 -0
  106. package/lib/routes/cursor/blog.ts +84 -0
  107. package/lib/routes/daum/potplayer.ts +3 -3
  108. package/lib/routes/dbaplus/new.ts +392 -0
  109. package/lib/routes/dbaplus/templates/description.art +21 -0
  110. package/lib/routes/deepl/blog.ts +2 -3
  111. package/lib/routes/diariofruticola/filtro.ts +1 -1
  112. package/lib/routes/digitalpolicyalert/activity-tracker.ts +1 -1
  113. package/lib/routes/dlsite/campaign.ts +1 -0
  114. package/lib/routes/dlsite/ci-en/article.ts +1 -0
  115. package/lib/routes/dlsite/new.ts +1 -0
  116. package/lib/routes/dlsite/z-index/index.ts +3 -0
  117. package/lib/routes/dockerhub/utils.ts +1 -1
  118. package/lib/routes/dora-world/article.ts +2 -2
  119. package/lib/routes/dytt/index.ts +1 -2
  120. package/lib/routes/eeo/kuaixun.ts +154 -0
  121. package/lib/routes/eeo/namespace.ts +9 -0
  122. package/lib/routes/eeo/templates/description.art +7 -0
  123. package/lib/routes/ehentai/ehapi.ts +3 -3
  124. package/lib/routes/ehentai/favorites.ts +1 -0
  125. package/lib/routes/ehentai/search.ts +1 -0
  126. package/lib/routes/elecfans/article.ts +64 -0
  127. package/lib/routes/elecfans/namespace.ts +7 -0
  128. package/lib/routes/elecfans/soft.ts +69 -0
  129. package/lib/routes/engineering/namespace.ts +8 -0
  130. package/lib/routes/engineering/tag.ts +55 -0
  131. package/lib/routes/eventbrite/events.ts +152 -0
  132. package/lib/routes/eventbrite/namespace.ts +7 -0
  133. package/lib/routes/eventernote/actors.ts +61 -64
  134. package/lib/routes/everia/category.ts +1 -0
  135. package/lib/routes/everia/latest.ts +1 -0
  136. package/lib/routes/everia/search.ts +1 -0
  137. package/lib/routes/everia/tag.ts +1 -0
  138. package/lib/routes/expats/czech-news.ts +1 -1
  139. package/lib/routes/fangchan/list.ts +1 -1
  140. package/lib/routes/fansly/post.ts +1 -0
  141. package/lib/routes/fantia/search.ts +1 -0
  142. package/lib/routes/fantia/user.ts +1 -0
  143. package/lib/routes/finology/tag.ts +1 -1
  144. package/lib/routes/furaffinity/art.ts +1 -0
  145. package/lib/routes/furaffinity/browse.ts +1 -0
  146. package/lib/routes/furaffinity/commissions.ts +1 -0
  147. package/lib/routes/furaffinity/home.ts +1 -0
  148. package/lib/routes/furaffinity/journal-comments.ts +1 -0
  149. package/lib/routes/furaffinity/journals.ts +1 -0
  150. package/lib/routes/furaffinity/search.ts +1 -0
  151. package/lib/routes/furaffinity/shouts.ts +1 -0
  152. package/lib/routes/furaffinity/status.ts +1 -0
  153. package/lib/routes/furaffinity/submission-comments.ts +1 -0
  154. package/lib/routes/furaffinity/user.ts +1 -0
  155. package/lib/routes/furaffinity/watchers.ts +1 -0
  156. package/lib/routes/furaffinity/watching.ts +1 -0
  157. package/lib/routes/gamebase/news.ts +2 -2
  158. package/lib/routes/gamer/gnn-index.ts +8 -3
  159. package/lib/routes/gcores/categories.ts +1 -1
  160. package/lib/routes/gcores/collections.ts +1 -1
  161. package/lib/routes/gcores/tags.ts +1 -1
  162. package/lib/routes/gcores/topics.ts +1 -1
  163. package/lib/routes/gdufs/xwxy/index.ts +196 -0
  164. package/lib/routes/gelbooru/post.ts +1 -0
  165. package/lib/routes/genossenschaften/index.ts +2 -3
  166. package/lib/routes/github/activity.ts +1 -1
  167. package/lib/routes/gitstar-ranking/index.ts +1 -1
  168. package/lib/routes/go/jihs/idwr.ts +3 -4
  169. package/lib/routes/google/jules.ts +63 -0
  170. package/lib/routes/gov/mem/namespace.ts +7 -0
  171. package/lib/routes/gov/mem/zfxxgkpt.ts +96 -0
  172. package/lib/routes/gov/moa/gjs.ts +1 -1
  173. package/lib/routes/gov/mot/index.ts +157 -53
  174. package/lib/routes/grainoil/category.ts +1 -2
  175. package/lib/routes/gxmzu/lib.ts +2 -2
  176. package/lib/routes/gxmzu/utils/index.ts +2 -2
  177. package/lib/routes/hameln/chapter.ts +1 -1
  178. package/lib/routes/hanime1/previews.ts +1 -0
  179. package/lib/routes/hanime1/search.ts +1 -0
  180. package/lib/routes/hex-rays/index.ts +1 -1
  181. package/lib/routes/hit/hitgs.ts +1 -1
  182. package/lib/routes/hit/namespace.ts +1 -1
  183. package/lib/routes/hpoi/banner-item.ts +28 -11
  184. package/lib/routes/hpoi/info.ts +1 -1
  185. package/lib/routes/hudsonrivertrading/index.ts +122 -0
  186. package/lib/routes/hudsonrivertrading/namespace.ts +7 -0
  187. package/lib/routes/huggingface/daily-papers.ts +45 -9
  188. package/lib/routes/huijin-inv/namespace.ts +7 -0
  189. package/lib/routes/huijin-inv/news.ts +83 -0
  190. package/lib/routes/hupu/index.ts +170 -74
  191. package/lib/routes/hupu/types.ts +163 -0
  192. package/lib/routes/hust/gs.ts +1 -1
  193. package/lib/routes/hust/mse.ts +1 -1
  194. package/lib/routes/huxiu/util.ts +2 -2
  195. package/lib/routes/immich/cursed-knowledge.ts +49 -0
  196. package/lib/routes/immich/namespace.ts +7 -0
  197. package/lib/routes/infoq/presentations.ts +1 -1
  198. package/lib/routes/instagram/common-utils.ts +3 -3
  199. package/lib/routes/investor/index.ts +362 -148
  200. package/lib/routes/itch/devlog.ts +7 -3
  201. package/lib/routes/iwara/index.ts +3 -0
  202. package/lib/routes/iwara/subscriptions.ts +1 -0
  203. package/lib/routes/javbus/index.ts +1 -1
  204. package/lib/routes/javdb/actors.ts +1 -0
  205. package/lib/routes/javdb/index.ts +3 -0
  206. package/lib/routes/javdb/lists.ts +3 -0
  207. package/lib/routes/javdb/makers.ts +1 -0
  208. package/lib/routes/javdb/rankings.ts +1 -0
  209. package/lib/routes/javdb/search.ts +1 -0
  210. package/lib/routes/javdb/series.ts +1 -0
  211. package/lib/routes/javdb/videocodes.ts +1 -0
  212. package/lib/routes/javlibrary/bestrated.ts +3 -0
  213. package/lib/routes/javlibrary/bestreviews.ts +1 -0
  214. package/lib/routes/javlibrary/genre.ts +3 -0
  215. package/lib/routes/javlibrary/maker.ts +1 -0
  216. package/lib/routes/javlibrary/mostwanted.ts +3 -0
  217. package/lib/routes/javlibrary/newentries.ts +3 -0
  218. package/lib/routes/javlibrary/newrelease.ts +3 -0
  219. package/lib/routes/javlibrary/update.ts +3 -0
  220. package/lib/routes/javlibrary/user.ts +3 -0
  221. package/lib/routes/javlibrary/utils.ts +1 -1
  222. package/lib/routes/javtrailers/categories.ts +3 -0
  223. package/lib/routes/javtrailers/studios.ts +3 -0
  224. package/lib/routes/jbma/namespace.ts +17 -0
  225. package/lib/routes/jbma/report.ts +471 -0
  226. package/lib/routes/jetbrains/comments.ts +1 -1
  227. package/lib/routes/jingzhengu/utils.ts +1 -1
  228. package/lib/routes/jou/utils/index.ts +2 -2
  229. package/lib/routes/jpxgmn/search.ts +3 -0
  230. package/lib/routes/jpxgmn/weekly.ts +3 -0
  231. package/lib/routes/juejin/aicoding.ts +102 -0
  232. package/lib/routes/juejin/trending.ts +70 -20
  233. package/lib/routes/juejin/utils.ts +36 -51
  234. package/lib/routes/jumeili/home.ts +1 -1
  235. package/lib/routes/kakuyomu/works.ts +1 -1
  236. package/lib/routes/kemono/index.ts +11 -3
  237. package/lib/routes/kemono/templates/discord.art +1 -1
  238. package/lib/routes/kisskiss/blog.ts +1 -0
  239. package/lib/routes/komiic/comic.ts +2 -1
  240. package/lib/routes/koyso/index.ts +339 -0
  241. package/lib/routes/koyso/namespace.ts +9 -0
  242. package/lib/routes/koyso/templates/description.art +13 -0
  243. package/lib/routes/kpopping/kpics.ts +3 -4
  244. package/lib/routes/kpopping/news.ts +2 -2
  245. package/lib/routes/laimanhua/index.ts +1 -0
  246. package/lib/routes/letterboxd/index.ts +65 -0
  247. package/lib/routes/letterboxd/namespace.ts +8 -0
  248. package/lib/routes/lhratings/research.ts +1 -1
  249. package/lib/routes/literotica/category.ts +3 -0
  250. package/lib/routes/lovelive-anime/topics.ts +5 -6
  251. package/lib/routes/maccms/index.ts +1 -1
  252. package/lib/routes/mangadex/index.ts +3 -0
  253. package/lib/routes/mangadex/mdlist/feed.ts +1 -0
  254. package/lib/routes/mangadex/user/feed.ts +1 -0
  255. package/lib/routes/mangadex/user/follows.ts +1 -0
  256. package/lib/routes/manhuagui/comic.ts +1 -0
  257. package/lib/routes/manhuagui/subscribe.ts +1 -0
  258. package/lib/routes/manyvids/video.ts +3 -0
  259. package/lib/routes/mercari/util.ts +1 -1
  260. package/lib/routes/mihoyo/sr/news.ts +2 -1
  261. package/lib/routes/mihoyo/zzz/news.ts +2 -1
  262. package/lib/routes/mingpao/index.ts +1 -1
  263. package/lib/routes/musify/index.ts +2 -3
  264. package/lib/routes/mycard520/news.ts +2 -2
  265. package/lib/routes/nankai/ai-notice.ts +142 -0
  266. package/lib/routes/nankai/graduate-notice.ts +162 -0
  267. package/lib/routes/natgeo/natgeo.ts +3 -2
  268. package/lib/routes/naturalism/namespace.ts +7 -0
  269. package/lib/routes/naturalism/new.ts +59 -0
  270. package/lib/routes/netflav/index.ts +3 -0
  271. package/lib/routes/nhentai/search.ts +1 -0
  272. package/lib/routes/nhk/news-web-easy.ts +1 -1
  273. package/lib/routes/nicovideo/mylist.ts +39 -0
  274. package/lib/routes/nicovideo/types.ts +27 -0
  275. package/lib/routes/nicovideo/utils.ts +27 -1
  276. package/lib/routes/nikkei/cn/index.ts +1 -4
  277. package/lib/routes/nio/nioradio.ts +1 -1
  278. package/lib/routes/njxzc/utils/index.ts +2 -2
  279. package/lib/routes/notion/namespace.ts +2 -2
  280. package/lib/routes/now/news.ts +1 -1
  281. package/lib/routes/nytimes/index.ts +1 -1
  282. package/lib/routes/olevod/vod.ts +3 -0
  283. package/lib/routes/olevod/vodlist.ts +3 -0
  284. package/lib/routes/oreno3d/main.ts +1 -0
  285. package/lib/routes/oschina/column.ts +1 -2
  286. package/lib/routes/oschina/event.ts +1 -1
  287. package/lib/routes/osu/beatmaps/latest-ranked.ts +2 -3
  288. package/lib/routes/papers/category.ts +3 -4
  289. package/lib/routes/patreon/feed.ts +1 -0
  290. package/lib/routes/picuki/profile.ts +13 -5
  291. package/lib/routes/pixiv/bookmarks.ts +1 -0
  292. package/lib/routes/pixiv/illustfollow.ts +1 -0
  293. package/lib/routes/pixiv/novel-api/user-novels/sfw.ts +1 -1
  294. package/lib/routes/pixiv/novel-series.ts +17 -3
  295. package/lib/routes/pixiv/novels.ts +1 -0
  296. package/lib/routes/pixiv/ranking.ts +1 -0
  297. package/lib/routes/pixiv/search.ts +1 -0
  298. package/lib/routes/pixiv/user.ts +1 -0
  299. package/lib/routes/pixivision/utils.ts +1 -1
  300. package/lib/routes/pku/hr.ts +1 -1
  301. package/lib/routes/pku/scc/recruit.ts +1 -1
  302. package/lib/routes/pornhub/category-url.ts +1 -0
  303. package/lib/routes/pornhub/category.ts +1 -0
  304. package/lib/routes/pornhub/pornstar.ts +1 -0
  305. package/lib/routes/pornhub/search.ts +1 -0
  306. package/lib/routes/pornhub/users.ts +1 -0
  307. package/lib/routes/producthunt/templates/description.art +2 -2
  308. package/lib/routes/producthunt/today.ts +17 -8
  309. package/lib/routes/ps/trophy.ts +1 -1
  310. package/lib/routes/pubscholar/utils.ts +14 -1
  311. package/lib/routes/qq/lol/news.ts +1 -1
  312. package/lib/routes/qweather/3days.ts +14 -14
  313. package/lib/routes/qweather/now.ts +12 -10
  314. package/lib/routes/qweather/util.tsx +89 -0
  315. package/lib/routes/qwenlm/blog.ts +75 -0
  316. package/lib/routes/qwenlm/namespace.ts +6 -0
  317. package/lib/routes/radio-canada/latest.ts +30 -17
  318. package/lib/routes/rawkuma/manga.ts +1 -0
  319. package/lib/routes/ruc/ai.ts +1 -1
  320. package/lib/routes/ruc/hr.ts +1 -1
  321. package/lib/routes/samrdprc/index.ts +241 -0
  322. package/lib/routes/samrdprc/namespace.ts +1 -1
  323. package/lib/routes/scientificamerican/podcast.ts +2 -2
  324. package/lib/routes/scitechvista/index.ts +99 -0
  325. package/lib/routes/scitechvista/namespace.ts +7 -0
  326. package/lib/routes/scitechvista/templates/description.art +6 -0
  327. package/lib/routes/scoop/apps.ts +2 -4
  328. package/lib/routes/sdo/ff14risingstones/api.ts +78 -0
  329. package/lib/routes/sdo/ff14risingstones/constant.ts +338 -0
  330. package/lib/routes/sdo/ff14risingstones/posts.ts +80 -0
  331. package/lib/routes/sdo/ff14risingstones/strats.ts +75 -0
  332. package/lib/routes/sdo/ff14risingstones/templates/duties-party.art +41 -0
  333. package/lib/routes/sdo/ff14risingstones/templates/fc-party.art +26 -0
  334. package/lib/routes/sdo/ff14risingstones/templates/novice-network-party.art +9 -0
  335. package/lib/routes/sdo/ff14risingstones/templates/rp-party.art +15 -0
  336. package/lib/routes/sdo/ff14risingstones/timeline.ts +31 -0
  337. package/lib/routes/sdo/ff14risingstones/types/dynamic.ts +50 -0
  338. package/lib/routes/sdo/ff14risingstones/types/index.ts +3 -0
  339. package/lib/routes/sdo/ff14risingstones/types/other.ts +57 -0
  340. package/lib/routes/sdo/ff14risingstones/types/party.ts +111 -0
  341. package/lib/routes/sdo/ff14risingstones/user-dynamics.ts +32 -0
  342. package/lib/routes/sdo/ff14risingstones/user-posts.ts +32 -0
  343. package/lib/routes/sdo/ff14risingstones/user-resently.ts +38 -0
  344. package/lib/routes/sdo/ff14risingstones/user-strats.ts +32 -0
  345. package/lib/routes/sdo/ff14risingstones/utils.ts +215 -0
  346. package/lib/routes/sdo/namespace.ts +7 -0
  347. package/lib/routes/secretsanfrancisco/namespace.ts +7 -0
  348. package/lib/routes/secretsanfrancisco/rss.ts +101 -0
  349. package/lib/routes/secretsanfrancisco/templates/description.art +9 -0
  350. package/lib/routes/sehuatang/user.ts +1 -0
  351. package/lib/routes/showstart/utils.ts +1 -1
  352. package/lib/routes/shu/global.ts +6 -5
  353. package/lib/routes/shu/xxgk.ts +107 -0
  354. package/lib/routes/shuiguopai/index.ts +3 -0
  355. package/lib/routes/sis001/author.ts +1 -0
  356. package/lib/routes/sjtu/jwc.ts +1 -1
  357. package/lib/routes/skeb/following-creators.ts +1 -0
  358. package/lib/routes/skeb/following-works.ts +1 -0
  359. package/lib/routes/skeb/friend-works.ts +1 -0
  360. package/lib/routes/skeb/index.ts +1 -0
  361. package/lib/routes/skeb/search.ts +1 -0
  362. package/lib/routes/skeb/works.ts +44 -25
  363. package/lib/routes/skebetter/illust.ts +1 -0
  364. package/lib/routes/skebetter/index.ts +1 -0
  365. package/lib/routes/skebetter/manga.ts +1 -0
  366. package/lib/routes/sohu/mp.ts +1 -1
  367. package/lib/routes/sotwe/user.ts +1 -1
  368. package/lib/routes/sspai/index.ts +5 -1
  369. package/lib/routes/stcn/index.ts +1 -2
  370. package/lib/routes/stcn/rank.ts +1 -2
  371. package/lib/routes/surfshark/blog.ts +273 -77
  372. package/lib/routes/surfshark/templates/description.art +16 -4
  373. package/lib/routes/sustainabilitymag/articles.ts +1 -1
  374. package/lib/routes/syosetu/dev.ts +1 -1
  375. package/lib/routes/syosetu/ranking-isekai.ts +1 -1
  376. package/lib/routes/szse/disclosure/listed-notice.ts +44 -6
  377. package/lib/routes/t66y/post.ts +1 -0
  378. package/lib/routes/techcrunch/news.ts +1 -0
  379. package/lib/routes/techpowerup/index.ts +11 -11
  380. package/lib/routes/techpowerup/namespace.ts +1 -1
  381. package/lib/routes/techpowerup/review.ts +12 -12
  382. package/lib/routes/techpowerup/utils.ts +2 -2
  383. package/lib/routes/telegram/channel-media.ts +249 -0
  384. package/lib/routes/telegram/channel.ts +5 -4
  385. package/lib/routes/telegram/stories.ts +130 -0
  386. package/lib/routes/telegram/tglib/channel.ts +146 -117
  387. package/lib/routes/telegram/tglib/client.ts +37 -139
  388. package/lib/routes/tesla/cx.ts +1 -1
  389. package/lib/routes/test/index.ts +4 -0
  390. package/lib/routes/thegadgetflow/namespace.ts +7 -0
  391. package/lib/routes/thegadgetflow/rss.ts +99 -0
  392. package/lib/routes/thegadgetflow/templates/description.art +9 -0
  393. package/lib/routes/theverge/index.ts +20 -6
  394. package/lib/routes/threads/utils.ts +7 -3
  395. package/lib/routes/tidb/blog.ts +2 -2
  396. package/lib/routes/tmtpost/column.ts +1 -1
  397. package/lib/routes/toutiao/user.ts +2 -2
  398. package/lib/routes/trendforce/namespace.ts +9 -0
  399. package/lib/routes/trendforce/new.ts +113 -0
  400. package/lib/routes/tsinghua/news.ts +87 -0
  401. package/lib/routes/twitter/api/mobile-api/api.ts +1 -1
  402. package/lib/routes/twitter/api/web-api/api.ts +5 -1
  403. package/lib/routes/txrjy/fornumtopic.ts +2 -2
  404. package/lib/routes/typst/universe.ts +1 -1
  405. package/lib/routes/uber/blog.ts +87 -46
  406. package/lib/routes/uraaka-joshi/uraaka-joshi-user.ts +1 -0
  407. package/lib/routes/uraaka-joshi/uraaka-joshi.ts +3 -0
  408. package/lib/routes/wainao/topics.ts +1 -1
  409. package/lib/routes/wdfxw/bookfree.ts +1 -1
  410. package/lib/routes/weibo/utils.ts +17 -9
  411. package/lib/routes/wikipedia/current-events.ts +411 -0
  412. package/lib/routes/wikipedia/namespace.ts +7 -0
  413. package/lib/routes/wnacg/category.ts +3 -0
  414. package/lib/routes/wnacg/index.ts +3 -0
  415. package/lib/routes/wnacg/tag.ts +3 -0
  416. package/lib/routes/wohnnet/index.ts +2 -2
  417. package/lib/routes/xiaohongshu/user.ts +2 -2
  418. package/lib/routes/xiaohongshu/util.ts +16 -9
  419. package/lib/routes/xjtu/ee-jzxx.ts +1 -1
  420. package/lib/routes/xjtu/zs.ts +1 -1
  421. package/lib/routes/xsijishe/forum.ts +1 -0
  422. package/lib/routes/xsijishe/rank.ts +1 -0
  423. package/lib/routes/xwenming/index.ts +1 -1
  424. package/lib/routes/yahoo/news/utils.ts +7 -3
  425. package/lib/routes/ymgal/article.ts +1 -1
  426. package/lib/routes/yoasobi-music/media.ts +1 -1
  427. package/lib/routes/youtube/api/google.ts +20 -6
  428. package/lib/routes/youtube/api/subtitles.ts +86 -0
  429. package/lib/routes/youtube/api/youtubei.ts +7 -51
  430. package/lib/routes/youtube/channel.ts +1 -1
  431. package/lib/routes/youtube/community.ts +4 -4
  432. package/lib/routes/youtube/user.ts +1 -1
  433. package/lib/routes/yuanliao/index.ts +1 -1
  434. package/lib/routes/zaimanhua/comic.ts +1 -0
  435. package/lib/routes/zaimanhua/update.ts +1 -0
  436. package/lib/routes/zaker/utils.ts +1 -1
  437. package/lib/routes/zaobao/interactive.ts +18 -7
  438. package/lib/routes/zaobao/other.ts +3 -2
  439. package/lib/routes/zaobao/realtime.ts +3 -2
  440. package/lib/routes/zaobao/util.tsx +185 -0
  441. package/lib/routes/zaobao/zaobao.tsx +23 -0
  442. package/lib/routes/zaobao/znews.ts +3 -2
  443. package/lib/routes/zhihu/daily-section.ts +19 -24
  444. package/lib/routes/zhihu/daily.ts +8 -11
  445. package/lib/routes/zju/cse/index.ts +102 -0
  446. package/lib/routes/zodgame/forum.ts +1 -0
  447. package/lib/server.ts +1 -1
  448. package/lib/types.ts +1 -1
  449. package/lib/utils/puppeteer-utils.test.ts +5 -5
  450. package/lib/utils/puppeteer.test.ts +1 -1
  451. package/lib/views/index.tsx +4 -4
  452. package/package.json +55 -57
  453. package/lib/routes/gdufs/xwxy/xwxy-news.ts +0 -90
  454. package/lib/routes/hit/jwc.ts +0 -86
  455. package/lib/routes/picuki/utils.ts +0 -19
  456. package/lib/routes/qweather/templates/3days.art +0 -22
  457. package/lib/routes/qweather/templates/now.art +0 -16
  458. package/lib/routes/xinhuanet/app.ts +0 -109
  459. package/lib/routes/zaobao/templates/zaobao.art +0 -17
  460. package/lib/routes/zaobao/util.ts +0 -198
@@ -86,6 +86,7 @@ export const route: Route = {
86
86
  supportBT: false,
87
87
  supportPodcast: false,
88
88
  supportScihub: false,
89
+ nsfw: true,
89
90
  },
90
91
  name: 'Search',
91
92
  maintainers: ['nczitzk'],
@@ -17,6 +17,7 @@ export const route: Route = {
17
17
  supportBT: false,
18
18
  supportPodcast: false,
19
19
  supportScihub: false,
20
+ nsfw: true,
20
21
  },
21
22
  radar: [
22
23
  {
@@ -16,7 +16,7 @@ export const route: Route = {
16
16
  maintainers: ['Rjnishant530'],
17
17
  handler,
18
18
  url: 'insider.finology.in/tag',
19
- description: `:::note Topic
19
+ description: `::: info Topic
20
20
  | Topic | Link |
21
21
  | ------------------------ | ------------------------ |
22
22
  | Investment Decisions | investment-decisions |
@@ -20,6 +20,7 @@ export const route: Route = {
20
20
  supportBT: false,
21
21
  supportPodcast: false,
22
22
  supportScihub: false,
23
+ nsfw: true,
23
24
  },
24
25
  radar: [
25
26
  {
@@ -16,6 +16,7 @@ export const route: Route = {
16
16
  supportBT: false,
17
17
  supportPodcast: false,
18
18
  supportScihub: false,
19
+ nsfw: true,
19
20
  },
20
21
  radar: [
21
22
  {
@@ -16,6 +16,7 @@ export const route: Route = {
16
16
  supportBT: false,
17
17
  supportPodcast: false,
18
18
  supportScihub: false,
19
+ nsfw: true,
19
20
  },
20
21
  radar: [
21
22
  {
@@ -19,6 +19,7 @@ export const route: Route = {
19
19
  supportBT: false,
20
20
  supportPodcast: false,
21
21
  supportScihub: false,
22
+ nsfw: true,
22
23
  },
23
24
  radar: [
24
25
  {
@@ -16,6 +16,7 @@ export const route: Route = {
16
16
  supportBT: false,
17
17
  supportPodcast: false,
18
18
  supportScihub: false,
19
+ nsfw: true,
19
20
  },
20
21
  radar: [
21
22
  {
@@ -16,6 +16,7 @@ export const route: Route = {
16
16
  supportBT: false,
17
17
  supportPodcast: false,
18
18
  supportScihub: false,
19
+ nsfw: true,
19
20
  },
20
21
  radar: [
21
22
  {
@@ -20,6 +20,7 @@ export const route: Route = {
20
20
  supportBT: false,
21
21
  supportPodcast: false,
22
22
  supportScihub: false,
23
+ nsfw: true,
23
24
  },
24
25
  radar: [
25
26
  {
@@ -16,6 +16,7 @@ export const route: Route = {
16
16
  supportBT: false,
17
17
  supportPodcast: false,
18
18
  supportScihub: false,
19
+ nsfw: true,
19
20
  },
20
21
  radar: [
21
22
  {
@@ -16,6 +16,7 @@ export const route: Route = {
16
16
  supportBT: false,
17
17
  supportPodcast: false,
18
18
  supportScihub: false,
19
+ nsfw: true,
19
20
  },
20
21
  radar: [
21
22
  {
@@ -16,6 +16,7 @@ export const route: Route = {
16
16
  supportBT: false,
17
17
  supportPodcast: false,
18
18
  supportScihub: false,
19
+ nsfw: true,
19
20
  },
20
21
  radar: [
21
22
  {
@@ -16,6 +16,7 @@ export const route: Route = {
16
16
  supportBT: false,
17
17
  supportPodcast: false,
18
18
  supportScihub: false,
19
+ nsfw: true,
19
20
  },
20
21
  radar: [
21
22
  {
@@ -16,6 +16,7 @@ export const route: Route = {
16
16
  supportBT: false,
17
17
  supportPodcast: false,
18
18
  supportScihub: false,
19
+ nsfw: true,
19
20
  },
20
21
  radar: [
21
22
  {
@@ -16,6 +16,7 @@ export const route: Route = {
16
16
  supportBT: false,
17
17
  supportPodcast: false,
18
18
  supportScihub: false,
19
+ nsfw: true,
19
20
  },
20
21
  radar: [
21
22
  {
@@ -125,7 +125,7 @@ export const route: Route = {
125
125
  type: '類型,見下表,預設為 newslist',
126
126
  category: '分類,預設為 `all`,即全部,可在對應分類頁 URL 中找到',
127
127
  },
128
- description: `:::tip
128
+ description: `::: tip
129
129
  若訂閱 [手機遊戲新聞](https://news.gamebase.com.tw/news/newslist?type=mobile),網址為 \`https://news.gamebase.com.tw/news/newslist?type=mobile\`,請截取 \`https://news.gamebase.com.tw/news/\` 到末尾的部分 \`newslist\` 作為 \`type\` 參數填入,\`mobile\` 作為 \`category\` 參數填入,此時目標路由為 [\`/gamebase/news/newslist/mobile\`](https://rsshub.app/gamebase/news/newslist/mobile)。
130
130
  :::
131
131
 
@@ -167,7 +167,7 @@ export const route: Route = {
167
167
  type: '类型,见下表,默认为 newslist',
168
168
  category: '分类,默认为 `all`,即全部,可在对应分类页 URL 中找到',
169
169
  },
170
- description: `:::tip
170
+ description: `::: tip
171
171
  若订阅 [手机游戏新闻](https://news.gamebase.com.tw/news/newslist?type=mobile),网址为 \`https://news.gamebase.com.tw/news/newslist?type=mobile\`,请截取 \`https://news.gamebase.com.tw/news/\` 到末尾的部分 \`newslist\` 作为 \`type\` 参数填入,\`mobile\` 作为 \`category\` 参数填入,此时目标路由为 [\`/gamebase/news/newslist/mobile\`](https://rsshub.app/gamebase/news/newslist/mobile)。
172
172
  :::
173
173
 
@@ -4,6 +4,7 @@ import got from '@/utils/got';
4
4
  import { load } from 'cheerio';
5
5
  import { parseDate } from '@/utils/parse-date';
6
6
  import timezone from '@/utils/timezone';
7
+ import pMap from 'p-map';
7
8
 
8
9
  export const route: Route = {
9
10
  path: '/gnn/:category?',
@@ -94,6 +95,8 @@ async function handler(ctx) {
94
95
  const list = $('div.BH-lbox.GN-lbox2')
95
96
  .children()
96
97
  .not('p,a,img,span')
98
+ // <div data-news-id="291265" id="291265"></div>
99
+ .not('[data-news-id]')
97
100
  .slice(0, limit)
98
101
  .toArray()
99
102
  .map((item) => {
@@ -116,8 +119,9 @@ async function handler(ctx) {
116
119
  };
117
120
  });
118
121
 
119
- const items = await Promise.all(
120
- list.map(async (item) => {
122
+ const items = await pMap(
123
+ list,
124
+ async (item) => {
121
125
  item.description = await cache.tryGet(item.link, async () => {
122
126
  const response = await got.get(item.link);
123
127
  let component = '';
@@ -163,7 +167,8 @@ async function handler(ctx) {
163
167
  return component;
164
168
  });
165
169
  return item;
166
- })
170
+ },
171
+ { concurrency: 5 }
167
172
  );
168
173
 
169
174
  return {
@@ -67,7 +67,7 @@ export const route: Route = {
67
67
  ],
68
68
  },
69
69
  },
70
- description: `:::tip
70
+ description: `::: tip
71
71
  若订阅 [文章 - 文章](https://www.gcores.com/categories/1?tab=articles),网址为 \`https://www.gcores.com/categories/1?tab=articles\`,请截取 \`https://www.gcores.com/categories/\` 到末尾的部分 \`1\` 作为 \`id\` 参数填入,截取 \`articles\` 作为 \`tab\` 参数填入,此时目标路由为 [\`/gcores/categories/1/articles\`](https://rsshub.app/gcores/categories/1/articles)。
72
72
  :::
73
73
 
@@ -67,7 +67,7 @@ export const route: Route = {
67
67
  ],
68
68
  },
69
69
  },
70
- description: `:::tip
70
+ description: `::: tip
71
71
  若订阅 [文章 - 文章](https://www.gcores.com/collections/64?tab=articles),网址为 \`https://www.gcores.com/collections/64?tab=articles\`,请截取 \`https://www.gcores.com/collections/\` 到末尾的部分 \`64\` 作为 \`id\` 参数填入,截取 \`articles\` 作为 \`tab\` 参数填入,此时目标路由为 [\`/gcores/collections/64/articles\`](https://rsshub.app/gcores/collections/64/articles)。
72
72
  :::
73
73
 
@@ -67,7 +67,7 @@ export const route: Route = {
67
67
  ],
68
68
  },
69
69
  },
70
- description: `:::tip
70
+ description: `::: tip
71
71
  若订阅 [美国 - 文章](https://www.gcores.com/tags/1/originals?tab=articles),网址为 \`https://www.gcores.com/tags/1/originals?tab=articles\`,请截取 \`https://www.gcores.com/tags/\` 到末尾 \`/originals\` 的部分 \`1\` 作为 \`id\` 参数填入,截取 \`articles\` 作为 \`tab\` 参数填入,此时目标路由为 [\`/gcores/tags/1/articles\`](https://rsshub.app/gcores/tags/1/articles)。
72
72
  :::
73
73
 
@@ -32,7 +32,7 @@ export const route: Route = {
32
32
  description: '小组 ID,默认为空,即全部,可在对应小组页 URL 中找到',
33
33
  },
34
34
  },
35
- description: `:::tip
35
+ description: `::: tip
36
36
  若订阅 [我的年度总结](https://www.gcores.com/topics/581),网址为 \`https://www.gcores.com/topics/581\`,请截取 \`https://www.gcores.com/topics/\` 到末尾的部分 \`581\` 作为 \`id\` 参数填入,此时目标路由为 [\`/gcores/topics/581/recommend\`](https://rsshub.app/gcores/topics/581/recommend)。
37
37
  :::
38
38
  `,
@@ -0,0 +1,196 @@
1
+ import { Route } from '@/types';
2
+ import { load } from 'cheerio';
3
+ import cache from '@/utils/cache';
4
+ import got from '@/utils/got';
5
+ import { parseDate } from '@/utils/parse-date';
6
+
7
+ const handler = async (ctx) => {
8
+ const BASE_URL = 'https://xwxy.gdufs.edu.cn';
9
+
10
+ const category = ctx.req.param('category') ?? 'news';
11
+ const pathMap: Record<string, string> = {
12
+ news: '/xwzx/xyxw.htm',
13
+ notices: '/xwzx/tzgg/tz.htm',
14
+ announcements: '/xwzx/tzgg/gg.htm',
15
+ media: '/xwzx/mtjj.htm',
16
+ };
17
+ const titleMap: Record<string, string> = {
18
+ news: '学院新闻',
19
+ notices: '通知',
20
+ announcements: '公告',
21
+ media: '媒体聚焦',
22
+ };
23
+ const datePattern = /\d{4}[-/.]\d{1,2}[-/.]\d{1,2}/;
24
+
25
+ const link = `${BASE_URL}${pathMap[category] ?? pathMap.news}`;
26
+
27
+ const response = await got(link);
28
+ if (!response.body) {
29
+ throw new Error('No response body');
30
+ }
31
+ const $ = load(response.body);
32
+ // 直接选择新闻列表项中的链接
33
+ const anchors = $('li[id^="line_u14_"] a');
34
+
35
+ const items = anchors
36
+ .toArray()
37
+ .map((el) => {
38
+ const a = $(el);
39
+ const href = a.attr('href') || '';
40
+ const li = a.closest('li');
41
+ const contextText = ((li && li.text()) || a.text()).trim();
42
+ const dateText = a.find('i').text().trim() || (li && li.find('i').text().trim()) || (li && li.find('time').text().trim()) || (contextText.match(datePattern)?.[0] ?? '');
43
+ const pubDate: Date | undefined = dateText ? parseDate(dateText) : undefined;
44
+ const title = a.find('h5').text().trim() || a.attr('title')?.trim() || a.text().trim() || contextText.replace(datePattern, '').trim();
45
+ // 过滤无效链接
46
+ if (!href) {
47
+ return null;
48
+ }
49
+ return {
50
+ title,
51
+ // 使用当前栏目页作为相对路径的解析基准,兼容 ../../info/xxx.htm
52
+ link: href.startsWith('http') ? href : new URL(href, link).href,
53
+ pubDate,
54
+ };
55
+ })
56
+ .filter((v): v is { title: string; link: string; pubDate: Date | undefined } => !!v && !!v.title && !!v.link);
57
+
58
+ // 尊重 limit 参数,默认 10(与仓库常见写法保持一致)
59
+ const limit = Number.parseInt(ctx.req.query('limit') ?? '') || 10;
60
+ const limitedItems = items.slice(0, limit);
61
+
62
+ const enhancedItems = await Promise.all(
63
+ limitedItems.map((item) =>
64
+ cache.tryGet(item.link, async () => {
65
+ // 外部链接直接返回基础信息,避免因跨域/不同模板导致解析失败
66
+ let isInternal = false;
67
+ try {
68
+ const u = new URL(item.link);
69
+ isInternal = u.hostname.endsWith('gdufs.edu.cn');
70
+ } catch {
71
+ // ignore malformed URL
72
+ }
73
+
74
+ if (!isInternal) {
75
+ return {
76
+ ...item,
77
+ description: '',
78
+ author: '',
79
+ };
80
+ }
81
+
82
+ const articleResponse = await got(item.link);
83
+ if (!articleResponse.body) {
84
+ throw new Error('No article body');
85
+ }
86
+ const $$ = load(articleResponse.body);
87
+ // 使用 .v_news_content 选择器
88
+ const $content = $$('.v_news_content');
89
+
90
+ // 绝对化 img/src 与 a/href
91
+ $content.find('img, a').each((_, el) => {
92
+ const $el = $$(el);
93
+ const attrs = ['src', 'href'];
94
+ for (const attr of attrs) {
95
+ const v = $el.attr(attr);
96
+ if (v && !v.startsWith('http')) {
97
+ try {
98
+ $el.attr(attr, new URL(v, item.link).href);
99
+ } catch {
100
+ // ignore malformed url
101
+ }
102
+ }
103
+ }
104
+ });
105
+
106
+ const content = $content.html() || '';
107
+ // 提取作者/编辑等信息,并去除"发布时间"和日期
108
+ const metaTexts = $$('.show01 p i')
109
+ .toArray()
110
+ .map((el) => $$(el).text().trim())
111
+ .filter(Boolean);
112
+
113
+ // 过滤包含"发布时间"的项与日期字符串
114
+ const authors = metaTexts.filter((t) => !t.includes('发布时间')).filter((t) => !datePattern.test(t));
115
+
116
+ // 如果列表页没有解析到 pubDate,则尝试从 meta 文本中回填
117
+ let pubDateRecovered: string | number | Date | undefined;
118
+ if (!item.pubDate) {
119
+ const dateTextInMeta = metaTexts.find((t) => datePattern.test(t));
120
+ if (dateTextInMeta) {
121
+ const matched = dateTextInMeta.match(datePattern)?.[0];
122
+ if (matched) {
123
+ try {
124
+ pubDateRecovered = parseDate(matched);
125
+ } catch {
126
+ // ignore parse error
127
+ }
128
+ }
129
+ }
130
+ }
131
+
132
+ return {
133
+ ...item,
134
+ description: content,
135
+ author: authors.join(', '),
136
+ pubDate: item.pubDate || pubDateRecovered,
137
+ };
138
+ })
139
+ )
140
+ );
141
+
142
+ return {
143
+ title: `广外新传学院-${titleMap[category] ?? titleMap.news}`,
144
+ link,
145
+ description: '广东外语外贸大学新闻与传播学院官网-新闻中心',
146
+ item: enhancedItems,
147
+ };
148
+ };
149
+
150
+ export const route: Route = {
151
+ path: '/xwxy/:category?',
152
+ categories: ['university'],
153
+ example: '/gdufs/xwxy/news',
154
+ parameters: {
155
+ category: {
156
+ description: '分类,默认为 `news`',
157
+ options: [
158
+ { label: '学院新闻', value: 'news' },
159
+ { label: '通知', value: 'notices' },
160
+ { label: '公告', value: 'announcements' },
161
+ { label: '媒体聚焦', value: 'media' },
162
+ ],
163
+ },
164
+ },
165
+ features: {
166
+ requireConfig: false,
167
+ requirePuppeteer: false,
168
+ antiCrawler: false,
169
+ supportRadar: true,
170
+ supportBT: false,
171
+ supportPodcast: false,
172
+ supportScihub: false,
173
+ },
174
+ radar: [
175
+ {
176
+ source: ['xwxy.gdufs.edu.cn/xwzx/xyxw', 'xwxy.gdufs.edu.cn/'],
177
+ target: '/xwxy/news',
178
+ },
179
+ {
180
+ source: ['xwxy.gdufs.edu.cn/xwzx/tzgg/tz'],
181
+ target: '/xwxy/notices',
182
+ },
183
+ {
184
+ source: ['xwxy.gdufs.edu.cn/xwzx/tzgg/gg'],
185
+ target: '/xwxy/announcements',
186
+ },
187
+ {
188
+ source: ['xwxy.gdufs.edu.cn/xwzx/mtjj'],
189
+ target: '/xwxy/media',
190
+ },
191
+ ],
192
+ name: '新闻学院-新闻中心',
193
+ maintainers: ['gz4zzxc'],
194
+ handler,
195
+ url: 'xwxy.gdufs.edu.cn',
196
+ };
@@ -37,6 +37,7 @@ export const route: Route = {
37
37
  supportBT: false,
38
38
  supportPodcast: false,
39
39
  supportScihub: false,
40
+ nsfw: true,
40
41
  },
41
42
  radar: [
42
43
  {
@@ -21,15 +21,14 @@ Only returns the first page of search results, allowing you to keep track of
21
21
  newly added apartments. If you're looking for an apartment, make sure to also
22
22
  look through the other pages on the website.
23
23
 
24
- :::tip
24
+ ::: tip
25
25
  To get your query URL, go to https://genossenschaften.immo and apply all
26
26
  desired filters. If you want to filter by (all districts of a) federal state
27
27
  (e.g. \`/immobilien/regionen/wien/\`), please open the district selector and
28
28
  de- and re-select any district, so that the region in the URL gets replaced
29
29
  with a number of \`district\` parameters. Once you've set up all desired
30
30
  filters, copy the part of the URL after the \`?\`.
31
- :::
32
- `,
31
+ :::`,
33
32
  example:
34
33
  PATH_PREFIX +
35
34
  'district=wien-1-innere-stadt&district=wien-2-leopoldstadt&district=wien-3-landstrasse&district=wien-4-wieden&district=wien-5-margareten&district=wien-6-mariahilf&district=wien-7-neubau&district=wien-8-josefstadt&district=wien-9-alsergrund&district=wien-10-favoriten&district=wien-11-simmering&district=wien-12-meidling&district=wien-13-hietzing&district=wien-14-penzing&district=wien-15-rudolfsheim-fuenfhaus&district=wien-16-ottakring&district=wien-17-hernals&district=wien-18-waehring&district=wien-19-doebling&district=wien-20-brigittenau&district=wien-21-floridsdorf&district=wien-22-donaustadt&district=wien-23-liesing' +
@@ -45,7 +45,7 @@ export const route: Route = {
45
45
  item: feed.items.map((item) => ({
46
46
  title: item.title ?? '',
47
47
  link: item.link,
48
- description: sanitizeHtml(item.content?.replace(/href="\/(.+?)"/g, `href="https://github.com/$1"`) ?? '', { allowedTags: [...sanitizeHtml.defaults.allowedTags, 'img'] }),
48
+ description: sanitizeHtml(item.content?.replaceAll(/href="\/(.+?)"/g, `href="https://github.com/$1"`) ?? '', { allowedTags: [...sanitizeHtml.defaults.allowedTags, 'img'] }),
49
49
  pubDate: item.pubDate ? parseDate(item.pubDate) : undefined,
50
50
  author: item.author,
51
51
  guid: item.id,
@@ -105,7 +105,7 @@ export const route: Route = {
105
105
  ],
106
106
  },
107
107
  },
108
- description: `:::tip
108
+ description: `::: tip
109
109
  To subscribe to [Repositories](https://gitstar-ranking.com/repositories), where the source URL is \`https://gitstar-ranking.com/repositories\`, extract the certain parts from this URL to be used as parameters, resulting in the route as [\`/gitstar-ranking/repositories\`](https://rsshub.app/gitstar-ranking/repositories).
110
110
  :::
111
111
 
@@ -91,10 +91,9 @@ export const route: Route = {
91
91
  description: 'Year, current year by default',
92
92
  },
93
93
  },
94
- description: `:::tip
94
+ description: `::: tip
95
95
  To subscribe to [感染症発生動向調査週報](https://id-info.jihs.go.jp/surveillance/idwr/jp/idwr/2025/), where the source URL is \`https://id-info.jihs.go.jp/surveillance/idwr/jp/idwr/2025/\`, extract the certain parts from this URL to be used as parameters, resulting in the route as [\`/go/jihs/idwr/2025\`](https://rsshub.app/go/jihs/idwr/2025).
96
- :::
97
- `,
96
+ :::`,
98
97
  categories: ['government'],
99
98
  features: {
100
99
  requireConfig: false,
@@ -129,7 +128,7 @@ To subscribe to [感染症発生動向調査週報](https://id-info.jihs.go.jp/s
129
128
  description: '年份,默认为当前年份,可在对应页 URL 中找到',
130
129
  },
131
130
  },
132
- description: `:::tip
131
+ description: `::: tip
133
132
  若订阅 [传染病发生动向调查周报](https://id-info.jihs.go.jp/surveillance/idwr/jp/idwr/2025/),网址为 \`https://id-info.jihs.go.jp/surveillance/idwr/jp/idwr/2025/\`,请截取 \`https://id-info.jihs.go.jp/surveillance/idwr/jp/idwr/\` 到末尾 \`/\` 的部分 \`2025\` 作为 \`year\` 参数填入,此时目标路由为 [\`/go/jihs/idwr/2025\`](https://rsshub.app/go/jihs/idwr/2025)。
134
133
  :::
135
134
  `,
@@ -0,0 +1,63 @@
1
+ import { Route } from '@/types';
2
+ import ofetch from '@/utils/ofetch';
3
+ import { load } from 'cheerio';
4
+ import { parseDate } from '@/utils/parse-date';
5
+
6
+ export const route: Route = {
7
+ path: '/jules/changelog',
8
+ categories: ['program-update'],
9
+ example: '/google/jules/changelog',
10
+ features: {
11
+ requireConfig: false,
12
+ requirePuppeteer: false,
13
+ antiCrawler: false,
14
+ supportBT: false,
15
+ supportPodcast: false,
16
+ supportScihub: false,
17
+ },
18
+ name: 'Jules Changelog',
19
+ url: 'jules.google/docs/changelog/',
20
+ maintainers: ['johan456789'],
21
+ handler,
22
+ };
23
+
24
+ async function handler() {
25
+ const url = 'https://jules.google/docs/changelog/';
26
+ const html = await ofetch(url);
27
+ const $ = load(html);
28
+
29
+ const items = $('main article')
30
+ .toArray()
31
+ .map((el) => {
32
+ const article = $(el);
33
+ const h2 = article.find('h2').first();
34
+ const id = h2.attr('id') || article.attr('id');
35
+ const title = h2.text().trim();
36
+ const anchor = id ? `${url}#${id}` : url;
37
+ // Date appears as a bold text node after h2 (no <time> tag)
38
+ const pubDateText = h2.nextAll('b').first().text().trim();
39
+
40
+ // First image if exists
41
+ const imgEl = article.find('img').first();
42
+ const imgSrc = imgEl.attr('src');
43
+ const image = imgSrc ? new URL(imgSrc, url).href : undefined;
44
+
45
+ // Full HTML for the item content
46
+ article.find('h2').first().remove(); // remove title
47
+ article.find('b').first().remove(); // remove date
48
+
49
+ return {
50
+ title,
51
+ description: article.html() || undefined,
52
+ link: anchor,
53
+ pubDate: pubDateText ? parseDate(pubDateText) : undefined,
54
+ image,
55
+ };
56
+ });
57
+
58
+ return {
59
+ title: 'Jules Changelog',
60
+ link: url,
61
+ item: items,
62
+ };
63
+ }
@@ -0,0 +1,7 @@
1
+ import type { Namespace } from '@/types';
2
+
3
+ export const namespace: Namespace = {
4
+ name: '中华人民共和国应急管理部',
5
+ url: 'www.mem.gov.cn',
6
+ lang: 'zh-CN',
7
+ };