rsshub 1.0.0-master.f9ec483 → 1.0.0-master.fa1dcc5

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 (334) hide show
  1. package/lib/config.ts +42 -1
  2. package/lib/middleware/access-control.ts +3 -3
  3. package/lib/middleware/cache.ts +5 -3
  4. package/lib/middleware/template.test.ts +6 -0
  5. package/lib/middleware/template.tsx +3 -1
  6. package/lib/router.js +0 -6
  7. package/lib/routes/141jav/index.ts +1 -1
  8. package/lib/routes/141ppv/index.ts +1 -1
  9. package/lib/routes/36kr/hot-list.ts +1 -1
  10. package/lib/routes/36kr/index.ts +1 -1
  11. package/lib/routes/78dm/index.ts +429 -43
  12. package/lib/routes/78dm/namespace.ts +2 -0
  13. package/lib/routes/78dm/templates/description.art +17 -0
  14. package/lib/routes/abc/index.ts +10 -9
  15. package/lib/routes/aeon/category.ts +1 -1
  16. package/lib/routes/aeon/type.ts +1 -1
  17. package/lib/routes/afr/latest.ts +69 -0
  18. package/lib/routes/afr/namespace.ts +7 -0
  19. package/lib/routes/afr/navigation.ts +75 -0
  20. package/lib/routes/afr/query.ts +349 -0
  21. package/lib/routes/afr/utils.ts +80 -0
  22. package/lib/routes/aibase/discover.ts +1 -1
  23. package/lib/routes/aibase/news.ts +1 -1
  24. package/lib/routes/aibase/topic.ts +1 -1
  25. package/lib/routes/air-level/index.ts +49 -0
  26. package/lib/routes/air-level/levelrank.ts +65 -0
  27. package/lib/routes/air-level/namespace.ts +12 -0
  28. package/lib/routes/ajcass/namespace.ts +11 -0
  29. package/lib/routes/ajcass/shxyj.ts +73 -0
  30. package/lib/routes/alpinelinux/pkgs.ts +2 -2
  31. package/lib/routes/anime1/anime.ts +1 -1
  32. package/lib/routes/apnews/utils.ts +6 -2
  33. package/lib/routes/appleinsider/index.ts +1 -1
  34. package/lib/routes/aqara/region.ts +1 -1
  35. package/lib/routes/asus/bios.ts +0 -1
  36. package/lib/routes/baoyu/index.ts +57 -0
  37. package/lib/routes/baoyu/namespace.ts +8 -0
  38. package/lib/routes/bilibili/article.ts +37 -14
  39. package/lib/routes/bilibili/dynamic.ts +15 -7
  40. package/lib/routes/bilibili/followings-dynamic.ts +2 -2
  41. package/lib/routes/bilibili/manga-update.ts +3 -0
  42. package/lib/routes/bilibili/ranking.ts +188 -117
  43. package/lib/routes/bilibili/reply.ts +2 -0
  44. package/lib/routes/bilibili/templates/description.art +2 -0
  45. package/lib/routes/bing/daily-wallpaper.ts +5 -1
  46. package/lib/routes/bsky/posts.ts +0 -1
  47. package/lib/routes/bsky/templates/post.art +8 -1
  48. package/lib/routes/buaa/lib/space/newbook.ts +1 -1
  49. package/lib/routes/c114/namespace.ts +2 -0
  50. package/lib/routes/c114/roll.ts +71 -42
  51. package/lib/routes/cags/edu/index.ts +84 -0
  52. package/lib/routes/cags/namespace.ts +9 -0
  53. package/lib/routes/caixin/article.ts +1 -1
  54. package/lib/routes/caixin/blog.ts +2 -3
  55. package/lib/routes/caixin/category.ts +1 -1
  56. package/lib/routes/caixin/latest.ts +12 -16
  57. package/lib/routes/caixin/namespace.ts +1 -1
  58. package/lib/routes/caixin/utils-fulltext.ts +51 -0
  59. package/lib/routes/caixin/utils.ts +37 -37
  60. package/lib/routes/cara/likes.ts +1 -1
  61. package/lib/routes/cara/portfolio.ts +1 -1
  62. package/lib/routes/cara/timeline.ts +1 -1
  63. package/lib/routes/ccfa/index.ts +11 -11
  64. package/lib/routes/chub/characters.ts +1 -1
  65. package/lib/routes/cnbeta/namespace.ts +1 -1
  66. package/lib/routes/cngold/index.ts +195 -0
  67. package/lib/routes/cngold/namespace.ts +9 -0
  68. package/lib/routes/cnki/author.ts +120 -48
  69. package/lib/routes/cnki/utils.ts +4 -4
  70. package/lib/routes/coomer/artist.ts +1 -1
  71. package/lib/routes/coomer/namespace.ts +1 -1
  72. package/lib/routes/coomer/posts.ts +2 -2
  73. package/lib/routes/coomer/utils.ts +1 -1
  74. package/lib/routes/cpcaauto/index.ts +22 -22
  75. package/lib/routes/cs/zzkx.ts +1 -1
  76. package/lib/routes/csdn/blog.ts +17 -13
  77. package/lib/routes/cybersecurityventures/namespace.ts +7 -0
  78. package/lib/routes/cybersecurityventures/news.ts +121 -0
  79. package/lib/routes/cybersecurityventures/types.ts +17 -0
  80. package/lib/routes/daily/discussed.ts +22 -21
  81. package/lib/routes/daily/index.ts +14 -11
  82. package/lib/routes/daily/namespace.ts +1 -1
  83. package/lib/routes/daily/source.ts +186 -0
  84. package/lib/routes/daily/upvoted.ts +17 -17
  85. package/lib/routes/daily/user.ts +6 -23
  86. package/lib/routes/daily/utils.ts +27 -32
  87. package/lib/routes/dataguidance/index.ts +19 -30
  88. package/lib/routes/dcfever/news.ts +1 -1
  89. package/lib/routes/dcfever/reviews.ts +1 -1
  90. package/lib/routes/dcfever/trading-search.ts +1 -1
  91. package/lib/routes/dcfever/trading.ts +1 -1
  92. package/lib/routes/deeplearning/namespace.ts +3 -1
  93. package/lib/routes/deeplearning/templates/description.art +21 -0
  94. package/lib/routes/deeplearning/the-batch.ts +296 -0
  95. package/lib/routes/deepmind/blog.ts +1 -1
  96. package/lib/routes/digitalcameraworld/news.ts +1 -1
  97. package/lib/routes/discord/discord-api.ts +44 -2
  98. package/lib/routes/discord/search.ts +106 -0
  99. package/lib/routes/dn/news.ts +1 -1
  100. package/lib/routes/dockerhub/repositories.ts +42 -0
  101. package/lib/routes/dongqiudi/daily.ts +1 -1
  102. package/lib/routes/dw/namespace.ts +6 -0
  103. package/lib/routes/dw/news.ts +89 -0
  104. package/lib/routes/dw/rss.ts +62 -0
  105. package/lib/routes/dw/templates/description.art +23 -0
  106. package/lib/routes/dw/templates/liveblog.art +13 -0
  107. package/lib/routes/dw/templates/video.art +14 -0
  108. package/lib/routes/dw/utils.ts +172 -0
  109. package/lib/routes/ecnu/jwc.ts +5 -1
  110. package/lib/routes/espn/news.ts +1 -1
  111. package/lib/routes/fashionnetwork/namespace.ts +1 -1
  112. package/lib/routes/flyert/forum.ts +99 -0
  113. package/lib/routes/flyert/namespace.ts +1 -0
  114. package/lib/routes/flyert/templates/description.art +21 -0
  115. package/lib/routes/flyert/util.ts +188 -0
  116. package/lib/routes/follow/profile.ts +2 -2
  117. package/lib/routes/foresightnews/article.ts +1 -1
  118. package/lib/routes/foresightnews/column.ts +1 -1
  119. package/lib/routes/foresightnews/index.ts +3 -1
  120. package/lib/routes/foresightnews/news.ts +1 -1
  121. package/lib/routes/freecomputerbooks/index.ts +0 -10
  122. package/lib/routes/ftm/index.ts +1 -1
  123. package/lib/routes/furaffinity/art.ts +85 -0
  124. package/lib/routes/furaffinity/browse.ts +58 -0
  125. package/lib/routes/furaffinity/commissions.ts +55 -0
  126. package/lib/routes/furaffinity/home.ts +80 -0
  127. package/lib/routes/furaffinity/journal-comments.ts +64 -0
  128. package/lib/routes/furaffinity/journals.ts +56 -0
  129. package/lib/routes/furaffinity/namespace.ts +7 -0
  130. package/lib/routes/furaffinity/search.ts +72 -0
  131. package/lib/routes/furaffinity/shouts.ts +56 -0
  132. package/lib/routes/furaffinity/status.ts +58 -0
  133. package/lib/routes/furaffinity/submission-comments.ts +64 -0
  134. package/lib/{routes-deprecated/furaffinity/user.js → routes/furaffinity/user.ts} +53 -41
  135. package/lib/routes/furaffinity/watchers.ts +62 -0
  136. package/lib/routes/furaffinity/watching.ts +62 -0
  137. package/lib/routes/google/developers.ts +71 -0
  138. package/lib/routes/google/news.ts +26 -6
  139. package/lib/routes/gov/cbirc/index.ts +35 -35
  140. package/lib/routes/hamel/index.ts +81 -0
  141. package/lib/routes/hamel/namespace.ts +7 -0
  142. package/lib/routes/hellogithub/volume.ts +3 -0
  143. package/lib/routes/hket/index.ts +13 -1
  144. package/lib/routes/hostmonit/cloudflareyesv6.ts +1 -1
  145. package/lib/routes/hrbeu/sec/list.ts +80 -0
  146. package/lib/routes/hrbust/jwzx.ts +6 -0
  147. package/lib/routes/hunau/gfxy/index.ts +1 -1
  148. package/lib/routes/hunau/ied.ts +1 -1
  149. package/lib/routes/hunau/jwc.ts +1 -1
  150. package/lib/routes/hunau/xky/index.ts +1 -1
  151. package/lib/routes/hust/gs.ts +4 -3
  152. package/lib/routes/idolmaster/namespace.ts +7 -0
  153. package/lib/routes/idolmaster/news.ts +112 -0
  154. package/lib/routes/ieee/author.ts +95 -0
  155. package/lib/routes/ikea/cn/low-price.ts +2 -1
  156. package/lib/routes/imdb/chart.ts +1 -1
  157. package/lib/routes/inspirehep/author.ts +9 -1
  158. package/lib/routes/isct/namespace.ts +11 -0
  159. package/lib/routes/isct/news.ts +66 -0
  160. package/lib/routes/javtrailers/casts.ts +41 -0
  161. package/lib/routes/javtrailers/categories.ts +40 -0
  162. package/lib/routes/javtrailers/namespace.ts +7 -0
  163. package/lib/routes/javtrailers/studios.ts +39 -0
  164. package/lib/routes/javtrailers/templates/description.art +31 -0
  165. package/lib/routes/javtrailers/types.ts +59 -0
  166. package/lib/routes/javtrailers/utils.ts +48 -0
  167. package/lib/routes/jiemian/list.ts +1 -1
  168. package/lib/routes/jiuyangongshe/community.ts +1 -1
  169. package/lib/routes/jlu/phy/index.ts +55 -0
  170. package/lib/routes/joins/chinese.ts +13 -13
  171. package/lib/routes/kcna/news.ts +7 -5
  172. package/lib/routes/keep/user.ts +1 -1
  173. package/lib/routes/langchain/index.ts +74 -0
  174. package/lib/routes/langchain/namespace.ts +7 -0
  175. package/lib/routes/last-origin/namespace.ts +7 -0
  176. package/lib/routes/last-origin/news.ts +65 -0
  177. package/lib/routes/linkresearcher/index.ts +108 -46
  178. package/lib/routes/linkresearcher/namespace.ts +8 -2
  179. package/lib/routes/linkresearcher/templates/bilingual.art +7 -0
  180. package/lib/routes/linkresearcher/types.ts +103 -0
  181. package/lib/routes/liulinblog/itnews.ts +1 -1
  182. package/lib/routes/lofter/collection.ts +1 -1
  183. package/lib/routes/lofter/tag.ts +1 -1
  184. package/lib/routes/logrocket/index.ts +71 -0
  185. package/lib/routes/logrocket/namespace.ts +7 -0
  186. package/lib/routes/m-78/namespace.ts +7 -0
  187. package/lib/routes/m-78/news.ts +115 -0
  188. package/lib/routes/m-78/types.ts +13 -0
  189. package/lib/routes/mastodon/account-id.ts +1 -1
  190. package/lib/routes/mastodon/acct.ts +1 -1
  191. package/lib/routes/mastodon/timeline-local.ts +2 -2
  192. package/lib/routes/mastodon/timeline-remote.ts +2 -2
  193. package/lib/routes/mastodon/utils.ts +1 -1
  194. package/lib/routes/metacritic/index.ts +1 -1
  195. package/lib/routes/mi/utils.ts +1 -1
  196. package/lib/routes/mihoyo/bbs/official.ts +2 -1
  197. package/lib/routes/misskey/utils.ts +19 -1
  198. package/lib/routes/mittrchina/index.ts +2 -2
  199. package/lib/routes/natgeo/natgeo.ts +25 -24
  200. package/lib/routes/nbd/daily.ts +1 -1
  201. package/lib/routes/nielsberglund/index.ts +78 -0
  202. package/lib/routes/nielsberglund/namespace.ts +7 -0
  203. package/lib/routes/nytimes/rss.ts +57 -0
  204. package/lib/routes/openrice/chart.ts +68 -0
  205. package/lib/routes/openrice/templates/chart.art +9 -0
  206. package/lib/routes/openrice/voting.ts +84 -0
  207. package/lib/routes/oschina/news.ts +26 -7
  208. package/lib/routes/patreon/feed.ts +126 -0
  209. package/lib/routes/patreon/namespace.ts +7 -0
  210. package/lib/routes/patreon/templates/description.art +39 -0
  211. package/lib/routes/patreon/types.ts +387 -0
  212. package/lib/routes/pixiv/api/get-illust-detail.ts +22 -0
  213. package/lib/routes/pixiv/novel-api/content/nsfw.ts +73 -0
  214. package/lib/routes/pixiv/novel-api/content/sfw.ts +63 -0
  215. package/lib/routes/pixiv/novel-api/content/types.ts +254 -0
  216. package/lib/routes/pixiv/novel-api/content/utils.ts +133 -0
  217. package/lib/routes/pixiv/novel-api/series/nsfw.ts +84 -0
  218. package/lib/routes/pixiv/novel-api/series/sfw.ts +70 -0
  219. package/lib/routes/pixiv/novel-api/series/types.ts +94 -0
  220. package/lib/routes/pixiv/novel-api/user-novels/nsfw.ts +82 -0
  221. package/lib/routes/pixiv/novel-api/user-novels/sfw.ts +74 -0
  222. package/lib/routes/pixiv/novel-api/user-novels/types.ts +133 -0
  223. package/lib/routes/pixiv/novel-series.ts +52 -0
  224. package/lib/routes/pixiv/novels.ts +69 -44
  225. package/lib/routes/pixiv/utils.ts +3 -0
  226. package/lib/routes/plurk/anonymous.ts +1 -1
  227. package/lib/routes/plurk/hotlinks.ts +1 -1
  228. package/lib/routes/plurk/news.ts +1 -1
  229. package/lib/routes/plurk/search.ts +1 -1
  230. package/lib/routes/qstheory/index.ts +121 -0
  231. package/lib/routes/qstheory/magazine.ts +64 -0
  232. package/lib/routes/qstheory/namespace.ts +7 -0
  233. package/lib/routes/qstheory/utils.ts +25 -0
  234. package/lib/routes/ruc/ai.ts +1 -1
  235. package/lib/routes/scmp/coronavirus.ts +1 -1
  236. package/lib/routes/scu/jwc/tzgg.ts +75 -0
  237. package/lib/routes/scu/namespace.ts +7 -0
  238. package/lib/routes/scu/scupi/_utils.ts +62 -0
  239. package/lib/routes/scu/scupi/notice.ts +41 -0
  240. package/lib/routes/solidot/namespace.ts +1 -1
  241. package/lib/routes/stbu/jsjxy.ts +4 -1
  242. package/lib/routes/steam/search.ts +7 -0
  243. package/lib/routes/sycl/feeds.ts +1 -1
  244. package/lib/routes/syosetu/dev.ts +67 -0
  245. package/lib/routes/syosetu/index.ts +85 -0
  246. package/lib/routes/syosetu/namespace.ts +2 -2
  247. package/lib/routes/syosetu/ranking-isekai.ts +93 -0
  248. package/lib/routes/syosetu/ranking-r18.ts +192 -0
  249. package/lib/routes/syosetu/ranking.ts +285 -0
  250. package/lib/routes/syosetu/search.ts +161 -0
  251. package/lib/routes/syosetu/templates/description.art +73 -0
  252. package/lib/routes/syosetu/types/ranking-r18.ts +60 -0
  253. package/lib/routes/syosetu/types/ranking.ts +67 -0
  254. package/lib/routes/syosetu/types/search.ts +138 -0
  255. package/lib/routes/syosetu/utils.ts +50 -0
  256. package/lib/routes/telegram/channel.ts +31 -1
  257. package/lib/routes/telegram/scripts/get-telegram-session.mjs +16 -6
  258. package/lib/routes/telegram/stickerpack.ts +1 -1
  259. package/lib/routes/telegram/tglib/channel.ts +12 -9
  260. package/lib/routes/telegram/tglib/client.ts +13 -9
  261. package/lib/routes/test/index.ts +4 -0
  262. package/lib/routes/theblockbeats/index.ts +1 -1
  263. package/lib/routes/thegradient/index.ts +80 -0
  264. package/lib/routes/thegradient/namespace.ts +7 -0
  265. package/lib/routes/theinitium/app.ts +4 -0
  266. package/lib/routes/thepaper/channel.ts +1 -1
  267. package/lib/routes/thepaper/factpaper.ts +1 -1
  268. package/lib/routes/thepaper/featured.ts +1 -1
  269. package/lib/routes/thepaper/list.ts +1 -1
  270. package/lib/routes/thepaper/user.ts +174 -0
  271. package/lib/routes/tongji/sem/_utils.ts +65 -0
  272. package/lib/routes/tongji/sem/notice.ts +58 -0
  273. package/lib/routes/toutiao/a-bogus.ts +540 -0
  274. package/lib/routes/toutiao/namespace.ts +7 -0
  275. package/lib/routes/toutiao/templates/video.art +7 -0
  276. package/lib/routes/toutiao/types.ts +443 -0
  277. package/lib/routes/toutiao/user.ts +127 -0
  278. package/lib/routes/twitter/api/mobile-api/api.ts +8 -0
  279. package/lib/routes/twitter/api/web-api/utils.ts +21 -9
  280. package/lib/routes/twitter/namespace.ts +1 -0
  281. package/lib/routes/twitter/utils.ts +7 -1
  282. package/lib/routes/vertikal/latest.ts +73 -0
  283. package/lib/routes/vertikal/namespace.ts +7 -0
  284. package/lib/routes/vice/topic.ts +1 -1
  285. package/lib/routes/vocus/publication.ts +1 -1
  286. package/lib/routes/vocus/user.ts +1 -1
  287. package/lib/routes/wallstreetcn/calendar.ts +90 -0
  288. package/lib/routes/wallstreetcn/hot.ts +2 -2
  289. package/lib/routes/wallstreetcn/live.ts +1 -1
  290. package/lib/routes/wallstreetcn/news.ts +5 -3
  291. package/lib/routes/weibo/timeline.ts +3 -2
  292. package/lib/routes/wellcee/rent.ts +1 -1
  293. package/lib/routes/wufazhuce/namespace.ts +7 -0
  294. package/lib/routes/wufazhuce/one.ts +90 -0
  295. package/lib/routes/xiaoheihe/discount.ts +72 -28
  296. package/lib/routes/xiaohongshu/user.ts +40 -3
  297. package/lib/routes/xiaohongshu/util.ts +112 -105
  298. package/lib/routes/xsijishe/rank.ts +33 -7
  299. package/lib/routes/xueqiu/cookies.ts +13 -18
  300. package/lib/routes/yahoo/news/listid.ts +4 -1
  301. package/lib/routes/yahoo/news/provider-helper.ts +4 -1
  302. package/lib/routes/yahoo/news/provider.ts +4 -1
  303. package/lib/routes/yande/post.ts +13 -3
  304. package/lib/routes/youtube/user.ts +37 -25
  305. package/lib/routes/zhonglun/index.ts +5 -6
  306. package/lib/routes/zjut/cs/index.ts +1 -1
  307. package/lib/utils/got.ts +2 -1
  308. package/lib/utils/helpers.test.ts +13 -1
  309. package/lib/utils/helpers.ts +10 -0
  310. package/lib/utils/ofetch.ts +3 -0
  311. package/lib/utils/request-rewriter/fetch.test.ts +94 -0
  312. package/lib/utils/request-rewriter/fetch.ts +14 -1
  313. package/lib/views/error.tsx +1 -1
  314. package/package.json +40 -37
  315. package/lib/routes/78dm/templates/image.art +0 -1
  316. package/lib/routes/deeplearning/thebatch.ts +0 -74
  317. package/lib/routes/syosetu/chapter.ts +0 -87
  318. package/lib/routes/xiaohongshu/notes.ts +0 -39
  319. package/lib/routes-deprecated/furaffinity/browse.js +0 -44
  320. package/lib/routes-deprecated/furaffinity/commissions.js +0 -39
  321. package/lib/routes-deprecated/furaffinity/favorites.js +0 -56
  322. package/lib/routes-deprecated/furaffinity/gallery.js +0 -56
  323. package/lib/routes-deprecated/furaffinity/home.js +0 -72
  324. package/lib/routes-deprecated/furaffinity/journal-comments.js +0 -50
  325. package/lib/routes-deprecated/furaffinity/journals.js +0 -49
  326. package/lib/routes-deprecated/furaffinity/scraps.js +0 -56
  327. package/lib/routes-deprecated/furaffinity/search.js +0 -56
  328. package/lib/routes-deprecated/furaffinity/shouts.js +0 -40
  329. package/lib/routes-deprecated/furaffinity/status.js +0 -38
  330. package/lib/routes-deprecated/furaffinity/submission-comments.js +0 -50
  331. package/lib/routes-deprecated/furaffinity/watchers.js +0 -47
  332. package/lib/routes-deprecated/furaffinity/watching.js +0 -47
  333. package/lib/routes-deprecated/ieee/author.js +0 -30
  334. package/lib/routes-deprecated/qstheory/index.js +0 -122
@@ -2,144 +2,215 @@ import { Route, ViewType } from '@/types';
2
2
  import got from '@/utils/got';
3
3
  import utils from './utils';
4
4
 
5
+ // https://www.bilibili.com/v/popular/rank/all
6
+
7
+ // 0 all https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=all&web_location=333.934&w_rid=d4e0c1b83157e3d36836eb3c4258ef61&wts=1731320484
8
+ // 1 bangumi https://api.bilibili.com/pgc/web/rank/list?day=3&season_type=1&web_location=333.934&w_rid=2d46eff2d363c4960bc875e63e24df6c&wts=1731320507
9
+ // 2 guochan https://api.bilibili.com/pgc/season/rank/web/list?day=3&season_type=4&web_location=333.934&w_rid=b26195dc9ee2f925bc196da68df341a5&wts=1731320523
10
+ // 3 guochuang https://api.bilibili.com/x/web-interface/ranking/v2?rid=168&type=all&web_location=333.934&w_rid=f99e5982b011eb24643a2daffb7baf00&wts=1731320537
11
+ // 4 documentary https://api.bilibili.com/pgc/season/rank/web/list?day=3&season_type=3&web_location=333.934&w_rid=2067f7277cf49cbea4c5e5630eeb929a&wts=1731320556
12
+ // 5 douga https://api.bilibili.com/x/web-interface/ranking/v2?rid=1&type=all&web_location=333.934&w_rid=14bf53ce651e8d575d5982b24e1cebdf&wts=1731320579
13
+ // 6 music https://api.bilibili.com/x/web-interface/ranking/v2?rid=3&type=all&web_location=333.934&w_rid=70f4c870f860b9334ebe6e9fe835d3fe&wts=1731320595
14
+ // 7 dance https://api.bilibili.com/x/web-interface/ranking/v2?rid=129&type=all&web_location=333.934&w_rid=691f713f7fc6d3cc08174affcc59f97c&wts=1731321260
15
+ // 8 game https://api.bilibili.com/x/web-interface/ranking/v2?rid=4&type=all&web_location=333.934&w_rid=cac9f26f49da223cb8ab6f189250ec23&wts=1731320726
16
+ // 9 knowledge https://api.bilibili.com/x/web-interface/ranking/v2?rid=36&type=all&web_location=333.934&w_rid=79c274d74e90d93ac7adfd2df968288e&wts=1731320750
17
+ // 10 tech https://api.bilibili.com/x/web-interface/ranking/v2?rid=188&type=all&web_location=333.934&w_rid=115d9e69c48bf958622c4cc0ee861b57&wts=1731320766
18
+ // 11 sports https://api.bilibili.com/x/web-interface/ranking/v2?rid=234&type=all&web_location=333.934&w_rid=c618d12f36e2379bda0c9a2754cd71e0&wts=1731320783
19
+ // 12 car https://api.bilibili.com/x/web-interface/ranking/v2?rid=223&type=all&web_location=333.934&w_rid=753bc1395718051aa53aedaa3cd04d76&wts=1731320797
20
+ // 13 life https://api.bilibili.com/x/web-interface/ranking/v2?rid=160&type=all&web_location=333.934&w_rid=3e8895d4749e905173886dd387f657e9&wts=1731320823
21
+ // 14 food https://api.bilibili.com/x/web-interface/ranking/v2?rid=211&type=all&web_location=333.934&w_rid=9ec93cab672a98ea972dfb9cb7ed6368&wts=1731320838
22
+ // 15 animal https://api.bilibili.com/x/web-interface/ranking/v2?rid=217&type=all&web_location=333.934&w_rid=794e69434ec4a818f4d589e5306e9a21&wts=1731320852
23
+ // 16 kichiku https://api.bilibili.com/x/web-interface/ranking/v2?rid=119&type=all&web_location=333.934&w_rid=c5e35f3f247bc9294557ab90e0be166a&wts=1731320865
24
+ // 17 fashion https://api.bilibili.com/x/web-interface/ranking/v2?rid=155&type=all&web_location=333.934&w_rid=f3711c888057a8fef1f47da9cf4bcd86&wts=1731320878
25
+ // 18 ent https://api.bilibili.com/x/web-interface/ranking/v2?rid=5&type=all&web_location=333.934&w_rid=5ca1b2da22de1c9e818ac619d309fed2&wts=1731320889
26
+ // 19 cinephile https://api.bilibili.com/x/web-interface/ranking/v2?rid=181&type=all&web_location=333.934&w_rid=8f5cae08b232025f93b74feaefdc95d9&wts=1731320903
27
+ // 20 movie https://api.bilibili.com/pgc/season/rank/web/list?day=3&season_type=2&web_location=333.934&w_rid=ccd42543ab1c4330e9f81fb52b098a9c&wts=1731320916
28
+ // 21 tv https://api.bilibili.com/pgc/season/rank/web/list?day=3&season_type=5&web_location=333.934&w_rid=10fae974e8d30dd6bba11527fe17e551&wts=1731320934
29
+ // 22 variety https://api.bilibili.com/pgc/season/rank/web/list?day=3&season_type=7&web_location=333.934&w_rid=c3105fd0dac70dcdf4f08ca6b5cbdb8f&wts=1731320948
30
+ // 23 origin https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=origin&web_location=333.934&w_rid=53100b7aeeca012399f4f8f3746bcbdb&wts=1731320960
31
+ // 24 rookie https://api.bilibili.com/x/web-interface/ranking/v2?rid=0&type=rookie&web_location=333.934&w_rid=b8adda7447e2f115b2ed36495e436934&wts=1731320971
32
+
33
+ const ridNumberList = ['0', '1', '4', '168', '3', '1', '3', '129', '4', '36', '188', '234', '223', '160', '211', '217', '119', '155', '5', '181', '2', '5', '7', '0', '0'];
34
+ const ridChineseList = [
35
+ '全站',
36
+ '番剧',
37
+ '国产动画',
38
+ '国创相关',
39
+ '纪录片',
40
+ '动画',
41
+ '音乐',
42
+ '舞蹈',
43
+ '游戏',
44
+ '知识',
45
+ '科技',
46
+ '运动',
47
+ '汽车',
48
+ '生活',
49
+ '美食',
50
+ '动物圈',
51
+ '鬼畜',
52
+ '时尚',
53
+ '娱乐',
54
+ '影视',
55
+ '电影',
56
+ '电视剧',
57
+ '综艺',
58
+ '原创',
59
+ '新人',
60
+ ];
61
+ const ridEnglishList = [
62
+ 'all',
63
+ 'bangumi',
64
+ 'guochan',
65
+ 'guochuang',
66
+ 'documentary',
67
+ 'douga',
68
+ 'music',
69
+ 'dance',
70
+ 'game',
71
+ 'knowledge',
72
+ 'tech',
73
+ 'sports',
74
+ 'car',
75
+ 'life',
76
+ 'food',
77
+ 'animal',
78
+ 'kichiku',
79
+ 'fashion',
80
+ 'ent',
81
+ 'cinephile',
82
+ 'movie',
83
+ 'tv',
84
+ 'variety',
85
+ 'origin',
86
+ 'rookie',
87
+ ];
88
+ const ridTypeList = [
89
+ 'x/rid',
90
+ 'pgc/web',
91
+ 'pgc/season',
92
+ 'x/rid',
93
+ 'pgc/season',
94
+ 'x/rid',
95
+ 'x/rid',
96
+ 'x/rid',
97
+ 'x/rid',
98
+ 'x/rid',
99
+ 'x/rid',
100
+ 'x/rid',
101
+ 'x/rid',
102
+ 'x/rid',
103
+ 'x/rid',
104
+ 'x/rid',
105
+ 'x/rid',
106
+ 'x/rid',
107
+ 'x/rid',
108
+ 'x/rid',
109
+ 'pgc/season',
110
+ 'pgc/season',
111
+ 'pgc/season',
112
+ 'x/type',
113
+ 'x/type',
114
+ ];
115
+
5
116
  export const route: Route = {
6
- path: '/ranking/:rid?/:day?/:arc_type?/:embed?',
117
+ path: '/ranking/:rid_index?/:embed?/:redirect1?/:redirect2?',
7
118
  name: '排行榜',
8
- maintainers: ['DIYgod'],
119
+ maintainers: ['DIYgod', 'hyoban'],
9
120
  categories: ['social-media', 'popular'],
10
121
  view: ViewType.Videos,
11
- example: '/bilibili/ranking/0/3/1',
122
+ example: '/bilibili/ranking/0',
12
123
  parameters: {
13
- rid: {
14
- description: '排行榜分区 id',
124
+ rid_index: {
125
+ description: '排行榜分区 id 序号',
15
126
  default: '0',
16
- options: [
17
- {
18
- label: '全站',
19
- value: '0',
20
- },
21
- {
22
- label: '动画',
23
- value: '1',
24
- },
25
- {
26
- label: '国创相关',
27
- value: '168',
28
- },
29
- {
30
- label: '音乐',
31
- value: '3',
32
- },
33
- {
34
- label: '舞蹈',
35
- value: '129',
36
- },
37
- {
38
- label: '游戏',
39
- value: '4',
40
- },
41
- {
42
- label: '科技',
43
- value: '36',
44
- },
45
- {
46
- label: '数码',
47
- value: '188',
48
- },
49
- {
50
- label: '生活',
51
- value: '160',
52
- },
53
- {
54
- label: '鬼畜',
55
- value: '119',
56
- },
57
- {
58
- label: '时尚',
59
- value: '155',
60
- },
61
- {
62
- label: '娱乐',
63
- value: '5',
64
- },
65
- {
66
- label: '影视',
67
- value: '181',
68
- },
69
- ],
70
- },
71
- day: {
72
- description: '时间跨度',
73
- default: '3',
74
- options: [
75
- {
76
- value: '1',
77
- label: '1日',
78
- },
79
- {
80
- value: '3',
81
- label: '3日',
82
- },
83
- {
84
- value: '7',
85
- label: '7日',
86
- },
87
- {
88
- value: '30',
89
- label: '30日',
90
- },
91
- ],
92
- },
93
- arc_type: {
94
- description: '投稿时间',
95
- default: '1',
96
- options: [
97
- {
98
- value: '0',
99
- label: '全部投稿',
100
- },
101
- {
102
- value: '1',
103
- label: '近期投稿',
104
- },
105
- ],
127
+ options: Array.from({ length: ridNumberList.length }, (_, i) => ({
128
+ value: String(i),
129
+ label: ridChineseList[i],
130
+ })).filter((_, i) => !ridTypeList[i].startsWith('pgc/')),
106
131
  },
107
132
  embed: '默认为开启内嵌视频, 任意值为关闭',
133
+ redirect1: '留空,用于兼容之前的路由',
134
+ redirect2: '留空,用于兼容之前的路由',
108
135
  },
109
136
  handler,
110
137
  };
111
138
 
139
+ function getRidIndexByRid(rid: string): number {
140
+ const index = ridNumberList.indexOf(rid);
141
+ if (index === -1) {
142
+ throw new Error('Invalid rid');
143
+ }
144
+ return index;
145
+ }
146
+
147
+ function getAPI(ridIndex: number) {
148
+ if (ridIndex < 0 || ridIndex >= ridNumberList.length) {
149
+ throw new Error('Invalid rid index');
150
+ }
151
+ const rid = ridNumberList[ridIndex];
152
+ const ridType = ridTypeList[ridIndex];
153
+ const ridChinese = ridChineseList[ridIndex];
154
+ const ridEnglish = ridEnglishList[ridIndex];
155
+
156
+ let apiURL = '';
157
+
158
+ switch (ridType) {
159
+ case 'x/rid':
160
+ apiURL = `https://api.bilibili.com/x/web-interface/ranking?rid=${rid}&type=all`;
161
+ break;
162
+ case 'pgc/web':
163
+ apiURL = `https://api.bilibili.com/pgc/web/rank/list?day=3&season_type=${rid}`;
164
+ break;
165
+ case 'pgc/season':
166
+ apiURL = `https://api.bilibili.com/pgc/season/rank/web/list?day=3&season_type=${rid}`;
167
+ break;
168
+ case 'x/type':
169
+ apiURL = `https://api.bilibili.com/x/web-interface/ranking?rid=0&type=${ridEnglish}`;
170
+ break;
171
+ default:
172
+ throw new Error('Invalid rid type');
173
+ }
174
+
175
+ return {
176
+ apiURL,
177
+ referer: `https://www.bilibili.com/v/popular/rank/${ridEnglish}`,
178
+ ridChinese,
179
+ ridType,
180
+ link: `https://www.bilibili.com/v/popular/rank/${ridEnglish}`,
181
+ };
182
+ }
183
+
112
184
  async function handler(ctx) {
113
- const rid = ctx.req.param('rid') || '0';
114
- const day = ctx.req.param('day') || '3';
115
- const arc_type = ctx.req.param('arc_type') || '1';
185
+ const args = ctx.req.param();
186
+ if (args.redirect1 || args.redirect2) {
187
+ // redirect old routes like /bilibili/ranking/0/3/1 or /bilibili/ranking/0/3/1/xxx
188
+ const embedArg = args.redirect2 ? '/' + args.redirect2 : '';
189
+ ctx.set('redirect', `/bilibili/ranking/${getRidIndexByRid(args.rid_index)}${embedArg}`);
190
+ return;
191
+ }
192
+
193
+ const ridIndex = ctx.req.param('rid_index') || '0';
116
194
  const embed = !ctx.req.param('embed');
117
- const arc_type1 = arc_type === '0' ? '全部投稿' : '近期投稿';
118
- const rid_1 = ['0', '1', '168', '3', '129', '4', '36', '188', '160', '119', '155', '5', '181'];
119
- const rid_2 = ['全站', '动画', '国创相关', '音乐', '舞蹈', '游戏', '科技', '数码', '生活', '鬼畜', '时尚', '娱乐', '影视'];
120
- const rid_i = rid_1.indexOf(rid + '');
121
- const rid_type = rid_2[rid_i];
195
+
196
+ const { apiURL, referer, ridChinese, link, ridType } = getAPI(Number(ridIndex));
197
+ if (ridType.startsWith('pgc/')) {
198
+ throw new Error('This type of ranking is not supported yet');
199
+ }
200
+
122
201
  const response = await got({
123
202
  method: 'get',
124
- url: `https://api.bilibili.com/x/web-interface/ranking?jsonp=jsonp&rid=${rid}&day=${day}&type=1&arc_type=${arc_type}&callback=__jp0`,
203
+ url: apiURL,
125
204
  headers: {
126
- Referer: `https://www.bilibili.com/ranking/all/${rid}/${arc_type}/${day}`,
205
+ Referer: referer,
127
206
  },
128
207
  });
129
208
 
130
- const data = JSON.parse(response.data.match(/^__jp0\((.*)\)$/)[1]).data || {};
131
- let list = data.list || [];
132
- for (let i = 0; i < list.length; i++) {
133
- if (list[i].others && list[i].others.length) {
134
- for (const item of list[i].others) {
135
- item.author = list[i].author;
136
- }
137
- list = [...list, ...list[i].others];
138
- }
139
- }
209
+ const data = response.data.data || response.data.result;
210
+ const list = data.list || [];
140
211
  return {
141
- title: `bilibili ${day}日排行榜-${rid_type}-${arc_type1}`,
142
- link: `https://www.bilibili.com/ranking/all/${rid}/0/${day}`,
212
+ title: `bilibili 排行榜-${ridChinese}`,
213
+ link,
143
214
  item: list.map((item) => ({
144
215
  title: item.title,
145
216
  description: utils.renderUGCDescription(embed, item.pic, item.description || item.title, item.aid, undefined, item.bvid),
@@ -33,11 +33,13 @@ async function handler(ctx) {
33
33
  }
34
34
 
35
35
  const link = `https://www.bilibili.com/video/${bvid || `av${aid}`}`;
36
+ const cookie = await cache.getCookie();
36
37
  const response = await got({
37
38
  method: 'get',
38
39
  url: `https://api.bilibili.com/x/v2/reply?type=1&oid=${aid}&sort=0`,
39
40
  headers: {
40
41
  Referer: link,
42
+ Cookie: cookie,
41
43
  },
42
44
  });
43
45
 
@@ -7,6 +7,8 @@
7
7
  {{ /if }}
8
8
  <br>
9
9
  {{ /if }}
10
+ {{ if img}}
10
11
  <img src="{{ img }}">
11
12
  <br>
13
+ {{ /if }}
12
14
  {{@ description }}
@@ -10,7 +10,11 @@ export const route: Route = {
10
10
  },
11
11
  radar: [
12
12
  {
13
- source: ['www.bing.com/', 'cn.bing.com/'],
13
+ source: ['www.bing.com/'],
14
+ target: '',
15
+ },
16
+ {
17
+ source: ['cn.bing.com/'],
14
18
  target: '',
15
19
  },
16
20
  ],
@@ -63,7 +63,6 @@ async function handler(ctx) {
63
63
  text: post.record.text.replaceAll('\n', '<br>'),
64
64
  embed: post.embed,
65
65
  // embed.$type "app.bsky.embed.record#view" and "app.bsky.embed.recordWithMedia#view" are not handled
66
- // "app.bsky.embed.video#view" is rendered as image
67
66
  }),
68
67
  author: post.author.displayName,
69
68
  pubDate: parseDate(post.record.createdAt),
@@ -8,7 +8,14 @@
8
8
  <img src="{{ i.fullsize }}" alt="{{ i.alt }}"><br>
9
9
  {{ /each }}
10
10
  {{ else if embed.$type === 'app.bsky.embed.video#view' }}
11
- <img src="{{ embed.thumbnail }}"><br>
11
+ <video
12
+ controls
13
+ poster="{{ embed.thumbnail }}"
14
+ style="max-width: 100%; height: auto;"
15
+ preload="metadata">
16
+ <source src="{{ embed.playlist }}" type="application/x-mpegURL">
17
+ Your browser does not support HTML5 video playback.
18
+ </video><br>
12
19
  {{ else if embed.$type === 'app.bsky.embed.external#view' }}
13
20
  <a href="{{ embed.external.uri }}"><b>{{ embed.external.title }}</b><br>
14
21
  {{ embed.external.description }}
@@ -5,7 +5,7 @@ import { parseDate } from '@/utils/parse-date';
5
5
  import timezone from '@/utils/timezone';
6
6
  import cache from '@/utils/cache';
7
7
  import { art } from '@/utils/render';
8
- import path from 'path';
8
+ import path from 'node:path';
9
9
  import { getCurrentPath } from '@/utils/helpers';
10
10
  const __dirname = getCurrentPath(import.meta.url);
11
11
 
@@ -3,5 +3,7 @@ import type { Namespace } from '@/types';
3
3
  export const namespace: Namespace = {
4
4
  name: 'C114 通信网',
5
5
  url: 'c114.com.cn',
6
+ categories: ['new-media'],
7
+ description: '',
6
8
  lang: 'zh-CN',
7
9
  };
@@ -1,4 +1,5 @@
1
1
  import { Route } from '@/types';
2
+
2
3
  import cache from '@/utils/cache';
3
4
  import got from '@/utils/got';
4
5
  import { load } from 'cheerio';
@@ -6,78 +7,106 @@ import timezone from '@/utils/timezone';
6
7
  import { parseDate } from '@/utils/parse-date';
7
8
  import iconv from 'iconv-lite';
8
9
 
9
- export const route: Route = {
10
- path: '/roll',
11
- categories: ['new-media'],
12
- example: '/c114/roll',
13
- parameters: {},
14
- features: {
15
- requireConfig: false,
16
- requirePuppeteer: false,
17
- antiCrawler: false,
18
- supportBT: false,
19
- supportPodcast: false,
20
- supportScihub: false,
21
- },
22
- radar: [
23
- {
24
- source: ['c114.com.cn/news/roll.asp', 'c114.com.cn/'],
25
- },
26
- ],
27
- name: '滚动新闻',
28
- maintainers: ['nczitzk'],
29
- handler,
30
- url: 'c114.com.cn/news/roll.asp',
31
- };
10
+ export const handler = async (ctx) => {
11
+ const { original = 'false' } = ctx.req.param();
12
+ const limit = ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit'), 10) : 15;
32
13
 
33
- async function handler(ctx) {
34
14
  const rootUrl = 'https://www.c114.com.cn';
35
- const currentUrl = `${rootUrl}/news/roll.asp`;
15
+ const currentUrl = new URL(`news/roll.asp${original === 'true' ? `?o=true` : ''}`, rootUrl).href;
36
16
 
37
- const response = await got({
38
- method: 'get',
39
- url: currentUrl,
17
+ const { data: response } = await got(currentUrl, {
40
18
  responseType: 'buffer',
41
19
  });
42
20
 
43
- const $ = load(iconv.decode(response.data, 'gbk'));
21
+ const $ = load(iconv.decode(response, 'gbk'));
22
+
23
+ const language = $('html').prop('lang');
44
24
 
45
- let items = $('.new_list_c h6 a')
46
- .slice(0, ctx.req.query('limit') ? Number.parseInt(ctx.req.query('limit')) : 50)
25
+ let items = $('div.new_list_c')
26
+ .slice(0, limit)
47
27
  .toArray()
48
28
  .map((item) => {
49
29
  item = $(item);
50
30
 
51
31
  return {
52
- title: item.text(),
53
- link: item.attr('href'),
32
+ title: item.find('h6 a').text(),
33
+ pubDate: timezone(parseDate(item.find('div.new_list_time').text(), ['HH:mm', 'M/D']), +8),
34
+ link: new URL(item.find('h6 a').prop('href'), rootUrl).href,
35
+ author: item.find('div.new_list_author').text().trim(),
36
+ language,
54
37
  };
55
38
  });
56
39
 
57
40
  items = await Promise.all(
58
41
  items.map((item) =>
59
42
  cache.tryGet(item.link, async () => {
60
- const detailResponse = await got({
61
- method: 'get',
62
- url: item.link,
43
+ const { data: detailResponse } = await got(item.link, {
63
44
  responseType: 'buffer',
64
45
  });
65
46
 
66
- const content = load(iconv.decode(detailResponse.data, 'gbk'));
47
+ const $$ = load(iconv.decode(detailResponse, 'gbk'));
67
48
 
68
- item.description = content('.text').html();
69
- item.author = content('.author').first().text().replace('C114通信网 &nbsp;', '');
70
- item.pubDate = timezone(parseDate(content('.r_time').text()), +8);
71
- item.category = content('meta[name="keywords"]').attr('content').split(',');
49
+ const title = $$('h1').text();
50
+ const description = $$('div.text').html();
51
+
52
+ item.title = title;
53
+ item.description = description;
54
+ item.pubDate = timezone(parseDate($$('div.r_time').text(), 'YYYY/M/D HH:mm'), +8);
55
+ item.author = $$('div.author').first().text().trim();
56
+ item.content = {
57
+ html: description,
58
+ text: $$('.text').text(),
59
+ };
60
+ item.language = language;
72
61
 
73
62
  return item;
74
63
  })
75
64
  )
76
65
  );
77
66
 
67
+ const image = new URL($('div.top2-1 a img').prop('src'), rootUrl).href;
68
+
78
69
  return {
79
70
  title: $('title').text(),
71
+ description: $('meta[name="description"]').prop('content'),
80
72
  link: currentUrl,
81
73
  item: items,
74
+ allowEmpty: true,
75
+ image,
76
+ author: $('p.top1-1-1 a').first().text(),
77
+ language,
82
78
  };
83
- }
79
+ };
80
+
81
+ export const route: Route = {
82
+ path: '/roll/:original?',
83
+ name: '滚动资讯',
84
+ url: 'c114.com.cn',
85
+ maintainers: ['nczitzk'],
86
+ handler,
87
+ example: '/c114/roll',
88
+ parameters: { original: '只看原创,可选 true 和 false,默认为 false' },
89
+ description: '',
90
+ categories: ['new-media'],
91
+
92
+ features: {
93
+ requireConfig: false,
94
+ requirePuppeteer: false,
95
+ antiCrawler: false,
96
+ supportRadar: true,
97
+ supportBT: false,
98
+ supportPodcast: false,
99
+ supportScihub: false,
100
+ },
101
+ radar: [
102
+ {
103
+ source: ['c114.com.cn/news/roll.asp'],
104
+ target: (_, url) => {
105
+ url = new URL(url);
106
+ const original = url.searchParams.get('o');
107
+
108
+ return `/roll${original ? `/${original}` : ''}`;
109
+ },
110
+ },
111
+ ],
112
+ };
@@ -0,0 +1,84 @@
1
+ import ofetch from '@/utils/ofetch';
2
+ import { Route } from '@/types';
3
+ import { parseDate } from '@/utils/parse-date';
4
+ import timezone from '@/utils/timezone';
5
+
6
+ const host = 'https://edu.cags.ac.cn';
7
+
8
+ const titles = {
9
+ tzgg: '通知公告',
10
+ ywjx: '要闻简讯',
11
+ zs_bss: '博士生招生',
12
+ zs_sss: '硕士生招生',
13
+ zs_dxsxly: '大学生夏令营',
14
+ };
15
+
16
+ export const route: Route = {
17
+ path: '/edu/:category',
18
+ categories: ['university'],
19
+ example: '/cags/edu/tzgg',
20
+ parameters: {
21
+ category: '通知频道,可选 tzgg/ywjx/zs_bss/zs_sss/zs_dxsxly',
22
+ },
23
+ features: {
24
+ antiCrawler: false,
25
+ requireConfig: false,
26
+ requirePuppeteer: false,
27
+ supportBT: false,
28
+ supportPodcast: false,
29
+ supportScihub: false,
30
+ },
31
+ name: '研究生院',
32
+ maintainers: ['Chikit-L'],
33
+ radar: [
34
+ {
35
+ source: ['edu.cags.ac.cn/'],
36
+ },
37
+ ],
38
+ handler,
39
+ description: `
40
+ | 通知公告 | 要闻简讯 | 博士生招生 | 硕士生招生 | 大学生夏令营 |
41
+ | -------- | -------- | ---------- | ---------- | ------------ |
42
+ | tzgg | ywjx | zs_bss | zs_sss | zs_dxsxly |
43
+ `,
44
+ };
45
+
46
+ async function handler(ctx) {
47
+ const category = ctx.req.param('category');
48
+ const title = titles[category];
49
+
50
+ if (!title) {
51
+ throw new Error(`Invalid category: ${category}`);
52
+ }
53
+
54
+ const API_URL = `${host}/api/cms/cmsNews/pageByCmsNavBarId/${category}/1/10/0`;
55
+ const response = await ofetch(API_URL);
56
+ const data = response.data;
57
+
58
+ const items = data.map((item) => {
59
+ const id = item.id;
60
+ const title = item.title;
61
+
62
+ let pubDate = null;
63
+ if (item.publishDate) {
64
+ pubDate = parseDate(item.publishDate, 'YYYY-MM-DD');
65
+ pubDate = timezone(pubDate, 8);
66
+ }
67
+
68
+ const link = `${host}/#/dky/view/id=${id}/barId=${category}`;
69
+
70
+ return {
71
+ title,
72
+ description: item.introduction,
73
+ link,
74
+ guid: link,
75
+ pubDate,
76
+ };
77
+ });
78
+
79
+ return {
80
+ title,
81
+ link: `${host}/#/dky/list/barId=${category}/cmsNavCategory=1`,
82
+ item: items,
83
+ };
84
+ }
@@ -0,0 +1,9 @@
1
+ import type { Namespace } from '@/types';
2
+
3
+ export const namespace: Namespace = {
4
+ name: 'Chinese Academy of Geological Sciences',
5
+ url: 'cags.cgs.gov.cn',
6
+ zh: {
7
+ name: '中国地质科学院',
8
+ },
9
+ };