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
@@ -110,7 +110,7 @@ export const route: Route = {
110
110
  description: `:::tip
111
111
  若订阅 [监管动态](https://www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemId=915&itemUrl=ItemListRightList.html),网址为 \`https://www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemId=915&itemUrl=ItemListRightList.html\`。截取 \`itemId\` 的值 \`915\` 作为参数填入,此时路由为 [\`/gov/cbirc/915\`](https://rsshub.app/gov/cbirc/915)。
112
112
  :::
113
-
113
+
114
114
  #### [首页](https://www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=899&itemId=971&itemUrl=ItemListRightMore.html)
115
115
 
116
116
  | [弹出公告](https://www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=971&itemId=972&itemUrl=sss) | [法律声明](https://www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=971&itemId=4128&itemUrl=ItemListRightArticle.html) |
@@ -194,67 +194,67 @@ export const route: Route = {
194
194
  },
195
195
  {
196
196
  title: '首页 - 弹出公告',
197
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=971&itemId=972&itemUrl=sss'],
197
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
198
198
  target: '/cbirc/972',
199
199
  },
200
200
  {
201
201
  title: '首页 - 法律声明',
202
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=971&itemId=4128&itemUrl=ItemListRightArticle.html'],
202
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
203
203
  target: '/cbirc/4128',
204
204
  },
205
205
  {
206
206
  title: '机构概况 - 主要职责',
207
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=900&itemId=901&itemUrl=ItemListRightArticle.html'],
207
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
208
208
  target: '/cbirc/901',
209
209
  },
210
210
  {
211
211
  title: '机构概况 - 总局领导',
212
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=900&itemId=902&itemUrl=jigougaikuang/huilingdao.html'],
212
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
213
213
  target: '/cbirc/902',
214
214
  },
215
215
  {
216
216
  title: '机构概况 - 内设机构',
217
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=900&itemId=911&itemUrl=jigougaikuang/neishejigou.html'],
217
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
218
218
  target: '/cbirc/911',
219
219
  },
220
220
  {
221
221
  title: '机构概况 - 直属行政机构',
222
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=900&itemId=4243&itemUrl=jigougaikuang/zhishuxingzhengjigou.html'],
222
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
223
223
  target: '/cbirc/4243',
224
224
  },
225
225
  {
226
226
  title: '机构概况 - 派出机构',
227
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=900&itemId=912&itemUrl=jigougaikuang/paichujigou.html'],
227
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
228
228
  target: '/cbirc/912',
229
229
  },
230
230
  {
231
231
  title: '机构概况 - 联系方式',
232
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=900&itemId=913&itemUrl=jigougaikuang/lianxifangshi.html'],
232
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
233
233
  target: '/cbirc/913',
234
234
  },
235
235
  {
236
236
  title: '新闻资讯 - 监管动态',
237
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=914&itemId=915&itemUrl=ItemListRightList.html'],
237
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
238
238
  target: '/cbirc/915',
239
239
  },
240
240
  {
241
241
  title: '新闻资讯 - 政策解读',
242
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=914&itemId=916&itemUrl=ItemListRightMore.html'],
242
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
243
243
  target: '/cbirc/916',
244
244
  },
245
245
  {
246
246
  title: '新闻资讯 - 领导活动及讲话',
247
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=914&itemId=919&itemUrl=ItemListRightList.html'],
247
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
248
248
  target: '/cbirc/919',
249
249
  },
250
250
  {
251
251
  title: '新闻资讯 - 新闻发布会及访谈',
252
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=914&itemId=920&itemUrl=xinwenzixun/xinwenfabu.html'],
252
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
253
253
  target: '/cbirc/920',
254
254
  },
255
255
  {
256
256
  title: '新闻资讯 - 新闻发言人',
257
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=914&itemId=921&itemUrl=xinwenzixun/xinwenfayan.html'],
257
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
258
258
  target: '/cbirc/921',
259
259
  },
260
260
  {
@@ -264,107 +264,107 @@ export const route: Route = {
264
264
  },
265
265
  {
266
266
  title: '政务信息 - 公告通知',
267
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=925&itemUrl=ItemListRightList.html'],
267
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
268
268
  target: '/cbirc/925',
269
269
  },
270
270
  {
271
271
  title: '政务信息 - 政策法规',
272
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=926&itemUrl=ItemListRightMore.html'],
272
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
273
273
  target: '/cbirc/926',
274
274
  },
275
275
  {
276
276
  title: '政务信息 - 行政许可',
277
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=930&itemUrl=zhengwuxinxi/xingzhengxuke.html'],
277
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
278
278
  target: '/cbirc/930',
279
279
  },
280
280
  {
281
281
  title: '政务信息 - 行政处罚',
282
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=931&itemUrl=zhengwuxinxi/xingzhengchufa.html'],
282
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
283
283
  target: '/cbirc/931',
284
284
  },
285
285
  {
286
286
  title: '政务信息 - 行政监管措施',
287
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=932&itemUrl=ItemListRightList.html'],
287
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
288
288
  target: '/cbirc/932',
289
289
  },
290
290
  {
291
291
  title: '政务信息 - 人事信息',
292
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=923&itemId=933&itemUrl=ItemListRightList.html'],
292
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
293
293
  target: '/cbirc/933',
294
294
  },
295
295
  {
296
296
  title: '在线服务 - 行政许可办事服务指南',
297
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=937&itemId=938&itemUrl=zaixianfuwu/banshifuwu.html'],
297
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
298
298
  target: '/cbirc/938',
299
299
  },
300
300
  {
301
301
  title: '在线服务 - 查询服务',
302
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=937&itemId=939&itemUrl=zaixianfuwu/chaxunfuwu.html'],
302
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
303
303
  target: '/cbirc/939',
304
304
  },
305
305
  {
306
306
  title: '互动交流 - 政务咨询',
307
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=945&itemId=946&itemUrl=tosubmenu:hudongjiaoliu/woyaozixun.html'],
307
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
308
308
  target: '/cbirc/946',
309
309
  },
310
310
  {
311
311
  title: '互动交流 - 征集调查',
312
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=945&itemId=950&itemUrl=ItemListRightMore.html'],
312
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
313
313
  target: '/cbirc/950',
314
314
  },
315
315
  {
316
316
  title: '互动交流 - 国务院办公厅开通“国家政务服务投诉与建议”小程序',
317
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=945&itemId=952&itemUrl=http://www.gov.cn/xinwen/2018-09/20/content_5323786.htm'],
317
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
318
318
  target: '/cbirc/952',
319
319
  },
320
320
  {
321
321
  title: '统计数据 - 统计信息',
322
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=953&itemId=954&itemUrl=ItemListRightList.html'],
322
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
323
323
  target: '/cbirc/954',
324
324
  },
325
325
  {
326
326
  title: '统计数据 - 数据图表',
327
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=953&itemId=955&itemUrl=tosubmenu:tongjishuju/zongzichan.html'],
327
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
328
328
  target: '/cbirc/955',
329
329
  },
330
330
  {
331
331
  title: '专题专栏 - 推进普惠金融高质量发展',
332
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=960&itemId=4234&itemUrl=ItemListRightMore.html'],
332
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
333
333
  target: '/cbirc/4234',
334
334
  },
335
335
  {
336
336
  title: '专题专栏 - 防范和处置非法集资',
337
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=960&itemId=963&itemUrl=ItemListRightMore.html'],
337
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
338
338
  target: '/cbirc/963',
339
339
  },
340
340
  {
341
341
  title: '专题专栏 - 消费者保护',
342
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=960&itemId=4097&itemUrl=ItemListRightMore.html'],
342
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
343
343
  target: '/cbirc/4097',
344
344
  },
345
345
  {
346
346
  title: '专题专栏 - 法治宣传',
347
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=960&itemId=4106&itemUrl=ItemListRightMore.html'],
347
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
348
348
  target: '/cbirc/4106',
349
349
  },
350
350
  {
351
351
  title: '专题专栏 - 政府网站年度报表',
352
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=960&itemId=970&itemUrl=ItemListRightList.html'],
352
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
353
353
  target: '/cbirc/970',
354
354
  },
355
355
  {
356
356
  title: '专题专栏 - 服务民营企业',
357
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=960&itemId=4171&itemUrl=ItemListRightList.html'],
357
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
358
358
  target: '/cbirc/4171',
359
359
  },
360
360
  {
361
361
  title: '专题专栏 - 服务制造业发展',
362
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=960&itemId=4217&itemUrl=ItemListRightList.html'],
362
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
363
363
  target: '/cbirc/4217',
364
364
  },
365
365
  {
366
366
  title: '专题专栏 - 学习贯彻习近平新时代中国特色社会主义思想主题教育',
367
- source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html?itemPId=960&itemId=4229&itemUrl=ItemListRightMore.html'],
367
+ source: ['www.cbirc.gov.cn/cn/view/pages/ItemList.html'],
368
368
  target: '/cbirc/4229',
369
369
  },
370
370
  ],
@@ -0,0 +1,81 @@
1
+ import { Route, DataItem } from '@/types';
2
+ import got from '@/utils/got';
3
+ import { load } from 'cheerio';
4
+ import { parseDate } from '@/utils/parse-date';
5
+ import cache from '@/utils/cache';
6
+
7
+ export const route: Route = {
8
+ path: '/blog',
9
+ categories: ['blog'],
10
+ example: '/hamel/blog',
11
+ radar: [
12
+ {
13
+ source: ['hamel.dev/'],
14
+ },
15
+ ],
16
+ url: 'hamel.dev/',
17
+ name: 'Blog',
18
+ maintainers: ['liyaozhong'],
19
+ handler,
20
+ description: "Hamel's Blog Posts",
21
+ };
22
+
23
+ async function handler() {
24
+ const rootUrl = 'https://hamel.dev';
25
+ const currentUrl = rootUrl;
26
+
27
+ const response = await got(currentUrl);
28
+ const $ = load(response.data);
29
+
30
+ let items = $('tr[data-index]')
31
+ .toArray()
32
+ .map((item) => {
33
+ const $item = $(item);
34
+ const $link = $item.find('td a').last();
35
+ const $date = $item.find('.listing-date');
36
+
37
+ const href = $link.attr('href');
38
+ const title = $link.text().trim();
39
+ const dateStr = $date.text().trim();
40
+
41
+ if (!href || !title || !dateStr) {
42
+ return null;
43
+ }
44
+
45
+ const link = new URL(href, rootUrl).href;
46
+ const pubDate = parseDate(dateStr, 'M/D/YY');
47
+
48
+ return {
49
+ title,
50
+ link,
51
+ pubDate,
52
+ } as DataItem;
53
+ })
54
+ .filter((item): item is DataItem => item !== null);
55
+
56
+ items = (
57
+ await Promise.all(
58
+ items.map((item) =>
59
+ cache.tryGet(item.link as string, async () => {
60
+ try {
61
+ const detailResponse = await got(item.link);
62
+ const $detail = load(detailResponse.data);
63
+
64
+ return {
65
+ ...item,
66
+ description: $detail('.content').html() || '',
67
+ } as DataItem;
68
+ } catch {
69
+ return item;
70
+ }
71
+ })
72
+ )
73
+ )
74
+ ).filter((item): item is DataItem => item !== null);
75
+
76
+ return {
77
+ title: "Hamel's Blog",
78
+ link: rootUrl,
79
+ item: items,
80
+ };
81
+ }
@@ -0,0 +1,7 @@
1
+ import type { Namespace } from '@/types';
2
+
3
+ export const namespace: Namespace = {
4
+ name: "Hamel's Blog",
5
+ url: 'hamel.dev',
6
+ lang: 'en',
7
+ };
@@ -12,6 +12,7 @@ const md = MarkdownIt({
12
12
  import { load } from 'cheerio';
13
13
  import cache from '@/utils/cache';
14
14
  import { config } from '@/config';
15
+ import { parseDate } from '@/utils/parse-date';
15
16
 
16
17
  art.defaults.imports.render = function (string) {
17
18
  return md.render(string);
@@ -39,6 +40,7 @@ async function handler(ctx) {
39
40
  const items = await Promise.all(
40
41
  volumes.map(async (volume) => {
41
42
  const current = volume.num;
43
+ const lastmod = volume.lastmod;
42
44
  const currentUrl = `${rootUrl}/periodical/volume/${current}`;
43
45
  const key = `hellogithub:${currentUrl}`;
44
46
  return await cache.tryGet(
@@ -61,6 +63,7 @@ async function handler(ctx) {
61
63
  description: art(path.join(__dirname, 'templates/volume.art'), {
62
64
  data: data.pageProps.volume.data,
63
65
  }),
66
+ pubDate: parseDate(lastmod),
64
67
  };
65
68
  },
66
69
  config.cache.routeExpire,
@@ -40,7 +40,19 @@ export const route: Route = {
40
40
  },
41
41
  radar: [
42
42
  {
43
- source: ['china.hket.com/:category/*', 'inews.hket.com/:category/*', 'topick.hket.com/:category/*', 'wealth.hket.com/:category/*'],
43
+ source: ['china.hket.com/:category/*'],
44
+ target: '/:category',
45
+ },
46
+ {
47
+ source: ['inews.hket.com/:category/*'],
48
+ target: '/:category',
49
+ },
50
+ {
51
+ source: ['topick.hket.com/:category/*'],
52
+ target: '/:category',
53
+ },
54
+ {
55
+ source: ['wealth.hket.com/:category/*'],
44
56
  target: '/:category',
45
57
  },
46
58
  {
@@ -7,5 +7,5 @@ export const route: Route = {
7
7
  };
8
8
 
9
9
  function handler(ctx) {
10
- ctx.redirect('/hostmonit/cloudflareyes/v6');
10
+ ctx.set('redirect', '/hostmonit/cloudflareyes/v6');
11
11
  }
@@ -0,0 +1,80 @@
1
+ import { Route } from '@/types';
2
+ import cache from '@/utils/cache';
3
+ import got from '@/utils/got';
4
+ import { load } from 'cheerio';
5
+ import { parseDate } from '@/utils/parse-date';
6
+ const rootUrl = 'http://sec.hrbeu.edu.cn';
7
+
8
+ export const route: Route = {
9
+ path: '/sec/:id',
10
+ categories: ['university'],
11
+ example: '/hrbeu/sec/xshd',
12
+ parameters: { id: '栏目编号,由 `URL` 中获取。' },
13
+ features: {
14
+ requireConfig: false,
15
+ requirePuppeteer: false,
16
+ antiCrawler: false,
17
+ supportBT: false,
18
+ supportPodcast: false,
19
+ supportScihub: false,
20
+ },
21
+ radar: [
22
+ {
23
+ source: ['sec.hrbeu.edu.cn/:id/list.htm'],
24
+ },
25
+ ],
26
+ name: '船舶工程学院',
27
+ maintainers: ['Chi-hong22'],
28
+ handler,
29
+ description: `| 学院要闻 | 学术活动 | 通知公告 | 学科方向 |
30
+ | :------: | :------: |:------: | :------: |
31
+ | xyyw | xshd | 229 | xkfx |`,
32
+ };
33
+
34
+ async function handler(ctx) {
35
+ const id = ctx.req.param('id');
36
+ const response = await got(`${rootUrl}/${id}/list.htm`, {
37
+ headers: {
38
+ Referer: rootUrl,
39
+ },
40
+ });
41
+
42
+ const $ = load(response.data);
43
+
44
+ const bigTitle = $('div [class=lanmuInnerMiddleBigClass_right]').find('div [portletmode=simpleColumnAttri]').text().replaceAll(/[\s·]/g, '').trim();
45
+
46
+ const list = $('li.list_item')
47
+ .toArray()
48
+ .map((item) => {
49
+ let link = $(item).find('a').attr('href');
50
+ if (link && link.includes('page.htm')) {
51
+ link = `${rootUrl}${link}`;
52
+ }
53
+ return {
54
+ title: $(item).find('a').attr('title'),
55
+ pubDate: parseDate($(item).find('span.Article_PublishDate').text()),
56
+ link,
57
+ };
58
+ });
59
+
60
+ const items = await Promise.all(
61
+ list.map((item) =>
62
+ cache.tryGet(item.link, async () => {
63
+ if (item.link.includes('page.htm')) {
64
+ const detailResponse = await got(item.link);
65
+ const content = load(detailResponse.data);
66
+ item.description = content('div.wp_articlecontent').html();
67
+ } else {
68
+ item.description = '本文需跳转,请点击标题后阅读';
69
+ }
70
+ return item;
71
+ })
72
+ )
73
+ );
74
+
75
+ return {
76
+ title: '船舶工程学院 - ' + bigTitle,
77
+ link: rootUrl.concat('/', id, '/list.htm'),
78
+ item: items,
79
+ };
80
+ }
@@ -37,6 +37,12 @@ export const route: Route = {
37
37
  description: `| 名师风采 | 热点新闻 | 教务公告 | 教学新闻 |
38
38
  | -------- | -------- | -------- | -------- |
39
39
  | 351 | 353 | 354 | 355 |`,
40
+ radar: [
41
+ {
42
+ source: ['jwzx.hrbust.edu.cn/homepage/index.do'],
43
+ target: '/jwzx',
44
+ },
45
+ ],
40
46
  };
41
47
 
42
48
  async function handler(ctx) {
@@ -16,7 +16,7 @@ export const route: Route = {
16
16
  },
17
17
  radar: [
18
18
  {
19
- source: ['xky.hunau.edu.cn/', 'xky.hunau.edu.cntzgg_8472', 'xky.hunau.edu.cn/:category'],
19
+ source: ['xky.hunau.edu.cn/', 'xky.hunau.edu.cn/tzgg_8472', 'xky.hunau.edu.cn/:category'],
20
20
  target: '/:category',
21
21
  },
22
22
  ],
@@ -16,7 +16,7 @@ export const route: Route = {
16
16
  },
17
17
  radar: [
18
18
  {
19
- source: ['xky.hunau.edu.cn/', 'xky.hunau.edu.cntzgg_8472', 'xky.hunau.edu.cn/:category'],
19
+ source: ['xky.hunau.edu.cn/', 'xky.hunau.edu.cn/tzgg_8472', 'xky.hunau.edu.cn/:category'],
20
20
  target: '/:category',
21
21
  },
22
22
  ],
@@ -16,7 +16,7 @@ export const route: Route = {
16
16
  },
17
17
  radar: [
18
18
  {
19
- source: ['xky.hunau.edu.cn/', 'xky.hunau.edu.cntzgg_8472', 'xky.hunau.edu.cn/:category'],
19
+ source: ['xky.hunau.edu.cn/', 'xky.hunau.edu.cn/tzgg_8472', 'xky.hunau.edu.cn/:category'],
20
20
  target: '/:category',
21
21
  },
22
22
  ],
@@ -16,7 +16,7 @@ export const route: Route = {
16
16
  },
17
17
  radar: [
18
18
  {
19
- source: ['xky.hunau.edu.cn/', 'xky.hunau.edu.cntzgg_8472', 'xky.hunau.edu.cn/:category'],
19
+ source: ['xky.hunau.edu.cn/', 'xky.hunau.edu.cn/tzgg_8472', 'xky.hunau.edu.cn/:category'],
20
20
  target: '/:category',
21
21
  },
22
22
  ],
@@ -57,11 +57,12 @@ export const handler = async (ctx) => {
57
57
  )
58
58
  );
59
59
 
60
- const image = new URL($('div.logo img').prop('content'), rootUrl).href;
60
+ const title = $('meta[name="keywords"]').prop('content')?.replace(/,/g, ' - ') ?? $('title').text();
61
+ const image = new URL($('div.logo img').prop('src'), rootUrl).href;
61
62
 
62
63
  return {
63
- title: $('title').text(),
64
- description: $('META[Name="keywords"]').prop('Content'),
64
+ title,
65
+ description: title.split(/-/).pop()?.trim(),
65
66
  link: currentUrl,
66
67
  item: items,
67
68
  allowEmpty: true,
@@ -0,0 +1,7 @@
1
+ import type { Namespace } from '@/types';
2
+
3
+ export const namespace: Namespace = {
4
+ name: 'アイドルマスター THE IDOLM@STER',
5
+ url: 'idolmaster-official.jp',
6
+ lang: 'ja',
7
+ };
@@ -0,0 +1,112 @@
1
+ import { Route, Data, DataItem } from '@/types';
2
+ import type { Context } from 'hono';
3
+ import got from '@/utils/got';
4
+ import querystring from 'querystring';
5
+ import timezone from '@/utils/timezone';
6
+ import { parseDate } from '@/utils/parse-date';
7
+ import cache from '@/utils/cache';
8
+ import { load } from 'cheerio';
9
+
10
+ export const route: Route = {
11
+ url: 'idolmaster-official.jp/news',
12
+ path: '/news/:routeParams?',
13
+ categories: ['anime'],
14
+ example: '/idolmaster/news/brand=MILLIONLIVE&brand=SHINYCOLORS&category=GAME&category=ANIME',
15
+ parameters: {
16
+ routeParams: 'The `brand` and `category` params in the path. The available values are as follows.',
17
+ },
18
+ description: `**Brand**
19
+ | THE IDOLM@STER | シンデレラガールズ | ミリオンライブ! | SideM | シャイニーカラーズ | 学園アイドルマスター | その他 |
20
+ | -------------- | --------------- | ------------- | ----- | --------------- | ----------------- | ----- |
21
+ | IDOLMASTER | CINDERELLAGIRLS | MILLIONLIVE | SIDEM | SHINYCOLORS | GAKUEN | OTHER |
22
+
23
+ **Category**
24
+ | ゲーム | ライブ・イベント | アニメ | 配信番組 | ラジオ | グッズ | コラボ・キャンペーン | ミュージック | ブック・コミック | メディア | その他 |
25
+ | ----- | ------------- | ----- | ------- | ----- | ----- | ----------------- | --------- | -------------- | ------ | ----- |
26
+ | GAME | LIVE-EVENT | ANIME | LIVESTREAM | RADIO | GOODS | COLLABO-CAMP | CD | BOOK | MEDIA | OTHER |
27
+ `,
28
+ features: {
29
+ requireConfig: false,
30
+ requirePuppeteer: false,
31
+ antiCrawler: false,
32
+ supportBT: false,
33
+ supportPodcast: false,
34
+ supportScihub: false,
35
+ },
36
+ radar: [
37
+ {
38
+ source: ['idolmaster-official.jp/news'],
39
+ target: '/news',
40
+ },
41
+ ],
42
+ name: 'ニュース News',
43
+ maintainers: ['keocheung'],
44
+ handler,
45
+ };
46
+
47
+ const apiUrl = 'https://cmsapi-frontend.idolmaster-official.jp';
48
+
49
+ async function handler(ctx: Context): Promise<Data> {
50
+ const tokenUrl = `${apiUrl}/sitern/api/cmsbase/Token/get`;
51
+ const tokenRsp = await got(tokenUrl);
52
+ const token = tokenRsp.data.data.token;
53
+
54
+ const options: {
55
+ category: string[];
56
+ subcategory?: string | string[];
57
+ brand?: string | string[];
58
+ } = {
59
+ category: ['NEWS'],
60
+ };
61
+
62
+ const routeParams = ctx.req.param('routeParams');
63
+ if (routeParams) {
64
+ const queries = querystring.parse(routeParams);
65
+ options.subcategory = toUpperCase(queries.category);
66
+ options.brand = toUpperCase(queries.brand);
67
+ }
68
+
69
+ const limitParam = ctx.req.query('limit');
70
+ let limit = limitParam ? Number.parseInt(limitParam) : 12;
71
+ if (limit > 30) {
72
+ limit = 30;
73
+ }
74
+ const listUrl = `${apiUrl}/sitern/api/idolmaster/Article/list?site=jp&ip=idolmaster&token=${token}&sort=desc&data=${JSON.stringify(options)}&limit=${limit}&start=0`;
75
+ const listnRsp = await got(listUrl);
76
+ const articleList = listnRsp.data.data.article_list;
77
+
78
+ let items = articleList.map(
79
+ (article): DataItem => ({
80
+ title: article.title,
81
+ link: article.url,
82
+ pubDate: timezone(parseDate(article.dspdate), +9),
83
+ category: article.categories.subcategory.map((cat) => cat.name),
84
+ })
85
+ );
86
+
87
+ items = await Promise.all(
88
+ items.map((item: DataItem) =>
89
+ cache.tryGet(item.link, async () => {
90
+ const rsp = await got(item.link);
91
+ const content = load(rsp.data);
92
+ const nextData = JSON.parse(content('script#__NEXT_DATA__').text());
93
+ item.description = `<div lang="ja">${nextData.props.pageProps.data.content?.replaceAll('<img src="', `<img src="${apiUrl}/sitern/api/idolmaster/Image/get?path=`)}</div>`;
94
+ return item;
95
+ })
96
+ )
97
+ );
98
+
99
+ return {
100
+ title: 'NEWS | アイドルマスター',
101
+ link: 'https://idolmaster-official.jp/news',
102
+ item: items,
103
+ language: 'ja',
104
+ };
105
+ }
106
+
107
+ function toUpperCase(input: string | string[] | undefined): string | string[] | undefined {
108
+ if (!input) {
109
+ return input;
110
+ }
111
+ return typeof input === 'string' ? input.toUpperCase() : input.map((item) => item.toUpperCase());
112
+ }