rsshub 1.0.0-master.ff3a9ce → 1.0.0-master.ff3ea5a

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.

Potentially problematic release.


This version of rsshub might be problematic. Click here for more details.

Files changed (388) hide show
  1. package/lib/config.ts +38 -0
  2. package/lib/errors/index.tsx +3 -2
  3. package/lib/middleware/debug.ts +6 -4
  4. package/lib/middleware/header.ts +4 -2
  5. package/lib/registry.test.ts +24 -1
  6. package/lib/registry.ts +40 -11
  7. package/lib/router.js +1 -1
  8. package/lib/routes/121/namespace.ts +9 -0
  9. package/lib/routes/121/templates/description.art +17 -0
  10. package/lib/routes/121/weather-live.ts +104 -0
  11. package/lib/routes/141jav/index.ts +3 -0
  12. package/lib/routes/141ppv/index.ts +3 -0
  13. package/lib/routes/163/news/rank.ts +1 -1
  14. package/lib/routes/18comic/album.ts +59 -64
  15. package/lib/routes/18comic/index.ts +1 -0
  16. package/lib/routes/18comic/search.ts +53 -4
  17. package/lib/routes/18comic/utils.ts +70 -1
  18. package/lib/routes/2048/index.ts +1 -0
  19. package/lib/routes/30secondsofcode/utils.ts +0 -1
  20. package/lib/routes/6park/index.ts +1 -1
  21. package/lib/routes/7mmtv/index.ts +1 -0
  22. package/lib/routes/91porn/index.ts +1 -0
  23. package/lib/routes/95mm/tab.ts +1 -0
  24. package/lib/routes/agefans/detail.ts +1 -1
  25. package/lib/routes/aliyun/database-month.ts +1 -1
  26. package/lib/routes/anthropic/research.ts +112 -0
  27. package/lib/routes/apnews/topics.ts +2 -1
  28. package/lib/routes/apnews/utils.ts +1 -1
  29. package/lib/routes/apple/design.ts +54 -0
  30. package/lib/routes/apple/namespace.ts +1 -1
  31. package/lib/routes/aqara/post.ts +1 -1
  32. package/lib/routes/augmentcode/blog.ts +161 -0
  33. package/lib/routes/augmentcode/namespace.ts +9 -0
  34. package/lib/routes/augmentcode/templates/description.art +17 -0
  35. package/lib/routes/azul/namespace.ts +9 -0
  36. package/lib/routes/azul/packages.ts +105 -0
  37. package/lib/routes/banshujiang/index.ts +763 -0
  38. package/lib/routes/banshujiang/namespace.ts +9 -0
  39. package/lib/routes/banshujiang/templates/description.art +17 -0
  40. package/lib/routes/bfl/announcements.ts +1 -1
  41. package/lib/routes/bilibili/cache.ts +78 -0
  42. package/lib/routes/bilibili/danmaku.ts +1 -1
  43. package/lib/routes/bilibili/dynamic.ts +8 -2
  44. package/lib/routes/bilibili/video.ts +31 -73
  45. package/lib/routes/biquge/index.ts +1 -1
  46. package/lib/routes/bsky/keyword.ts +15 -10
  47. package/lib/routes/capitalmind/insights.ts +40 -0
  48. package/lib/routes/capitalmind/namespace.ts +8 -0
  49. package/lib/routes/capitalmind/podcasts.ts +41 -0
  50. package/lib/routes/capitalmind/utils.ts +122 -0
  51. package/lib/routes/cartoonmad/comic.ts +1 -1
  52. package/lib/routes/chikubi/index.ts +1 -0
  53. package/lib/routes/chikubi/tag.ts +1 -0
  54. package/lib/routes/chocolatey/namespace.ts +9 -0
  55. package/lib/routes/chocolatey/packages.ts +122 -0
  56. package/lib/routes/cmde/index.ts +1 -1
  57. package/lib/routes/cockroachlabs/blog.ts +113 -0
  58. package/lib/routes/cockroachlabs/namespace.ts +7 -0
  59. package/lib/routes/cool18/index.ts +4 -1
  60. package/lib/routes/coomer/index.ts +12 -6
  61. package/lib/routes/coomer/namespace.ts +1 -1
  62. package/lib/routes/copymanga/comic.ts +7 -9
  63. package/lib/routes/css-tricks/articles.ts +48 -0
  64. package/lib/routes/css-tricks/collections.ts +62 -0
  65. package/lib/routes/css-tricks/namespace.ts +8 -0
  66. package/lib/routes/css-tricks/popular.ts +39 -0
  67. package/lib/routes/css-tricks/utils.ts +103 -0
  68. package/lib/routes/cursor/changelog.ts +26 -17
  69. package/lib/routes/cursor/namespace.ts +1 -1
  70. package/lib/routes/cw/utils.ts +6 -13
  71. package/lib/routes/dealstreetasia/home.ts +1 -1
  72. package/lib/routes/dedao/index.ts +3 -3
  73. package/lib/routes/deepl/blog.ts +422 -0
  74. package/lib/routes/deepl/namespace.ts +9 -0
  75. package/lib/routes/deepl/templates/description.art +21 -0
  76. package/lib/routes/deeplearning/the-batch.ts +1 -1
  77. package/lib/routes/dev.to/guides.ts +100 -0
  78. package/lib/routes/dev.to/namespace.ts +8 -0
  79. package/lib/routes/dev.to/top.ts +105 -0
  80. package/lib/routes/dgut/jwb.ts +73 -0
  81. package/lib/routes/dgut/namespace.ts +9 -0
  82. package/lib/routes/digitalpolicyalert/activity-tracker.ts +135 -0
  83. package/lib/routes/digitalpolicyalert/namespace.ts +9 -0
  84. package/lib/routes/dnaindia/common.ts +26 -8
  85. package/lib/routes/douban/other/list.ts +3 -3
  86. package/lib/routes/e-hentai/index.ts +4 -1
  87. package/lib/routes/ehentai/tag.ts +1 -0
  88. package/lib/routes/englishhome/index.ts +55 -0
  89. package/lib/routes/englishhome/namespace.ts +6 -0
  90. package/lib/routes/epicgames/index.ts +2 -2
  91. package/lib/routes/espn/news.ts +1 -1
  92. package/lib/routes/expats/czech-news.ts +272 -0
  93. package/lib/routes/expats/namespace.ts +9 -0
  94. package/lib/routes/fanbox/index.ts +1 -0
  95. package/lib/routes/fanbox/utils.ts +1 -1
  96. package/lib/routes/fansly/tag.ts +1 -0
  97. package/lib/routes/fantia/search.ts +1 -1
  98. package/lib/routes/fantube/creator.ts +69 -0
  99. package/lib/routes/fantube/namespace.ts +7 -0
  100. package/lib/routes/fantube/templates/post.art +17 -0
  101. package/lib/routes/fantube/types.ts +100 -0
  102. package/lib/routes/fantube/utils.ts +268 -0
  103. package/lib/routes/follow/profile.ts +1 -1
  104. package/lib/routes/followin/news.ts +1 -1
  105. package/lib/routes/foresightnews/util.ts +1 -1
  106. package/lib/routes/freexcomic/book.ts +4 -1
  107. package/lib/routes/gamer/hot.ts +5 -5
  108. package/lib/routes/gaoyu/blog.ts +145 -0
  109. package/lib/routes/gaoyu/namespace.ts +9 -0
  110. package/lib/routes/gaoyu/templates/description.art +7 -0
  111. package/lib/routes/geocaching/blogs.ts +2 -2
  112. package/lib/routes/github/namespace.ts +1 -1
  113. package/lib/routes/github/private-feed.ts +229 -0
  114. package/lib/routes/github/star.ts +1 -1
  115. package/lib/routes/google/extension.ts +9 -10
  116. package/lib/routes/gov/beijing/bphc/index.ts +1 -1
  117. package/lib/routes/gov/ccdi/index.ts +1 -1
  118. package/lib/routes/gov/chongqing/sydwgkzp.ts +22 -6
  119. package/lib/routes/gov/customs/list.ts +1 -1
  120. package/lib/routes/gov/general/general.ts +1 -1
  121. package/lib/routes/gov/hangzhou/zwfw.ts +1 -1
  122. package/lib/routes/gov/pbc/goutongjiaoliu.ts +1 -1
  123. package/lib/routes/gov/shenzhen/szlh/index.ts +77 -0
  124. package/lib/routes/gov/shenzhen/szlh/namespace.ts +8 -0
  125. package/lib/routes/grist/utils.ts +5 -4
  126. package/lib/routes/hanime1/search.ts +4 -2
  127. package/lib/routes/hellogithub/report.ts +1 -1
  128. package/lib/routes/hit/hitgs.ts +240 -54
  129. package/lib/routes/hit/templates/description.art +7 -0
  130. package/lib/routes/hlju/namespace.ts +8 -0
  131. package/lib/routes/hlju/news.ts +141 -0
  132. package/lib/routes/hostmonit/cloudflareyes.ts +1 -1
  133. package/lib/routes/hotukdeals/index.ts +1 -1
  134. package/lib/routes/hyperdash/namespace.ts +7 -0
  135. package/lib/routes/hyperdash/templates/description.art +34 -0
  136. package/lib/routes/hyperdash/top-traders.ts +84 -0
  137. package/lib/routes/hyperdash/utils.ts +49 -0
  138. package/lib/routes/hypergryph/arknights/announce.ts +1 -1
  139. package/lib/routes/ielts/index.ts +1 -1
  140. package/lib/routes/infoq/topic.ts +16 -13
  141. package/lib/routes/instagram/web-api/index.ts +17 -13
  142. package/lib/routes/instagram/web-api/utils.ts +46 -63
  143. package/lib/routes/jamesclear/book-summaries.ts +40 -0
  144. package/lib/routes/jamesclear/great-speeches.ts +40 -0
  145. package/lib/routes/jamesclear/namespace.ts +8 -0
  146. package/lib/routes/jamesclear/quotes.ts +40 -0
  147. package/lib/routes/jamesclear/three-two-one.ts +41 -0
  148. package/lib/routes/jamesclear/utils.ts +22 -0
  149. package/lib/routes/japanpost/utils.ts +2 -2
  150. package/lib/routes/javbus/index.ts +3 -0
  151. package/lib/routes/javdb/tags.ts +1 -0
  152. package/lib/routes/javlibrary/star.ts +1 -0
  153. package/lib/routes/javtiful/actress.ts +3 -0
  154. package/lib/routes/javtiful/channel.ts +3 -0
  155. package/lib/routes/javtrailers/casts.ts +3 -0
  156. package/lib/routes/jetbrains/comments.ts +99 -0
  157. package/lib/routes/jetbrains/namespace.ts +8 -0
  158. package/lib/routes/jimmyspa/books.ts +1 -1
  159. package/lib/routes/jimmyspa/news.ts +1 -1
  160. package/lib/routes/jpxgmn/tab.ts +3 -0
  161. package/lib/routes/kakuyomu/works.ts +3 -0
  162. package/lib/routes/kaopu/news.ts +1 -1
  163. package/lib/routes/kemono/const.ts +1 -1
  164. package/lib/routes/kemono/index.ts +12 -11
  165. package/lib/routes/kemono/namespace.ts +1 -1
  166. package/lib/routes/kiro/blog.ts +131 -0
  167. package/lib/routes/kiro/changelog.ts +128 -0
  168. package/lib/routes/kiro/namespace.ts +9 -0
  169. package/lib/routes/konachan/post.ts +3 -0
  170. package/lib/routes/kovidgoyal/kitty/changelog.ts +83 -0
  171. package/lib/routes/kovidgoyal/namespace.ts +7 -0
  172. package/lib/routes/kunchengblog/essay.ts +1 -1
  173. package/lib/routes/landiannews/category.ts +1 -1
  174. package/lib/routes/landiannews/index.ts +1 -1
  175. package/lib/routes/landiannews/tag.ts +1 -1
  176. package/lib/routes/line/utils.ts +1 -1
  177. package/lib/routes/lineageos/changes.ts +79 -0
  178. package/lib/routes/lineageos/namespace.ts +9 -0
  179. package/lib/routes/linkedin/cn/renderer.ts +1 -1
  180. package/lib/routes/liquipedia/cs-matches.ts +42 -14
  181. package/lib/routes/literotica/new.ts +1 -0
  182. package/lib/routes/lofter/tag.ts +27 -3
  183. package/lib/routes/makerworld/contest.ts +51 -0
  184. package/lib/routes/makerworld/namespace.ts +7 -0
  185. package/lib/routes/makerworld/trending.ts +45 -0
  186. package/lib/routes/makerworld/user-upload.ts +54 -0
  187. package/lib/routes/makerworld/utils.ts +18 -0
  188. package/lib/routes/manhuagui/comic.ts +1 -1
  189. package/lib/routes/manus/blog.ts +77 -0
  190. package/lib/routes/manus/namespace.ts +7 -0
  191. package/lib/routes/mastodon/tag.ts +48 -0
  192. package/lib/routes/mathpix/blog.ts +155 -0
  193. package/lib/routes/mathpix/namespace.ts +9 -0
  194. package/lib/routes/mathpix/templates/description.art +21 -0
  195. package/lib/routes/mckinsey/cn/category-map.ts +9 -15
  196. package/lib/routes/mckinsey/cn/index.ts +77 -40
  197. package/lib/routes/melonbooks/search.ts +1 -0
  198. package/lib/routes/metacritic/index.ts +2 -2
  199. package/lib/routes/meteoblue/namespace.ts +8 -0
  200. package/lib/routes/meteoblue/weathernews.ts +75 -0
  201. package/lib/routes/meteor/index.ts +1 -1
  202. package/lib/routes/microsoft/addon.ts +7 -9
  203. package/lib/routes/mihoyo/zzz/news.ts +106 -0
  204. package/lib/routes/missav/new.ts +2 -1
  205. package/lib/routes/mit/hanlab.ts +61 -0
  206. package/lib/routes/mit/namespace.ts +6 -0
  207. package/lib/routes/mittrchina/index.ts +3 -3
  208. package/lib/routes/mixcloud/config.ts +129 -0
  209. package/lib/routes/mixcloud/index.ts +163 -107
  210. package/lib/routes/mixcloud/user-playlist.ts +31 -0
  211. package/lib/routes/mixi2/community.ts +72 -0
  212. package/lib/routes/mixi2/discovery.ts +52 -0
  213. package/lib/routes/mixi2/home.ts +51 -0
  214. package/lib/routes/mixi2/namespace.ts +8 -0
  215. package/lib/routes/mixi2/user.ts +77 -0
  216. package/lib/routes/mixi2/utils.ts +56 -0
  217. package/lib/routes/modelscope/learn.ts +94 -0
  218. package/lib/routes/moodysmismicrosite/report.ts +1 -1
  219. package/lib/routes/musify/index.ts +130 -0
  220. package/lib/routes/musify/namespace.ts +9 -0
  221. package/lib/routes/musikguru/namespace.ts +9 -0
  222. package/lib/routes/musikguru/news.ts +146 -0
  223. package/lib/routes/musikguru/templates/description.art +21 -0
  224. package/lib/routes/myfans/post.ts +1 -0
  225. package/lib/routes/nankai/cc-notice.ts +114 -0
  226. package/lib/routes/nankai/jwc.ts +131 -0
  227. package/lib/routes/nankai/namespace.ts +7 -0
  228. package/lib/routes/nankai/notice.ts +84 -0
  229. package/lib/routes/nankai/yzb.ts +97 -0
  230. package/lib/routes/neu/yz.ts +172 -0
  231. package/lib/routes/newslaundry/explainer.ts +30 -0
  232. package/lib/routes/newslaundry/namespace.ts +8 -0
  233. package/lib/routes/newslaundry/nl-cheatsheet.ts +30 -0
  234. package/lib/routes/newslaundry/nl-collaborations.ts +30 -0
  235. package/lib/routes/newslaundry/podcast.ts +61 -0
  236. package/lib/routes/newslaundry/reports.ts +30 -0
  237. package/lib/routes/newslaundry/shot.ts +30 -0
  238. package/lib/routes/newslaundry/subscriber-only.ts +30 -0
  239. package/lib/routes/newslaundry/templates/description.art +28 -0
  240. package/lib/routes/newslaundry/utils.ts +108 -0
  241. package/lib/routes/newswav/latest.ts +100 -0
  242. package/lib/routes/newswav/namespace.ts +7 -0
  243. package/lib/routes/nhentai/index.ts +1 -0
  244. package/lib/routes/nifd/research.ts +16 -0
  245. package/lib/routes/nio/namespace.ts +9 -0
  246. package/lib/routes/nio/nioradio.ts +75 -0
  247. package/lib/routes/njust/cs.ts +58 -0
  248. package/lib/routes/njust/utils.ts +1 -1
  249. package/lib/routes/ntdm/video.ts +1 -1
  250. package/lib/routes/nuaa/utils/pypasswaf.ts +1 -1
  251. package/lib/routes/oilchem/index.ts +1 -1
  252. package/lib/routes/oncc/money18.ts +1 -1
  253. package/lib/routes/openai/cookbook.ts +1 -1
  254. package/lib/routes/paulgraham/article.ts +2 -2
  255. package/lib/routes/picuki/profile.ts +4 -0
  256. package/lib/routes/pixiv/bookmarks.ts +1 -1
  257. package/lib/routes/pixiv/novel-api/series/sfw.ts +1 -1
  258. package/lib/routes/pixiv/novels.ts +2 -2
  259. package/lib/routes/pixiv/user.ts +1 -1
  260. package/lib/routes/playno1/av.ts +1 -0
  261. package/lib/routes/pornhub/model.ts +3 -7
  262. package/lib/routes/pornhub/pornstar.ts +2 -7
  263. package/lib/routes/pornhub/users.ts +2 -7
  264. package/lib/routes/pornhub/utils.ts +12 -1
  265. package/lib/routes/qingting/podcast.ts +2 -1
  266. package/lib/routes/qipamaijia/index.ts +1 -0
  267. package/lib/routes/questmobile/report.ts +1 -1
  268. package/lib/routes/railway/index.ts +73 -0
  269. package/lib/routes/railway/namespace.ts +8 -0
  270. package/lib/routes/reuters/common.ts +0 -3
  271. package/lib/routes/rockthejvm/articles.ts +167 -0
  272. package/lib/routes/rockthejvm/namespace.ts +9 -0
  273. package/lib/routes/rockthejvm/templates/description.art +7 -0
  274. package/lib/routes/samrdprc/namespace.ts +7 -0
  275. package/lib/routes/samrdprc/news.ts +79 -0
  276. package/lib/routes/sankei/namespace.ts +7 -0
  277. package/lib/routes/sankei/news.ts +68 -0
  278. package/lib/routes/sankei/topics.ts +71 -0
  279. package/lib/routes/sciencenet/user.ts +1 -1
  280. package/lib/routes/scoop/apps.ts +188 -0
  281. package/lib/routes/scoop/namespace.ts +9 -0
  282. package/lib/routes/scoop/templates/description.art +56 -0
  283. package/lib/routes/scpta/namespace.ts +8 -0
  284. package/lib/routes/scpta/news.ts +101 -0
  285. package/lib/routes/seekingalpha/index.ts +1 -1
  286. package/lib/routes/sehuatang/index.ts +29 -31
  287. package/lib/routes/setn/index.ts +11 -2
  288. package/lib/routes/seu/cyber/index.ts +78 -0
  289. package/lib/routes/sicau/jiaowu.ts +42 -34
  290. package/lib/routes/sis001/forum.ts +1 -0
  291. package/lib/routes/sjtu/seiee/icisee.ts +67 -0
  292. package/lib/routes/sketis/isabelle-dev/blog/index.ts +1 -1
  293. package/lib/routes/smartlink/index.ts +13 -3
  294. package/lib/routes/sohu/mp.ts +17 -6
  295. package/lib/routes/sotwe/namespace.ts +1 -0
  296. package/lib/routes/sotwe/user.ts +98 -0
  297. package/lib/routes/spankbang/new-videos.ts +1 -0
  298. package/lib/routes/spglobal/ratings.ts +1 -1
  299. package/lib/routes/stanford/blog.ts +77 -0
  300. package/lib/routes/stanford/namespace.ts +7 -0
  301. package/lib/routes/syosetu/index.ts +1 -1
  302. package/lib/routes/t66y/index.ts +1 -0
  303. package/lib/routes/taobao/mysql.ts +157 -0
  304. package/lib/routes/taobao/namespace.ts +2 -2
  305. package/lib/routes/techcrunch/category.ts +48 -0
  306. package/lib/routes/telegram/channel.ts +2 -2
  307. package/lib/routes/tesla/cx.ts +1 -1
  308. package/lib/routes/test/index.ts +1 -1
  309. package/lib/routes/themoviedb/episodes.ts +1 -1
  310. package/lib/routes/thewirehindi/category.ts +78 -0
  311. package/lib/routes/thewirehindi/index.ts +43 -0
  312. package/lib/routes/thewirehindi/namespace.ts +7 -0
  313. package/lib/routes/thewirehindi/templates/description.art +9 -0
  314. package/lib/routes/thewirehindi/utils.ts +33 -0
  315. package/lib/routes/threads/utils.ts +2 -2
  316. package/lib/routes/tidb/blog.ts +314 -0
  317. package/lib/routes/tidb/namespace.ts +9 -0
  318. package/lib/routes/tumblr/namespace.ts +17 -0
  319. package/lib/routes/tumblr/posts.ts +74 -0
  320. package/lib/routes/tumblr/utils.ts +110 -0
  321. package/lib/routes/tver/namespace.ts +7 -0
  322. package/lib/routes/tver/series.ts +98 -0
  323. package/lib/routes/twitter/api/web-api/login.ts +1 -3
  324. package/lib/routes/twitter/api/web-api/utils.ts +23 -1
  325. package/lib/routes/twitter/utils.ts +21 -21
  326. package/lib/routes/udn/breaking-news.ts +2 -2
  327. package/lib/routes/uestc/auto.ts +1 -1
  328. package/lib/routes/uestc/cqe.ts +1 -1
  329. package/lib/routes/uestc/scse.ts +1 -1
  330. package/lib/routes/uestc/sice.ts +1 -1
  331. package/lib/routes/uestc/sise.ts +1 -1
  332. package/lib/routes/upc/jwc.ts +32 -46
  333. package/lib/routes/uptimerobot/rss.ts +1 -1
  334. package/lib/routes/visionias/daily-news-summary.ts +65 -0
  335. package/lib/routes/visionias/monthly-magazine.ts +68 -0
  336. package/lib/routes/visionias/news-today.ts +3 -13
  337. package/lib/routes/visionias/utils.ts +5 -5
  338. package/lib/routes/visionias/weekly-focus.ts +2 -2
  339. package/lib/routes/wdfxw/bookfree.ts +528 -0
  340. package/lib/routes/wdfxw/namespace.ts +8 -0
  341. package/lib/routes/wdfxw/templates/description.art +13 -0
  342. package/lib/routes/whu/swrh.ts +1 -1
  343. package/lib/routes/windsurf/blog.ts +118 -0
  344. package/lib/routes/windsurf/changelog.ts +100 -0
  345. package/lib/routes/windsurf/namespace.ts +9 -0
  346. package/lib/routes/windsurf/templates/description.art +21 -0
  347. package/lib/routes/x6d/index.ts +1 -1
  348. package/lib/routes/xbookcn/blog.ts +1 -0
  349. package/lib/routes/xiaohongshu/util.ts +1 -3
  350. package/lib/routes/xiaoyuzhou/pickup.ts +1 -1
  351. package/lib/routes/ximalaya/album.ts +32 -70
  352. package/lib/routes/ximalaya/types.ts +48 -0
  353. package/lib/routes/ximalaya/utils.ts +9 -7
  354. package/lib/routes/xmanhua/index.ts +1 -0
  355. package/lib/routes/xueqiu/cookies.ts +1 -1
  356. package/lib/routes/xueqiu/user.ts +1 -1
  357. package/lib/routes/xwenming/index.ts +184 -0
  358. package/lib/routes/xwenming/namespace.ts +9 -0
  359. package/lib/routes/yahoo/news/utils.ts +1 -1
  360. package/lib/routes/yande/post.ts +3 -0
  361. package/lib/routes/ymgal/game.ts +1 -0
  362. package/lib/routes/youtube/api/google.ts +27 -0
  363. package/lib/routes/youtube/api/youtubei.ts +70 -20
  364. package/lib/routes/youtube/community.ts +3 -1
  365. package/lib/routes/youtube/utils.ts +16 -14
  366. package/lib/routes/zaobao/util.ts +8 -5
  367. package/lib/routes/zhihu/activities.ts +3 -0
  368. package/lib/routes/zhihu/execlib/x-zse-96-v3.ts +5 -5
  369. package/lib/routes/zhizhuan100/namespace.ts +7 -0
  370. package/lib/routes/zhizhuan100/report.ts +79 -0
  371. package/lib/routes/zimuxia/portfolio.ts +1 -1
  372. package/lib/routes/zju/sis/index.ts +161 -0
  373. package/lib/server.ts +5 -0
  374. package/lib/types.ts +58 -54
  375. package/lib/utils/helpers.ts +1 -1
  376. package/lib/utils/logger.ts +1 -1
  377. package/lib/utils/proxy/index.ts +102 -18
  378. package/lib/utils/proxy/multi-proxy.ts +139 -0
  379. package/lib/utils/proxy/unify-proxy.ts +3 -1
  380. package/lib/utils/puppeteer-utils.test.ts +1 -1
  381. package/lib/utils/puppeteer.test.ts +14 -27
  382. package/lib/utils/puppeteer.ts +51 -37
  383. package/lib/utils/readable-social.test.ts +65 -0
  384. package/lib/utils/readable-social.ts +15 -1
  385. package/lib/utils/request-rewriter/fetch.ts +42 -4
  386. package/package.json +54 -56
  387. package/lib/routes/mixcloud/queries.ts +0 -2274
  388. package/lib/routes-deprecated/dev.to/top.js +0 -40
@@ -0,0 +1,763 @@
1
+ import { type Data, type DataItem, type Route, ViewType } from '@/types';
2
+
3
+ import { art } from '@/utils/render';
4
+ import cache from '@/utils/cache';
5
+ import ofetch from '@/utils/ofetch';
6
+ import { parseDate } from '@/utils/parse-date';
7
+
8
+ import { type CheerioAPI, type Cheerio, load } from 'cheerio';
9
+ import type { Element } from 'domhandler';
10
+ import { type Context } from 'hono';
11
+ import path from 'node:path';
12
+
13
+ export const handler = async (ctx: Context): Promise<Data> => {
14
+ const { category } = ctx.req.param();
15
+ const limit: number = Number.parseInt(ctx.req.query('limit') ?? '20', 10);
16
+
17
+ const baseUrl: string = 'http://banshujiang.cn';
18
+ const targetUrl: string = new URL(`${category ? 'e_books' : `category/${category}`}/page/1`, baseUrl).href;
19
+
20
+ const response = await ofetch(targetUrl);
21
+ const $: CheerioAPI = load(response);
22
+ const language = $('html').attr('lang') ?? 'zh';
23
+
24
+ let items: DataItem[] = [];
25
+
26
+ items = $('ul.small-list li.row')
27
+ .slice(0, limit)
28
+ .toArray()
29
+ .map((el): Element => {
30
+ const $el: Cheerio<Element> = $(el);
31
+ const $aEl: Cheerio<Element> = $el.find('span.book-property__title').first().next('a');
32
+
33
+ const title: string = $aEl.text().trim();
34
+ const image: string | undefined = $el.find('meta[property="og:image"]').attr('content') ?? $el.find('img').attr('src');
35
+ const description: string | undefined = art(path.join(__dirname, 'templates/description.art'), {
36
+ images: image
37
+ ? [
38
+ {
39
+ src: image,
40
+ alt: title,
41
+ },
42
+ ]
43
+ : undefined,
44
+ description: $el.find('div.small-list__item-desc').html(),
45
+ });
46
+ const pubDateStr: string | undefined = image?.split(/\?timestamp=/).pop();
47
+ const linkUrl: string | undefined = $aEl.attr('href');
48
+ const categoryEls: Element[] = $el.find('span.book-property__title').toArray();
49
+ const categories: string[] = [...new Set(categoryEls.map((el) => $(el).next('span').text()).filter(Boolean))];
50
+ const authors: DataItem['author'] = $el.find('span.book-property__title').eq(1).text();
51
+ const upDatedStr: string | undefined = pubDateStr;
52
+
53
+ const processedItem: DataItem = {
54
+ title,
55
+ description,
56
+ pubDate: pubDateStr ? parseDate(pubDateStr, 'x') : undefined,
57
+ link: linkUrl ? new URL(linkUrl, baseUrl).href : undefined,
58
+ category: categories,
59
+ author: authors,
60
+ content: {
61
+ html: description,
62
+ text: description,
63
+ },
64
+ image,
65
+ banner: image,
66
+ updated: upDatedStr ? parseDate(upDatedStr, 'x') : undefined,
67
+ language,
68
+ };
69
+
70
+ return processedItem;
71
+ });
72
+
73
+ items = await Promise.all(
74
+ items.map((item) => {
75
+ if (!item.link) {
76
+ return item;
77
+ }
78
+
79
+ return cache.tryGet(item.link, async (): Promise<DataItem> => {
80
+ const detailResponse = await ofetch(item.link);
81
+ const $$: CheerioAPI = load(detailResponse);
82
+
83
+ const title: string = $$('div.ebook-title').text().trim();
84
+ const image: string | undefined = $$('div.span6 img').attr('src');
85
+ const description: string | undefined = art(path.join(__dirname, 'templates/description.art'), {
86
+ images: image
87
+ ? [
88
+ {
89
+ src: image,
90
+ alt: title,
91
+ },
92
+ ]
93
+ : undefined,
94
+ description: ($$('table').first().parent().html() ?? '') + ($$('div.ebook-markdown').html() ?? ''),
95
+ });
96
+
97
+ $$('ul.inline').parent().parent().remove();
98
+
99
+ const pubDateStr: string | undefined = image?.split(/\?timestamp=/).pop();
100
+ const linkUrl: string | undefined = $$('div.ebook-title a').attr('href');
101
+ const categories: string[] = [
102
+ ...new Set(
103
+ $$('table tr')
104
+ .toArray()
105
+ .map((el) => $$(el).find('td').last().text())
106
+ .filter(Boolean)
107
+ ),
108
+ ];
109
+ const authors: DataItem['author'] = $$('table tr').first().find('td').last().text();
110
+ const upDatedStr: string | undefined = pubDateStr;
111
+
112
+ const processedItem: DataItem = {
113
+ title,
114
+ description,
115
+ pubDate: pubDateStr ? parseDate(pubDateStr, 'x') : item.pubDate,
116
+ link: linkUrl ? new URL(linkUrl, baseUrl).href : item.link,
117
+ category: categories,
118
+ author: authors,
119
+ content: {
120
+ html: description,
121
+ text: description,
122
+ },
123
+ image,
124
+ banner: image,
125
+ updated: upDatedStr ? parseDate(upDatedStr, 'x') : item.updated,
126
+ language,
127
+ };
128
+
129
+ return {
130
+ ...item,
131
+ ...processedItem,
132
+ };
133
+ });
134
+ })
135
+ );
136
+
137
+ const title: string = $('title')
138
+ .text()
139
+ .replace(/第1页\s-\s/, '');
140
+
141
+ return {
142
+ title,
143
+ description: title.split(/-/).pop()?.trim(),
144
+ link: targetUrl,
145
+ item: items,
146
+ allowEmpty: true,
147
+ image: new URL('logo.png?imageView2/2/w/128/h/128/q/100', baseUrl).href,
148
+ author: $('a.brand').text(),
149
+ language,
150
+ id: $('meta[property="og:url"]').attr('content'),
151
+ };
152
+ };
153
+
154
+ export const route: Route = {
155
+ path: '/:category{.+}?',
156
+ name: '分类',
157
+ url: 'banshujiang.cn',
158
+ maintainers: ['nczitzk'],
159
+ handler,
160
+ example: '/banshujiang/other/人工智能',
161
+ parameters: {
162
+ category: {
163
+ description: '分类,默认为全部,可在对应分类页 URL 中找到',
164
+ options: [
165
+ {
166
+ label: 'ActionScript',
167
+ value: 'programming_language/ActionScript',
168
+ },
169
+ {
170
+ label: 'ASP.net',
171
+ value: 'programming_language/ASP.net',
172
+ },
173
+ {
174
+ label: 'C',
175
+ value: 'programming_language/C',
176
+ },
177
+ {
178
+ label: 'C#',
179
+ value: 'programming_language/C%23',
180
+ },
181
+ {
182
+ label: 'C++',
183
+ value: 'programming_language/C++',
184
+ },
185
+ {
186
+ label: 'CoffeeScript',
187
+ value: 'programming_language/CoffeeScript',
188
+ },
189
+ {
190
+ label: 'CSS',
191
+ value: 'programming_language/CSS',
192
+ },
193
+ {
194
+ label: 'Dart',
195
+ value: 'programming_language/Dart',
196
+ },
197
+ {
198
+ label: 'Elixir',
199
+ value: 'programming_language/Elixir',
200
+ },
201
+ {
202
+ label: 'Erlang',
203
+ value: 'programming_language/Erlang',
204
+ },
205
+ {
206
+ label: 'F#',
207
+ value: 'programming_language/F%23',
208
+ },
209
+ {
210
+ label: 'Go',
211
+ value: 'programming_language/Go',
212
+ },
213
+ {
214
+ label: 'Groovy',
215
+ value: 'programming_language/Groovy',
216
+ },
217
+ {
218
+ label: 'Haskell',
219
+ value: 'programming_language/Haskell',
220
+ },
221
+ {
222
+ label: 'HTML5',
223
+ value: 'programming_language/HTML5',
224
+ },
225
+ {
226
+ label: 'Java',
227
+ value: 'programming_language/Java',
228
+ },
229
+ {
230
+ label: 'JavaScript',
231
+ value: 'programming_language/JavaScript',
232
+ },
233
+ {
234
+ label: 'Kotlin',
235
+ value: 'programming_language/Kotlin',
236
+ },
237
+ {
238
+ label: 'Lua',
239
+ value: 'programming_language/Lua',
240
+ },
241
+ {
242
+ label: 'Objective-C',
243
+ value: 'programming_language/Objective-C',
244
+ },
245
+ {
246
+ label: 'Perl',
247
+ value: 'programming_language/Perl',
248
+ },
249
+ {
250
+ label: 'PHP',
251
+ value: 'programming_language/PHP',
252
+ },
253
+ {
254
+ label: 'PowerShell',
255
+ value: 'programming_language/PowerShell',
256
+ },
257
+ {
258
+ label: 'Python',
259
+ value: 'programming_language/Python',
260
+ },
261
+ {
262
+ label: 'R',
263
+ value: 'programming_language/R',
264
+ },
265
+ {
266
+ label: 'Ruby',
267
+ value: 'programming_language/Ruby',
268
+ },
269
+ {
270
+ label: 'Rust',
271
+ value: 'programming_language/Rust',
272
+ },
273
+ {
274
+ label: 'Scala',
275
+ value: 'programming_language/Scala',
276
+ },
277
+ {
278
+ label: 'Shell Script',
279
+ value: 'programming_language/Shell%20Script',
280
+ },
281
+ {
282
+ label: 'SQL',
283
+ value: 'programming_language/SQL',
284
+ },
285
+ {
286
+ label: 'Swift',
287
+ value: 'programming_language/Swift',
288
+ },
289
+ {
290
+ label: 'TypeScript',
291
+ value: 'programming_language/TypeScript',
292
+ },
293
+ {
294
+ label: 'Android',
295
+ value: 'mobile_development/Android',
296
+ },
297
+ {
298
+ label: 'iOS',
299
+ value: 'mobile_development/iOS',
300
+ },
301
+ {
302
+ label: 'Linux',
303
+ value: 'operation_system/Linux',
304
+ },
305
+ {
306
+ label: 'Mac OS X',
307
+ value: 'operation_system/Mac%20OS%20X',
308
+ },
309
+ {
310
+ label: 'Unix',
311
+ value: 'operation_system/Unix',
312
+ },
313
+ {
314
+ label: 'Windows',
315
+ value: 'operation_system/Windows',
316
+ },
317
+ {
318
+ label: 'DB2',
319
+ value: 'database/DB2',
320
+ },
321
+ {
322
+ label: 'MongoDB',
323
+ value: 'database/MongoDB',
324
+ },
325
+ {
326
+ label: 'MySQL',
327
+ value: 'database/MySQL',
328
+ },
329
+ {
330
+ label: 'Oracle',
331
+ value: 'database/Oracle',
332
+ },
333
+ {
334
+ label: 'PostgreSQL',
335
+ value: 'database/PostgreSQL',
336
+ },
337
+ {
338
+ label: 'SQL Server',
339
+ value: 'database/SQL%20Server',
340
+ },
341
+ {
342
+ label: 'SQLite',
343
+ value: 'database/SQLite',
344
+ },
345
+ {
346
+ label: 'Apache 项目',
347
+ value: 'open_source/Apache项目',
348
+ },
349
+ {
350
+ label: 'Web 开发',
351
+ value: 'open_source/Web开发',
352
+ },
353
+ {
354
+ label: '区块链',
355
+ value: 'open_source/区块链',
356
+ },
357
+ {
358
+ label: '程序开发',
359
+ value: 'open_source/程序开发',
360
+ },
361
+ {
362
+ label: '人工智能',
363
+ value: 'other/人工智能',
364
+ },
365
+ {
366
+ label: '容器技术',
367
+ value: 'other/容器技术',
368
+ },
369
+ {
370
+ label: '中文',
371
+ value: 'language/中文',
372
+ },
373
+ {
374
+ label: '英文',
375
+ value: 'language/英文',
376
+ },
377
+ ],
378
+ },
379
+ },
380
+ description: `:::tip
381
+ 订阅 [人工智能](https://banshujiang.cn//category/other/人工智能),其源网址为 \`https://banshujiang.cn//category/other/人工智能\`,请参考该 URL 指定部分构成参数,此时路由为 [\`/banshujiang/category/other/人工智能\`](https://rsshub.app/banshujiang/other/人工智能)。
382
+ :::
383
+
384
+ <details>
385
+ <summary>更多分类</summary>
386
+
387
+ #### 编程语言
388
+
389
+ | 分类 | ID |
390
+ | --------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
391
+ | [ActionScript](http://www.banshujiang.cn/category/programming_language/ActionScript/page/1) | [category/programming_language/ActionScript](https://rsshub.app/banshujiang/programming_language/ActionScript) |
392
+ | [ASP.net](http://www.banshujiang.cn/category/programming_language/ASP.net/page/1) | [category/programming_language/ASP.net](https://rsshub.app/banshujiang/programming_language/ASP.net) |
393
+ | [C](http://www.banshujiang.cn/category/programming_language/C) | [category/programming_language/C](https://rsshub.app/banshujiang/programming_language/C) |
394
+ | [C#](http://www.banshujiang.cn/category/programming_language/C%23) | [category/programming_language/C%23](https://rsshub.app/banshujiang/programming_language/C%23) |
395
+ | [C++](http://www.banshujiang.cn/category/programming_language/C++) | [category/programming_language/C++](https://rsshub.app/banshujiang/programming_language/C++) |
396
+ | [CoffeeScript](http://www.banshujiang.cn/category/programming_language/CoffeeScript) | [category/programming_language/CoffeeScript](https://rsshub.app/banshujiang/programming_language/CoffeeScript) |
397
+ | [CSS](http://www.banshujiang.cn/category/programming_language/CSS) | [category/programming_language/CSS) |
398
+ | [Dart](http://www.banshujiang.cn/category/programming_language/Dart) | [category/programming_language/Dart](https://rsshub.app/banshujiang/programming_language/Dart) |
399
+ | [Elixir](http://www.banshujiang.cn/category/programming_language/Elixir) | [category/programming_language/Elixir](https://rsshub.app/banshujiang/programming_language/Elixir) |
400
+ | [Erlang](http://www.banshujiang.cn/category/programming_language/Erlang) | [category/programming_language/Erlang](https://rsshub.app/banshujiang/programming_language/Erlang) |
401
+ | [F#](http://www.banshujiang.cn/category/programming_language/F%23) | [category/programming_language/F%23](https://rsshub.app/banshujiang/programming_language/F%23) |
402
+ | [Go](http://www.banshujiang.cn/category/programming_language/Go) | [category/programming_language/Go](https://rsshub.app/banshujiang/programming_language/Go) |
403
+ | [Groovy](http://www.banshujiang.cn/category/programming_language/Groovy) | [category/programming_language/Groovy](https://rsshub.app/banshujiang/programming_language/Groovy) |
404
+ | [Haskell](http://www.banshujiang.cn/category/programming_language/Haskell) | [category/programming_language/Haskell](https://rsshub.app/banshujiang/programming_language/Haskell) |
405
+ | [HTML5](http://www.banshujiang.cn/category/programming_language/HTML5) | [category/programming_language/HTML5](https://rsshub.app/banshujiang/programming_language/HTML5) |
406
+ | [Java](http://www.banshujiang.cn/category/programming_language/Java) | [category/programming_language/Java](https://rsshub.app/banshujiang/programming_language/Java) |
407
+ | [JavaScript](http://www.banshujiang.cn/category/programming_language/JavaScript) | [category/programming_language/JavaScript](https://rsshub.app/banshujiang/programming_language/JavaScript) |
408
+ | [Kotlin](http://www.banshujiang.cn/category/programming_language/Kotlin) | [category/programming_language/Kotlin](https://rsshub.app/banshujiang/programming_language/Kotlin) |
409
+ | [Lua](http://www.banshujiang.cn/category/programming_language/Lua) | [category/programming_language/Lua](https://rsshub.app/banshujiang/programming_language/Lua) |
410
+ | [Objective-C](http://www.banshujiang.cn/category/programming_language/Objective-C) | [category/programming_language/Objective-C](https://rsshub.app/banshujiang/programming_language/Objective-C) |
411
+ | [Perl](http://www.banshujiang.cn/category/programming_language/Perl) | [category/programming_language/Perl](https://rsshub.app/banshujiang/programming_language/Perl) |
412
+ | [PHP](http://www.banshujiang.cn/category/programming_language/PHP) | [category/programming_language/PHP](https://rsshub.app/banshujiang/programming_language/PHP) |
413
+ | [PowerShell](http://www.banshujiang.cn/category/programming_language/PowerShell) | [category/programming_language/PowerShell](https://rsshub.app/banshujiang/programming_language/PowerShell) |
414
+ | [Python](http://www.banshujiang.cn/category/programming_language/Python) | [category/programming_language/Python](https://rsshub.app/banshujiang/programming_language/Python) |
415
+ | [R](http://www.banshujiang.cn/category/programming_language/R/page/1) | [category/programming_language/R](https://rsshub.app/banshujiang/programming_language/R) |
416
+ | [Ruby](http://www.banshujiang.cn/category/programming_language/Ruby/page/1) | [category/programming_language/Ruby](https://rsshub.app/banshujiang/programming_language/Ruby) |
417
+ | [Rust](http://www.banshujiang.cn/category/programming_language/Rust/page/1) | [category/programming_language/Rust](https://rsshub.app/banshujiang/programming_language/Rust) |
418
+ | [Scala](http://www.banshujiang.cn/category/programming_language/Scala/page/1) | [category/programming_language/Scala](https://rsshub.app/banshujiang/programming_language/Scala) |
419
+ | [Shell Script](http://www.banshujiang.cn/category/programming_language/Shell%20Script/page/1) | [category/programming_language/Shell%20Script](https://rsshub.app/banshujiang/programming_language/Shell%20Script) |
420
+ | [SQL](http://www.banshujiang.cn/category/programming_language/SQL/page/1) | [category/programming_language/SQL](https://rsshub.app/banshujiang/programming_language/SQL) |
421
+ | [Swift](http://www.banshujiang.cn/category/programming_language/Swift/page/1) | [category/programming_language/Swift](https://rsshub.app/banshujiang/programming_language/Swift) |
422
+ | [TypeScript](http://www.banshujiang.cn/category/programming_language/TypeScript/page/1) | [category/programming_language/TypeScript](https://rsshub.app/banshujiang/programming_language/TypeScript) |
423
+
424
+ #### 移动开发
425
+
426
+ | 分类 | ID |
427
+ | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
428
+ | [Android](http://www.banshujiang.cn/category/mobile_development/Android/page/1) | [category/mobile_development/Android](https://rsshub.app/banshujiang/mobile_development/Android) |
429
+ | [iOS](http://www.banshujiang.cn/category/mobile_development/iOS/page/1) | [category/mobile_development/iOS](https://rsshub.app/banshujiang/mobile_development/iOS) |
430
+
431
+ #### 操作系统
432
+
433
+ | 分类 | ID |
434
+ | ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
435
+ | [Linux](http://www.banshujiang.cn/category/operation_system/Linux/page/1) | [category/operation_system/Linux](https://rsshub.app/banshujiang/operation_system/Linux) |
436
+ | [Mac OS X](http://www.banshujiang.cn/category/operation_system/Mac%20OS%20X/page/1) | [category/operation_system/Mac%20OS%20X](https://rsshub.app/banshujiang/operation_system/Mac%20OS%20X) |
437
+ | [Unix](http://www.banshujiang.cn/category/operation_system/Unix/page/1) | [category/operation_system/Unix](https://rsshub.app/banshujiang/operation_system/Unix) |
438
+ | [Windows](http://www.banshujiang.cn/category/operation_system/Windows/page/1) | [category/operation_system/Windows](https://rsshub.app/banshujiang/operation_system/Windows) |
439
+
440
+ #### 数据库
441
+
442
+ | 分类 | ID |
443
+ | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
444
+ | [DB2](http://www.banshujiang.cn/category/database/DB2/page/1) | [category/database/DB2](https://rsshub.app/banshujiang/database/DB2) |
445
+ | [MongoDB](http://www.banshujiang.cn/category/database/MongoDB/page/1) | [category/database/MongoDB](https://rsshub.app/banshujiang/database/MongoDB) |
446
+ | [MySQL](http://www.banshujiang.cn/category/database/MySQL/page/1) | [category/database/MySQL](https://rsshub.app/banshujiang/database/MySQL) |
447
+ | [Oracle](http://www.banshujiang.cn/category/database/Oracle/page/1) | [category/database/Oracle](https://rsshub.app/banshujiang/database/Oracle) |
448
+ | [PostgreSQL](http://www.banshujiang.cn/category/database/PostgreSQL/page/1) | [category/database/PostgreSQL](https://rsshub.app/banshujiang/database/PostgreSQL) |
449
+ | [SQL Server](http://www.banshujiang.cn/category/database/SQL%20Server/page/1) | [category/database/SQL%20Server](https://rsshub.app/banshujiang/database/SQL%20Server) |
450
+ | [SQLite](http://www.banshujiang.cn/category/database/SQLite/page/1) | [category/database/SQLite](https://rsshub.app/banshujiang/database/SQLite) |
451
+
452
+ #### 开源软件
453
+
454
+ | 分类 | ID |
455
+ | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
456
+ | [Apache 项目](http://www.banshujiang.cn/category/open_source/Apache项目/page/1) | [category/open_source/Apache 项目](https://rsshub.app/banshujiang/open_source/Apache项目) |
457
+ | [Web 开发](http://www.banshujiang.cn/category/open_source/Web开发/page/1) | [category/open_source/Web 开发](https://rsshub.app/banshujiang/open_source/Web开发) |
458
+ | [区块链](http://www.banshujiang.cn/category/open_source/区块链/page/1) | [category/open_source/区块链](https://rsshub.app/banshujiang/open_source/区块链) |
459
+ | [程序开发](http://www.banshujiang.cn/category/open_source/程序开发/page/1) | [category/open_source/程序开发](https://rsshub.app/banshujiang/open_source/程序开发) |
460
+
461
+ #### 其他
462
+
463
+ | 分类 | ID |
464
+ | -------------------------------------------------------------------- | ------------------------------------------------------------------------ |
465
+ | [人工智能](http://www.banshujiang.cn/category/other/人工智能/page/1) | [category/other/人工智能](https://rsshub.app/banshujiang/other/人工智能) |
466
+ | [容器技术](http://www.banshujiang.cn/category/other/容器技术/page/1) | [category/other/容器技术](https://rsshub.app/banshujiang/other/容器技术) |
467
+
468
+ #### 语言
469
+
470
+ | 分类 | ID |
471
+ | --------------------------------------------------------------- | ---------------------------------------------------------------------- |
472
+ | [中文](http://www.banshujiang.cn/category/language/中文/page/1) | [category/language/中文](https://rsshub.app/banshujiang/language/中文) |
473
+ | [英文](http://www.banshujiang.cn/category/language/英文/page/1) | [category/language/英文](https://rsshub.app/banshujiang/language/英文) |
474
+
475
+ </details>
476
+ `,
477
+ categories: ['reading'],
478
+ features: {
479
+ requireConfig: false,
480
+ requirePuppeteer: false,
481
+ antiCrawler: false,
482
+ supportRadar: true,
483
+ supportBT: false,
484
+ supportPodcast: false,
485
+ supportScihub: false,
486
+ },
487
+ radar: [
488
+ {
489
+ source: ['banshujiang.cn/:category?'],
490
+ target: (params) => {
491
+ const category: string = params.category;
492
+
493
+ return `/banshujiang${category ? `/${category}` : ''}`;
494
+ },
495
+ },
496
+ {
497
+ title: 'ActionScript',
498
+ source: ['banshujiang.cn/programming_language/ActionScript/page/1'],
499
+ target: '/programming_language/ActionScript',
500
+ },
501
+ {
502
+ title: 'ASP.net',
503
+ source: ['banshujiang.cn/programming_language/ASP.net/page/1'],
504
+ target: '/programming_language/ASP.net',
505
+ },
506
+ {
507
+ title: 'C',
508
+ source: ['banshujiang.cn/programming_language/C'],
509
+ target: '/programming_language/C',
510
+ },
511
+ {
512
+ title: 'C#',
513
+ source: ['banshujiang.cn/programming_language/C%23'],
514
+ target: '/programming_language/C%23',
515
+ },
516
+ {
517
+ title: 'C++',
518
+ source: ['banshujiang.cn/programming_language/C++'],
519
+ target: '/programming_language/C++',
520
+ },
521
+ {
522
+ title: 'CoffeeScript',
523
+ source: ['banshujiang.cn/programming_language/CoffeeScript'],
524
+ target: '/programming_language/CoffeeScript',
525
+ },
526
+ {
527
+ title: 'CSS',
528
+ source: ['banshujiang.cn/programming_language/CSS'],
529
+ target: '/programming_language/CSS',
530
+ },
531
+ {
532
+ title: 'Dart',
533
+ source: ['banshujiang.cn/programming_language/Dart'],
534
+ target: '/programming_language/Dart',
535
+ },
536
+ {
537
+ title: 'Elixir',
538
+ source: ['banshujiang.cn/programming_language/Elixir'],
539
+ target: '/programming_language/Elixir',
540
+ },
541
+ {
542
+ title: 'Erlang',
543
+ source: ['banshujiang.cn/programming_language/Erlang'],
544
+ target: '/programming_language/Erlang',
545
+ },
546
+ {
547
+ title: 'F#',
548
+ source: ['banshujiang.cn/programming_language/F%23'],
549
+ target: '/programming_language/F%23',
550
+ },
551
+ {
552
+ title: 'Go',
553
+ source: ['banshujiang.cn/programming_language/Go'],
554
+ target: '/programming_language/Go',
555
+ },
556
+ {
557
+ title: 'Groovy',
558
+ source: ['banshujiang.cn/programming_language/Groovy'],
559
+ target: '/programming_language/Groovy',
560
+ },
561
+ {
562
+ title: 'Haskell',
563
+ source: ['banshujiang.cn/programming_language/Haskell'],
564
+ target: '/programming_language/Haskell',
565
+ },
566
+ {
567
+ title: 'HTML5',
568
+ source: ['banshujiang.cn/programming_language/HTML5'],
569
+ target: '/programming_language/HTML5',
570
+ },
571
+ {
572
+ title: 'Java',
573
+ source: ['banshujiang.cn/programming_language/Java'],
574
+ target: '/programming_language/Java',
575
+ },
576
+ {
577
+ title: 'JavaScript',
578
+ source: ['banshujiang.cn/programming_language/JavaScript'],
579
+ target: '/programming_language/JavaScript',
580
+ },
581
+ {
582
+ title: 'Kotlin',
583
+ source: ['banshujiang.cn/programming_language/Kotlin'],
584
+ target: '/programming_language/Kotlin',
585
+ },
586
+ {
587
+ title: 'Lua',
588
+ source: ['banshujiang.cn/programming_language/Lua'],
589
+ target: '/programming_language/Lua',
590
+ },
591
+ {
592
+ title: 'Objective-C',
593
+ source: ['banshujiang.cn/programming_language/Objective-C'],
594
+ target: '/programming_language/Objective-C',
595
+ },
596
+ {
597
+ title: 'Perl',
598
+ source: ['banshujiang.cn/programming_language/Perl'],
599
+ target: '/programming_language/Perl',
600
+ },
601
+ {
602
+ title: 'PHP',
603
+ source: ['banshujiang.cn/programming_language/PHP'],
604
+ target: '/programming_language/PHP',
605
+ },
606
+ {
607
+ title: 'PowerShell',
608
+ source: ['banshujiang.cn/programming_language/PowerShell'],
609
+ target: '/programming_language/PowerShell',
610
+ },
611
+ {
612
+ title: 'Python',
613
+ source: ['banshujiang.cn/programming_language/Python'],
614
+ target: '/programming_language/Python',
615
+ },
616
+ {
617
+ title: 'R',
618
+ source: ['banshujiang.cn/programming_language/R/page/1'],
619
+ target: '/programming_language/R',
620
+ },
621
+ {
622
+ title: 'Ruby',
623
+ source: ['banshujiang.cn/programming_language/Ruby/page/1'],
624
+ target: '/programming_language/Ruby',
625
+ },
626
+ {
627
+ title: 'Rust',
628
+ source: ['banshujiang.cn/programming_language/Rust/page/1'],
629
+ target: '/programming_language/Rust',
630
+ },
631
+ {
632
+ title: 'Scala',
633
+ source: ['banshujiang.cn/programming_language/Scala/page/1'],
634
+ target: '/programming_language/Scala',
635
+ },
636
+ {
637
+ title: 'Shell Script',
638
+ source: ['banshujiang.cn/programming_language/Shell%20Script/page/1'],
639
+ target: '/programming_language/Shell%20Script',
640
+ },
641
+ {
642
+ title: 'SQL',
643
+ source: ['banshujiang.cn/programming_language/SQL/page/1'],
644
+ target: '/programming_language/SQL',
645
+ },
646
+ {
647
+ title: 'Swift',
648
+ source: ['banshujiang.cn/programming_language/Swift/page/1'],
649
+ target: '/programming_language/Swift',
650
+ },
651
+ {
652
+ title: 'TypeScript',
653
+ source: ['banshujiang.cn/programming_language/TypeScript/page/1'],
654
+ target: '/programming_language/TypeScript',
655
+ },
656
+ {
657
+ title: 'Android',
658
+ source: ['banshujiang.cn/mobile_development/Android/page/1'],
659
+ target: '/mobile_development/Android',
660
+ },
661
+ {
662
+ title: 'iOS',
663
+ source: ['banshujiang.cn/mobile_development/iOS/page/1'],
664
+ target: '/mobile_development/iOS',
665
+ },
666
+ {
667
+ title: 'Linux',
668
+ source: ['banshujiang.cn/operation_system/Linux/page/1'],
669
+ target: '/operation_system/Linux',
670
+ },
671
+ {
672
+ title: 'Mac OS X',
673
+ source: ['banshujiang.cn/operation_system/Mac%20OS%20X/page/1'],
674
+ target: '/operation_system/Mac%20OS%20X',
675
+ },
676
+ {
677
+ title: 'Unix',
678
+ source: ['banshujiang.cn/operation_system/Unix/page/1'],
679
+ target: '/operation_system/Unix',
680
+ },
681
+ {
682
+ title: 'Windows',
683
+ source: ['banshujiang.cn/operation_system/Windows/page/1'],
684
+ target: '/operation_system/Windows',
685
+ },
686
+ {
687
+ title: 'DB2',
688
+ source: ['banshujiang.cn/database/DB2/page/1'],
689
+ target: '/database/DB2',
690
+ },
691
+ {
692
+ title: 'MongoDB',
693
+ source: ['banshujiang.cn/database/MongoDB/page/1'],
694
+ target: '/database/MongoDB',
695
+ },
696
+ {
697
+ title: 'MySQL',
698
+ source: ['banshujiang.cn/database/MySQL/page/1'],
699
+ target: '/database/MySQL',
700
+ },
701
+ {
702
+ title: 'Oracle',
703
+ source: ['banshujiang.cn/database/Oracle/page/1'],
704
+ target: '/database/Oracle',
705
+ },
706
+ {
707
+ title: 'PostgreSQL',
708
+ source: ['banshujiang.cn/database/PostgreSQL/page/1'],
709
+ target: '/database/PostgreSQL',
710
+ },
711
+ {
712
+ title: 'SQL Server',
713
+ source: ['banshujiang.cn/database/SQL%20Server/page/1'],
714
+ target: '/database/SQL%20Server',
715
+ },
716
+ {
717
+ title: 'SQLite',
718
+ source: ['banshujiang.cn/database/SQLite/page/1'],
719
+ target: '/database/SQLite',
720
+ },
721
+ {
722
+ title: 'Apache 项目',
723
+ source: ['banshujiang.cn/open_source/Apache项目/page/1'],
724
+ target: '/open_source/Apache 项目',
725
+ },
726
+ {
727
+ title: 'Web 开发',
728
+ source: ['banshujiang.cn/open_source/Web开发/page/1'],
729
+ target: '/open_source/Web 开发',
730
+ },
731
+ {
732
+ title: '区块链',
733
+ source: ['banshujiang.cn/open_source/区块链/page/1'],
734
+ target: '/open_source/区块链',
735
+ },
736
+ {
737
+ title: '程序开发',
738
+ source: ['banshujiang.cn/open_source/程序开发/page/1'],
739
+ target: '/open_source/程序开发',
740
+ },
741
+ {
742
+ title: '人工智能',
743
+ source: ['banshujiang.cn/other/人工智能/page/1'],
744
+ target: '/other/人工智能',
745
+ },
746
+ {
747
+ title: '容器技术',
748
+ source: ['banshujiang.cn/other/容器技术/page/1'],
749
+ target: '/other/容器技术',
750
+ },
751
+ {
752
+ title: '中文',
753
+ source: ['banshujiang.cn/language/中文/page/1'],
754
+ target: '/language/中文',
755
+ },
756
+ {
757
+ title: '英文',
758
+ source: ['banshujiang.cn/language/英文/page/1'],
759
+ target: '/language/英文',
760
+ },
761
+ ],
762
+ view: ViewType.Articles,
763
+ };