rsshub 1.0.0-master.ff487f3 → 1.0.0-master.ff76aa7

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 (532) hide show
  1. package/README.md +13 -48
  2. package/lib/api/radar/rules/all.ts +3 -6
  3. package/lib/api/radar/rules/one.ts +3 -6
  4. package/lib/config.ts +50 -2
  5. package/lib/errors/index.test.ts +1 -1
  6. package/lib/errors/index.tsx +1 -1
  7. package/lib/index.ts +1 -1
  8. package/lib/middleware/anti-hotlink.test.ts +191 -6
  9. package/lib/middleware/anti-hotlink.ts +29 -1
  10. package/lib/middleware/logger.ts +2 -2
  11. package/lib/middleware/parameter.test.ts +22 -5
  12. package/lib/middleware/parameter.ts +47 -17
  13. package/lib/middleware/template.tsx +10 -2
  14. package/lib/registry.test.ts +8 -0
  15. package/lib/registry.ts +2 -0
  16. package/lib/router.js +1 -9
  17. package/lib/routes/4ksj/forum.ts +54 -20
  18. package/lib/routes/500px/tribe-set.ts +3 -2
  19. package/lib/routes/51cto/recommend.ts +45 -7
  20. package/lib/routes/5eplay/index.ts +1 -51
  21. package/lib/routes/5eplay/utils.ts +5 -3
  22. package/lib/routes/a9vg/index.ts +214 -0
  23. package/lib/routes/a9vg/namespace.ts +1 -0
  24. package/lib/routes/a9vg/templates/description.art +17 -0
  25. package/lib/routes/abc/index.ts +2 -2
  26. package/lib/routes/academia/namespace.ts +1 -1
  27. package/lib/routes/agri/index.ts +307 -0
  28. package/lib/routes/agri/namespace.ts +8 -0
  29. package/lib/routes/agri/templates/description.art +21 -0
  30. package/lib/routes/aibase/discover.ts +388 -0
  31. package/lib/routes/aibase/namespace.ts +8 -0
  32. package/lib/routes/aibase/news.ts +118 -0
  33. package/lib/routes/aibase/templates/description.art +100 -0
  34. package/lib/routes/aibase/topic.ts +614 -0
  35. package/lib/routes/aibase/util.ts +114 -0
  36. package/lib/routes/anime1/anime.ts +63 -0
  37. package/lib/routes/anime1/namespace.ts +6 -0
  38. package/lib/routes/anime1/search.ts +57 -0
  39. package/lib/routes/apnews/api.ts +77 -0
  40. package/lib/routes/apnews/rss.ts +2 -2
  41. package/lib/routes/apnews/sitemap.ts +99 -0
  42. package/lib/routes/apnews/topics.ts +2 -2
  43. package/lib/routes/apnews/utils.ts +2 -1
  44. package/lib/routes/apple/podcast.ts +20 -16
  45. package/lib/routes/asus/bios.ts +88 -21
  46. package/lib/routes/asus/templates/bios.art +13 -6
  47. package/lib/routes/bangumi/templates/tv/subject.art +6 -0
  48. package/lib/routes/bangumi/tv/other/followrank.ts +19 -22
  49. package/lib/routes/bangumi/tv/user/collections.ts +172 -0
  50. package/lib/routes/behance/user.ts +14 -3
  51. package/lib/routes/beijingprice/index.ts +12 -12
  52. package/lib/routes/bestblogs/feeds.ts +107 -0
  53. package/lib/routes/bestblogs/namespace.ts +6 -0
  54. package/lib/routes/bilibili/api-interface.d.ts +1 -0
  55. package/lib/routes/bilibili/bangumi.ts +3 -2
  56. package/lib/routes/bilibili/bilibili-recommend.ts +42 -0
  57. package/lib/routes/bilibili/cache.ts +41 -9
  58. package/lib/routes/bilibili/dynamic.ts +103 -105
  59. package/lib/routes/bilibili/followings-dynamic.ts +3 -1
  60. package/lib/routes/bilibili/followings-video.ts +9 -3
  61. package/lib/routes/bilibili/readlist.ts +3 -2
  62. package/lib/routes/bilibili/utils.ts +90 -3
  63. package/lib/routes/bilibili/video.ts +8 -9
  64. package/lib/routes/bilibili/vsearch.ts +1 -1
  65. package/lib/routes/binance/announcement.ts +168 -0
  66. package/lib/routes/binance/types.ts +26 -0
  67. package/lib/routes/bitget/announcement.ts +200 -0
  68. package/lib/routes/bitget/namespace.ts +6 -0
  69. package/lib/routes/bitget/type.ts +26 -0
  70. package/lib/routes/bjnews/cat.ts +9 -1
  71. package/lib/routes/bjp/apod.ts +4 -2
  72. package/lib/routes/buaa/jiaowu.ts +1 -1
  73. package/lib/routes/buaa/lib/space/newbook.ts +171 -0
  74. package/lib/routes/buaa/lib/space/templates/newbook.art +44 -0
  75. package/lib/routes/bupt/jwc.ts +130 -0
  76. package/lib/routes/caixin/latest.ts +3 -2
  77. package/lib/routes/cbpanet/index.ts +380 -0
  78. package/lib/routes/cbpanet/namespace.ts +8 -0
  79. package/lib/routes/ccfa/index.ts +216 -0
  80. package/lib/routes/ccfa/namespace.ts +8 -0
  81. package/lib/routes/ccfa/templates/description.art +7 -0
  82. package/lib/routes/cctv/category.ts +16 -12
  83. package/lib/routes/cctv/xwlb.ts +32 -10
  84. package/lib/routes/cdu/jwgg.ts +79 -0
  85. package/lib/routes/cdu/namespace.ts +6 -0
  86. package/lib/routes/ceph/blog.ts +72 -0
  87. package/lib/routes/ceph/namespace.ts +7 -0
  88. package/lib/routes/changba/user.ts +6 -5
  89. package/lib/routes/chikubi/category.ts +41 -0
  90. package/lib/routes/chikubi/index.ts +66 -0
  91. package/lib/routes/chikubi/namespace.ts +15 -0
  92. package/lib/routes/chikubi/navigation.ts +66 -0
  93. package/lib/routes/chikubi/nipple-video-category.ts +49 -0
  94. package/lib/routes/chikubi/nipple-video-maker.ts +49 -0
  95. package/lib/routes/chikubi/search.ts +39 -0
  96. package/lib/routes/chikubi/tag.ts +41 -0
  97. package/lib/routes/chikubi/utils.ts +135 -0
  98. package/lib/routes/chinanews/index.ts +1 -1
  99. package/lib/routes/chinaventure/index.ts +1 -1
  100. package/lib/routes/chlinlearn/daily-blog.ts +7 -0
  101. package/lib/routes/cisia/index.ts +264 -0
  102. package/lib/routes/cisia/namespace.ts +8 -0
  103. package/lib/routes/cjlu/namespace.ts +10 -0
  104. package/lib/routes/cjlu/yjsy/index.ts +107 -0
  105. package/lib/routes/cls/subject.ts +153 -0
  106. package/lib/routes/cls/templates/description.art +21 -0
  107. package/lib/routes/cohere/index.ts +54 -0
  108. package/lib/routes/cohere/namespace.ts +6 -0
  109. package/lib/routes/damai/activity.ts +3 -2
  110. package/lib/routes/dcfever/trading.ts +3 -5
  111. package/lib/routes/dcfever/utils.ts +13 -4
  112. package/lib/routes/dealstreetasia/home.ts +72 -0
  113. package/lib/routes/dealstreetasia/namespace.ts +6 -0
  114. package/lib/routes/dealstreetasia/section.ts +57 -0
  115. package/lib/routes/deepin/thread.ts +102 -0
  116. package/lib/routes/deeplearning/thebatch.ts +30 -18
  117. package/lib/routes/devolverdigital/blog.ts +59 -42
  118. package/lib/routes/devtrium/namespace.ts +6 -0
  119. package/lib/routes/devtrium/posts.ts +55 -0
  120. package/lib/routes/discourse/official.ts +55 -0
  121. package/lib/routes/dlsite/campaign.ts +1 -2
  122. package/lib/routes/dlsite/new.ts +1 -2
  123. package/lib/routes/dlsite/{index.ts → z-index/index.ts} +1 -1
  124. package/lib/routes/dockerhub/build.ts +1 -1
  125. package/lib/routes/dockerhub/utils.ts +4 -3
  126. package/lib/routes/douban/movie/coming.ts +68 -0
  127. package/lib/routes/douban/templates/movie_coming.art +27 -0
  128. package/lib/routes/douyin/types.ts +795 -0
  129. package/lib/routes/douyin/user.ts +51 -23
  130. package/lib/routes/douyin/utils.ts +1 -87
  131. package/lib/routes/dykszx/namespace.ts +8 -0
  132. package/lib/routes/dykszx/news.ts +88 -0
  133. package/lib/routes/eagle/blog.ts +13 -2
  134. package/lib/routes/eastmoney/report/index.ts +63 -15
  135. package/lib/routes/eastmoney/templates/stock_description.art +36 -0
  136. package/lib/routes/eastmoney/utils.ts +35 -0
  137. package/lib/routes/easynomad/joblist.ts +56 -0
  138. package/lib/routes/easynomad/namespace.ts +6 -0
  139. package/lib/routes/economist/espresso.ts +3 -2
  140. package/lib/routes/economist/full.ts +3 -2
  141. package/lib/routes/epicgames/index.ts +1 -1
  142. package/lib/routes/espn/namespace.ts +6 -0
  143. package/lib/routes/espn/news.ts +120 -0
  144. package/lib/routes/espn/templates/media.art +19 -0
  145. package/lib/routes/famitsu/category.ts +1 -1
  146. package/lib/routes/fanbox/index.ts +1 -1
  147. package/lib/routes/fanbox/types.ts +1 -5
  148. package/lib/routes/fediverse/timeline.ts +2 -2
  149. package/lib/routes/flashcat/blog.ts +61 -0
  150. package/lib/routes/flashcat/namespace.ts +6 -0
  151. package/lib/routes/follow/namespace.ts +6 -0
  152. package/lib/routes/follow/profile.ts +83 -0
  153. package/lib/routes/follow/types.ts +78 -0
  154. package/lib/routes/ftm/index.ts +60 -0
  155. package/lib/routes/ftm/namespace.ts +6 -0
  156. package/lib/routes/galxe/index.ts +94 -0
  157. package/lib/routes/galxe/namespace.ts +9 -0
  158. package/lib/routes/gamer/ani/anime.ts +10 -3
  159. package/lib/routes/gamer/ani/new-anime.ts +4 -3
  160. package/lib/routes/gamer/gnn-index.ts +31 -11
  161. package/lib/routes/gamer/hot.ts +4 -3
  162. package/lib/routes/gamersky/ent.ts +57 -0
  163. package/lib/routes/gamersky/namespace.ts +10 -0
  164. package/lib/routes/gamersky/news.ts +91 -0
  165. package/lib/routes/gamersky/review.ts +80 -0
  166. package/lib/routes/gamersky/utils.ts +94 -0
  167. package/lib/routes/gdut/oa-news.ts +12 -17
  168. package/lib/routes/geekpark/index.ts +219 -0
  169. package/lib/routes/geekpark/namespace.ts +8 -0
  170. package/lib/routes/geekpark/templates/description.art +21 -0
  171. package/lib/routes/gisreportsonline/index.ts +60 -0
  172. package/lib/routes/gisreportsonline/namespace.ts +6 -0
  173. package/lib/routes/github/activity.ts +2 -1
  174. package/lib/routes/github/advisor.ts +97 -0
  175. package/lib/routes/github/comments.ts +32 -30
  176. package/lib/routes/github/discussions.ts +194 -0
  177. package/lib/routes/github/issue.ts +1 -1
  178. package/lib/routes/github/pulls.ts +1 -1
  179. package/lib/routes/gmcmonline/chinacustoms.ts +130 -0
  180. package/lib/routes/gmcmonline/namespace.ts +8 -0
  181. package/lib/routes/go/mhlw/pdf.ts +87 -0
  182. package/lib/routes/go/namespace.ts +8 -0
  183. package/lib/routes/go/niid/idwr-dl.ts +104 -0
  184. package/lib/routes/gov/cbirc/index.ts +371 -0
  185. package/lib/routes/gov/chongqing/sydwgkzp.ts +4 -4
  186. package/lib/routes/gov/cn/namespace.ts +8 -0
  187. package/lib/routes/gov/{news → cn/news}/index.ts +11 -7
  188. package/lib/routes/gov/csrc/csrc.ts +541 -0
  189. package/lib/routes/gov/lswz/index.ts +289 -0
  190. package/lib/routes/gov/moa/moa.ts +3 -3
  191. package/lib/routes/gov/moa/szcpxx.ts +115 -0
  192. package/lib/routes/gov/moa/zdscxx.ts +71 -21
  193. package/lib/routes/gov/ndrc/fggz.ts +637 -2
  194. package/lib/routes/gov/ndrc/namespace.ts +8 -0
  195. package/lib/routes/gov/ndrc/xwdt.ts +28 -8
  196. package/lib/routes/gov/ndrc/zfxxgk.ts +106 -0
  197. package/lib/routes/gov/zj/search.ts +17 -12
  198. package/lib/routes/gq/news.ts +3 -2
  199. package/lib/routes/gs/developer/blog.ts +58 -0
  200. package/lib/routes/gs/namespace.ts +9 -0
  201. package/lib/routes/guancha/member.ts +1 -1
  202. package/lib/routes/hackernews/index.ts +16 -5
  203. package/lib/routes/healthz.ts +8 -0
  204. package/lib/routes/hellogithub/index.ts +17 -67
  205. package/lib/routes/hellogithub/report.ts +1 -1
  206. package/lib/routes/hex-rays/index.ts +23 -29
  207. package/lib/routes/hfut/hf/notice.ts +43 -0
  208. package/lib/routes/hfut/hf/utils.ts +80 -0
  209. package/lib/routes/hfut/namespace.ts +6 -0
  210. package/lib/routes/hfut/xc/notice.ts +43 -0
  211. package/lib/routes/hfut/xc/utils.ts +73 -0
  212. package/lib/routes/hket/index.ts +80 -76
  213. package/lib/routes/hko/earthquake.ts +56 -0
  214. package/lib/routes/hko/namespace.ts +8 -0
  215. package/lib/routes/hko/weather.ts +56 -0
  216. package/lib/routes/hottoys/index.ts +63 -0
  217. package/lib/routes/hottoys/namespace.ts +6 -0
  218. package/lib/routes/hpoi/all.ts +17 -6
  219. package/lib/routes/hpoi/character.ts +18 -6
  220. package/lib/routes/hpoi/info.ts +11 -6
  221. package/lib/routes/hpoi/user.ts +16 -4
  222. package/lib/routes/hpoi/utils.ts +36 -3
  223. package/lib/routes/hpoi/work.ts +18 -6
  224. package/lib/routes/huggingface/blog-zh.ts +1 -1
  225. package/lib/routes/hust/gs.ts +281 -0
  226. package/lib/routes/hust/mse.ts +575 -0
  227. package/lib/routes/hust/namespace.ts +1 -1
  228. package/lib/routes/i-cable/namespace.ts +6 -0
  229. package/lib/routes/i-cable/news.ts +77 -0
  230. package/lib/routes/i-cable/templates/description.art +8 -0
  231. package/lib/routes/imhcg/blog.ts +47 -0
  232. package/lib/routes/imhcg/namespace.ts +7 -0
  233. package/lib/routes/imop/namespace.ts +10 -0
  234. package/lib/routes/imop/tianshu.ts +53 -0
  235. package/lib/routes/infzm/hot.ts +39 -0
  236. package/lib/routes/infzm/index.ts +3 -30
  237. package/lib/routes/infzm/utils.ts +34 -0
  238. package/lib/routes/ipsw.dev/index.ts +64 -0
  239. package/lib/routes/ipsw.dev/namespace.ts +7 -0
  240. package/lib/routes/ipsw.dev/templates/description.art +20 -0
  241. package/lib/routes/iwara/subscriptions.ts +1 -1
  242. package/lib/routes/javtiful/actress.ts +37 -0
  243. package/lib/routes/javtiful/channel.ts +37 -0
  244. package/lib/routes/javtiful/namespace.ts +6 -0
  245. package/lib/routes/javtiful/templates/description.art +7 -0
  246. package/lib/routes/javtiful/utils.ts +18 -0
  247. package/lib/routes/jianshu/collection.ts +3 -2
  248. package/lib/routes/jianshu/home.ts +3 -2
  249. package/lib/routes/jianshu/user.ts +3 -2
  250. package/lib/routes/jike/topic.ts +10 -3
  251. package/lib/routes/jike/user.ts +3 -2
  252. package/lib/routes/jjwxc/book.ts +18 -14
  253. package/lib/routes/joins/chinese.ts +218 -0
  254. package/lib/routes/joins/namespace.ts +8 -0
  255. package/lib/routes/joins/templates/description.art +17 -0
  256. package/lib/routes/kakuyomu/namespace.ts +6 -0
  257. package/lib/routes/kakuyomu/types.ts +6 -0
  258. package/lib/routes/kakuyomu/works.ts +73 -0
  259. package/lib/routes/kaopu/news.ts +3 -3
  260. package/lib/routes/kisskiss/blog.ts +74 -0
  261. package/lib/routes/kisskiss/namespace.ts +6 -0
  262. package/lib/routes/konachan/namespace.ts +7 -0
  263. package/lib/routes/konachan/post.ts +84 -0
  264. package/lib/routes/lemmy/index.ts +30 -3
  265. package/lib/routes/lemmy/namespace.ts +1 -0
  266. package/lib/routes/link3/events.ts +86 -0
  267. package/lib/routes/link3/namespace.ts +6 -0
  268. package/lib/routes/link3/profile.ts +143 -0
  269. package/lib/routes/lmu/jobs.ts +96 -0
  270. package/lib/routes/lmu/namespace.ts +17 -0
  271. package/lib/routes/lmu/templates/jobPosting.art +11 -0
  272. package/lib/routes/lofter/collection.ts +87 -0
  273. package/lib/routes/lofter/user.ts +1 -1
  274. package/lib/routes/lorientlejour/index.ts +186 -0
  275. package/lib/routes/lorientlejour/namespace.ts +7 -0
  276. package/lib/routes/lorientlejour/templates/description.art +18 -0
  277. package/lib/routes/lovelive-anime/namespace.ts +1 -1
  278. package/lib/routes/lovelive-anime/news.ts +56 -26
  279. package/lib/routes/lovelive-anime/schedules.ts +18 -6
  280. package/lib/routes/lovelive-anime/templates/description.art +1 -1
  281. package/lib/routes/lovelive-anime/templates/scheduleDesc.art +0 -1
  282. package/lib/routes/lovelive-anime/topics.ts +1 -1
  283. package/lib/routes/luma/index.ts +92 -0
  284. package/lib/routes/luma/namespace.ts +6 -0
  285. package/lib/routes/malaysiakini/index.ts +179 -0
  286. package/lib/routes/malaysiakini/namespace.ts +11 -0
  287. package/lib/routes/manhuagui/comic.ts +1 -1
  288. package/lib/routes/mastodon/account-id.ts +26 -3
  289. package/lib/routes/mastodon/acct.ts +15 -4
  290. package/lib/routes/mastodon/timeline-local.ts +14 -3
  291. package/lib/routes/mastodon/timeline-remote.ts +14 -3
  292. package/lib/routes/meishichina/index.ts +1997 -0
  293. package/lib/routes/meishichina/namespace.ts +8 -0
  294. package/lib/routes/mi/crowdfunding.ts +43 -22
  295. package/lib/routes/mi/templates/crowdfunding.art +28 -0
  296. package/lib/routes/mi/types.ts +40 -0
  297. package/lib/routes/mi/utils.ts +80 -0
  298. package/lib/routes/misskey/featured-notes.ts +3 -2
  299. package/lib/routes/misskey/user-timeline.ts +3 -2
  300. package/lib/routes/misskey/utils.ts +1 -0
  301. package/lib/routes/natgeo/dailyphoto.ts +4 -3
  302. package/lib/routes/natgeo/dailyselection.ts +17 -2
  303. package/lib/routes/ncku/csie.ts +83 -0
  304. package/lib/routes/ncku/namespace.ts +6 -0
  305. package/lib/routes/ncku/phys.ts +95 -0
  306. package/lib/routes/news/namespace.ts +1 -1
  307. package/lib/routes/newyorker/news.ts +29 -21
  308. package/lib/routes/nhk/news.ts +32 -15
  309. package/lib/routes/nicovideo/namespace.ts +7 -0
  310. package/lib/routes/nicovideo/templates/video.art +7 -0
  311. package/lib/routes/nicovideo/types.ts +54 -0
  312. package/lib/routes/nicovideo/utils.ts +37 -0
  313. package/lib/routes/nicovideo/video.ts +47 -0
  314. package/lib/routes/nikkei/cn/index.ts +12 -1
  315. package/lib/routes/nytimes/book.ts +25 -28
  316. package/lib/routes/nytimes/daily-briefing-chinese.ts +4 -4
  317. package/lib/routes/nytimes/index.ts +16 -9
  318. package/lib/routes/nytimes/namespace.ts +1 -1
  319. package/lib/routes/obsidian/namespace.ts +6 -0
  320. package/lib/routes/obsidian/publish.ts +83 -0
  321. package/lib/routes/obsidian/utils.ts +8 -0
  322. package/lib/routes/oct0pu5/namespace.ts +10 -0
  323. package/lib/routes/oct0pu5/rss.ts +48 -0
  324. package/lib/routes/oncc/templates/article.art +1 -1
  325. package/lib/routes/papers/index.ts +7 -1
  326. package/lib/routes/parliament.uk/commonslibrary.ts +55 -0
  327. package/lib/routes/parliament.uk/lordslibrary.ts +55 -0
  328. package/lib/routes/parliament.uk/namespace.ts +6 -0
  329. package/lib/routes/pconline/focus.ts +143 -0
  330. package/lib/routes/pconline/namespace.ts +10 -0
  331. package/lib/routes/people/index.ts +6 -2
  332. package/lib/routes/picnob/user.ts +11 -3
  333. package/lib/routes/picuki/profile.ts +50 -39
  334. package/lib/routes/pixiv/ranking.ts +1 -0
  335. package/lib/routes/pixivision/index.ts +84 -0
  336. package/lib/routes/pixivision/namespace.ts +6 -0
  337. package/lib/routes/pixivision/utils.ts +86 -0
  338. package/lib/routes/pku/bbs/hot.ts +1 -1
  339. package/lib/routes/pornhub/category.ts +3 -2
  340. package/lib/routes/pornhub/model.ts +6 -7
  341. package/lib/routes/pornhub/pornstar.ts +67 -19
  342. package/lib/routes/pornhub/search.ts +3 -2
  343. package/lib/routes/pornhub/users.ts +3 -5
  344. package/lib/routes/qiche365/namespace.ts +5 -0
  345. package/lib/routes/qiche365/recall.ts +53 -0
  346. package/lib/routes/qidian/namespace.ts +1 -1
  347. package/lib/routes/questn/community.ts +76 -0
  348. package/lib/routes/questn/events.ts +101 -0
  349. package/lib/routes/questn/namespace.ts +6 -0
  350. package/lib/routes/questn/util.ts +16 -0
  351. package/lib/routes/rebase/geekdaily.ts +35 -0
  352. package/lib/routes/rebase/namespace.ts +6 -0
  353. package/lib/routes/resonac/namespace.ts +6 -0
  354. package/lib/routes/resonac/products.ts +85 -0
  355. package/lib/routes/reuters/common.ts +54 -1
  356. package/lib/routes/rss3/index.ts +22 -13
  357. package/lib/routes/rss3/interfaces/metadata.ts +67 -0
  358. package/lib/routes/rsshub/transform/html.ts +114 -75
  359. package/lib/routes/samd/news.ts +1 -1
  360. package/lib/routes/sciencenet/user.ts +3 -1
  361. package/lib/routes/scmp/utils.ts +2 -2
  362. package/lib/routes/scut/gzic/media.ts +71 -0
  363. package/lib/routes/scut/gzic/news.ts +65 -0
  364. package/lib/routes/scut/gzic/notice.ts +88 -0
  365. package/lib/routes/sdu/{cs.ts → cs/index.ts} +46 -12
  366. package/lib/routes/sdu/cs/yjsgz.ts +85 -0
  367. package/lib/routes/sdu/gjsw.ts +80 -0
  368. package/lib/routes/sdu/namespace.ts +2 -2
  369. package/lib/routes/sdu/qd/xszxqd.ts +98 -0
  370. package/lib/routes/sdu/qd/xyb.ts +82 -0
  371. package/lib/routes/sdu/ygb.ts +90 -0
  372. package/lib/routes/showstart/search.ts +33 -1
  373. package/lib/routes/sis001/author.ts +52 -0
  374. package/lib/routes/sis001/common.ts +38 -0
  375. package/lib/routes/sis001/forum.ts +2 -29
  376. package/lib/routes/sjtu/jwc.ts +4 -1
  377. package/lib/routes/sjtu/namespace.ts +1 -1
  378. package/lib/routes/sjtu/seiee/index.ts +97 -0
  379. package/lib/routes/skeb/following-creators.ts +52 -0
  380. package/lib/routes/skeb/following-works.ts +52 -0
  381. package/lib/routes/skeb/friend-works.ts +52 -0
  382. package/lib/routes/skeb/index.ts +131 -0
  383. package/lib/routes/skeb/namespace.ts +6 -0
  384. package/lib/routes/skeb/search.ts +77 -0
  385. package/lib/routes/skeb/templates/creator.art +8 -0
  386. package/lib/routes/skeb/templates/work.art +10 -0
  387. package/lib/routes/skeb/utils.ts +155 -0
  388. package/lib/routes/skeb/works.ts +88 -0
  389. package/lib/routes/skebetter/illust.ts +83 -0
  390. package/lib/routes/skebetter/index.ts +83 -0
  391. package/lib/routes/skebetter/manga.ts +65 -0
  392. package/lib/routes/skebetter/namespace.ts +6 -0
  393. package/lib/routes/skebetter/utils.ts +72 -0
  394. package/lib/routes/smzdm/product.ts +85 -0
  395. package/lib/routes/solidot/main.ts +28 -12
  396. package/lib/routes/soundon/namespace.ts +6 -0
  397. package/lib/routes/soundon/podcast.ts +80 -0
  398. package/lib/routes/soundon/types.ts +67 -0
  399. package/lib/routes/spankbang/namespace.ts +6 -0
  400. package/lib/routes/spankbang/new-videos.ts +90 -0
  401. package/lib/routes/spankbang/templates/video.art +7 -0
  402. package/lib/routes/sse/sselawsrules.ts +370 -0
  403. package/lib/routes/sspai/index.ts +2 -2
  404. package/lib/routes/straitstimes/index.ts +135 -0
  405. package/lib/routes/straitstimes/namespace.ts +7 -0
  406. package/lib/routes/straitstimes/templates/description.art +27 -0
  407. package/lib/routes/sustainabilitymag/articles.ts +2 -0
  408. package/lib/routes/sustainabilitymag/namespace.ts +1 -1
  409. package/lib/routes/swjtu/scai/bks.ts +76 -0
  410. package/lib/routes/szftedu/dongtai.ts +62 -0
  411. package/lib/routes/szftedu/gonggao.ts +62 -0
  412. package/lib/routes/szftedu/namespace.ts +6 -0
  413. package/lib/routes/szse/rule.ts +315 -42
  414. package/lib/routes/taoguba/blog.ts +1 -1
  415. package/lib/routes/taoguba/index.ts +1 -1
  416. package/lib/routes/telegram/blog.ts +3 -2
  417. package/lib/routes/telegram/channel.ts +34 -3
  418. package/lib/routes/telegram/stickerpack.ts +3 -2
  419. package/lib/routes/tencent/news/author.ts +2 -1
  420. package/lib/routes/test/index.ts +50 -43
  421. package/lib/routes/the/index.ts +8 -4
  422. package/lib/routes/theblockbeats/index.ts +10 -5
  423. package/lib/routes/theinitium/app.ts +137 -0
  424. package/lib/routes/theinitium/templates/description.art +17 -0
  425. package/lib/routes/threads/index.ts +26 -20
  426. package/lib/routes/tju/cic/index.ts +2 -2
  427. package/lib/routes/tju/news/index.ts +2 -2
  428. package/lib/routes/tju/oaa/index.ts +2 -2
  429. package/lib/routes/towardsdatascience/latest.ts +67 -0
  430. package/lib/routes/towardsdatascience/namespace.ts +6 -0
  431. package/lib/routes/ttv/index.ts +1 -1
  432. package/lib/routes/tvb/news.ts +2 -1
  433. package/lib/routes/twitch/live.ts +3 -2
  434. package/lib/routes/twitch/video.ts +15 -6
  435. package/lib/routes/twitter/api/index.ts +2 -0
  436. package/lib/routes/twitter/api/mobile-api/login.ts +6 -1
  437. package/lib/routes/twitter/api/web-api/api.ts +34 -10
  438. package/lib/routes/twitter/api/web-api/constants.ts +18 -15
  439. package/lib/routes/twitter/api/web-api/login.ts +75 -0
  440. package/lib/routes/twitter/api/web-api/utils.ts +147 -52
  441. package/lib/routes/twitter/home-latest.ts +60 -0
  442. package/lib/routes/twitter/list.ts +5 -2
  443. package/lib/routes/twitter/media.ts +13 -4
  444. package/lib/routes/twitter/tweet.ts +1 -0
  445. package/lib/routes/twitter/user.ts +15 -6
  446. package/lib/routes/uber/blog.ts +1 -1
  447. package/lib/routes/udn/breaking-news.ts +2 -2
  448. package/lib/routes/uestc/bbs.ts +97 -0
  449. package/lib/routes/uestc/gr.ts +65 -37
  450. package/lib/routes/uestc/jwc.ts +49 -28
  451. package/lib/routes/uestc/namespace.ts +1 -1
  452. package/lib/routes/ustc/scms.ts +97 -0
  453. package/lib/routes/v2ex/topics.ts +1 -0
  454. package/lib/routes/vimeo/category.ts +4 -3
  455. package/lib/routes/vimeo/usr-videos.ts +3 -2
  456. package/lib/routes/voronoiapp/author.ts +41 -0
  457. package/lib/routes/voronoiapp/common.ts +247 -0
  458. package/lib/routes/voronoiapp/editors-pick.ts +28 -0
  459. package/lib/routes/voronoiapp/home.ts +29 -0
  460. package/lib/routes/voronoiapp/latest.ts +28 -0
  461. package/lib/routes/voronoiapp/namespace.ts +6 -0
  462. package/lib/routes/voronoiapp/popular.ts +49 -0
  463. package/lib/routes/voronoiapp/search.ts +33 -0
  464. package/lib/routes/voronoiapp/types.d.ts +78 -0
  465. package/lib/routes/wchscu/namespace.ts +6 -0
  466. package/lib/routes/wchscu/recruit.ts +73 -0
  467. package/lib/routes/wechat/ershcimi.ts +4 -2
  468. package/lib/routes/weibo/namespace.ts +1 -0
  469. package/lib/routes/weibo/oasis/user.ts +1 -1
  470. package/lib/routes/weibo/super-index.ts +23 -11
  471. package/lib/routes/weibo/user.ts +22 -3
  472. package/lib/routes/weibo/utils.ts +0 -4
  473. package/lib/routes/whu/cs.ts +11 -3
  474. package/lib/routes/whu/gs/index.ts +2 -1
  475. package/lib/routes/whu/news.ts +27 -2
  476. package/lib/routes/withgoogle/explorables.ts +54 -0
  477. package/lib/routes/withgoogle/namespace.ts +6 -0
  478. package/lib/routes/xbookcn/blog.ts +66 -0
  479. package/lib/routes/xbookcn/namespace.ts +6 -0
  480. package/lib/routes/xiaohongshu/notes.ts +10 -2
  481. package/lib/routes/xiaohongshu/user.ts +30 -6
  482. package/lib/routes/xiaohongshu/util.ts +3 -1
  483. package/lib/routes/xiaoyuzhou/podcast.ts +35 -7
  484. package/lib/routes/xidian/cs.ts +143 -0
  485. package/lib/routes/xidian/gr.ts +289 -0
  486. package/lib/routes/xidian/jwc.ts +1 -0
  487. package/lib/routes/xidian/namespace.ts +1 -1
  488. package/lib/routes/xueqiu/cookies.ts +17 -2
  489. package/lib/routes/xueqiu/favorite.ts +16 -2
  490. package/lib/routes/xueqiu/stock-info.ts +6 -12
  491. package/lib/routes/yamap/articles.ts +62 -0
  492. package/lib/routes/yamap/namespace.ts +6 -0
  493. package/lib/routes/yande/namespace.ts +1 -1
  494. package/lib/routes/yande/post.ts +7 -7
  495. package/lib/routes/yicai/carousel.ts +48 -0
  496. package/lib/routes/yicai/utils.ts +23 -17
  497. package/lib/routes/yilinzazhi/index.ts +58 -0
  498. package/lib/routes/yilinzazhi/latest.ts +103 -0
  499. package/lib/routes/yilinzazhi/namespace.ts +8 -0
  500. package/lib/routes/youtube/playlist.ts +3 -2
  501. package/lib/routes/yystv/docs.ts +28 -19
  502. package/lib/routes/zaobao/util.ts +41 -43
  503. package/lib/routes/zhihu/activities.ts +2 -1
  504. package/lib/routes/zhihu/answers.ts +5 -1
  505. package/lib/routes/zhihu/execlib/x-zse-96-v3.ts +2 -0
  506. package/lib/routes/zhihu/timeline.ts +6 -1
  507. package/lib/routes/zhihu/utils.ts +15 -7
  508. package/lib/routes/zhihu/zhuanlan.ts +8 -7
  509. package/lib/routes/zsxq/types.ts +9 -0
  510. package/lib/routes/zsxq/utils.ts +4 -3
  511. package/lib/setup.test.ts +1 -1
  512. package/lib/types.ts +6 -0
  513. package/lib/utils/cache/redis.ts +1 -1
  514. package/lib/utils/camelcase-keys.spec.ts +127 -0
  515. package/lib/utils/camelcase-keys.ts +27 -0
  516. package/lib/utils/common-utils.ts +1 -0
  517. package/lib/utils/otel/metric.ts +3 -2
  518. package/lib/utils/request-rewriter/fetch.ts +1 -1
  519. package/lib/views/index.tsx +3 -6
  520. package/lib/views/json.ts +1 -1
  521. package/lib/views/rss.tsx +7 -0
  522. package/package.json +55 -55
  523. package/lib/routes/a9vg/a9vg.ts +0 -45
  524. package/lib/routes/sse/lawandrules.ts +0 -68
  525. package/lib/routes-deprecated/anime1/anime.js +0 -25
  526. package/lib/routes-deprecated/anime1/search.js +0 -25
  527. package/lib/routes-deprecated/dykszx/news.js +0 -60
  528. package/lib/routes-deprecated/gamersky/ent.js +0 -89
  529. package/lib/routes-deprecated/gamersky/news.js +0 -34
  530. package/lib/routes-deprecated/geekpark/breakingnews.js +0 -25
  531. package/lib/routes-deprecated/hko/weather.js +0 -44
  532. package/lib/routes-deprecated/konachan/post-popular-recent.js +0 -67
@@ -0,0 +1,247 @@
1
+ import { ViewType, type Data, type DataItem, type Route } from '@/types';
2
+ import { parseDate } from '@/utils/parse-date';
3
+ import { ofetch } from 'ofetch';
4
+ import type { Post } from './types';
5
+
6
+ export async function getPostItems(params: {
7
+ feed?: string;
8
+ search?: string;
9
+ swimlane?: string;
10
+ tab?: string;
11
+ time_range?: string;
12
+ category?: string;
13
+ order?: string;
14
+ author?: string;
15
+ limit?: number;
16
+ offset?: number;
17
+ }): Promise<DataItem[]> {
18
+ const baseUrl = 'https://9oyi4rk426.execute-api.ca-central-1.amazonaws.com/production/post';
19
+ const url = new URL(baseUrl);
20
+ const finalSearchParams = Object.assign(
21
+ {
22
+ limit: 20,
23
+ offset: 0,
24
+ },
25
+ params
26
+ );
27
+ if (finalSearchParams.time_range !== undefined) {
28
+ finalSearchParams.time_range = finalSearchParams.time_range.toUpperCase();
29
+ if (!TimeRangeParam.options.some((option) => option.value === finalSearchParams.time_range)) {
30
+ throw new Error(`Invalid time range: ${finalSearchParams.time_range}`);
31
+ }
32
+ // The Voronoi API doesn't support "ALL"
33
+ if (finalSearchParams.time_range === 'ALL') {
34
+ finalSearchParams.time_range = undefined;
35
+ }
36
+ }
37
+ if (finalSearchParams.category !== undefined && finalSearchParams.category !== null) {
38
+ const category = finalSearchParams.category;
39
+ finalSearchParams.category = CategoryParam.options.find((option) => option.value.toLowerCase() === category.toLowerCase())?.value;
40
+ if (finalSearchParams.category === undefined) {
41
+ throw new Error(`Invalid category: ${finalSearchParams.category}`);
42
+ }
43
+ }
44
+ if (finalSearchParams.tab !== undefined && finalSearchParams.tab !== null) {
45
+ finalSearchParams.tab = finalSearchParams.tab.toUpperCase();
46
+ if (!Object.values(TabMap).includes(finalSearchParams.tab)) {
47
+ throw new Error(`Invalid tab: ${finalSearchParams.tab}`);
48
+ }
49
+ }
50
+ for (const key in finalSearchParams) {
51
+ if (finalSearchParams[key] !== undefined && finalSearchParams[key] !== null) {
52
+ url.searchParams.set(key, finalSearchParams[key]);
53
+ }
54
+ }
55
+ const data = await ofetch<Post[]>(url.toString());
56
+ const items: DataItem[] = data.map((post) => ({
57
+ title: post.headline,
58
+ link: `https://www.voronoiapp.com/${post.category.split(' ').join('-').toLowerCase()}/${post.link}`,
59
+ pubDate: parseDate(post.published_at),
60
+ description: `<img src="https://cdn.voronoiapp.com/public/${post.webp_image}" />
61
+ ${post.description}`,
62
+ image: `https://cdn.voronoiapp.com/public/${post.webp_image}`,
63
+ author: post.author.first_name + ' ' + post.author.last_name,
64
+ updated: parseDate(post.updated_at),
65
+ category: [post.category],
66
+ enclosure_url: `https://cdn.voronoiapp.com/public/${post.dataset}`,
67
+ enclosure_type: 'text/csv',
68
+ enclosure_title: post.dataset,
69
+ upvotes: post.likes,
70
+ comments: post.commented,
71
+ }));
72
+
73
+ return items;
74
+ }
75
+
76
+ export const CategoryParam = {
77
+ description: 'The category of the post',
78
+ default: '',
79
+ options: [
80
+ {
81
+ value: '',
82
+ label: 'All categories',
83
+ },
84
+ {
85
+ value: 'Automotive',
86
+ label: 'Automotive Data Insights - Explore a range of automotive data visualizations showcasing trends, innovations, and market dynamics in the automotive industry.',
87
+ },
88
+ {
89
+ value: 'Business',
90
+ label: 'Business Visualization Trends - Discover business visualizations covering market analysis, corporate strategies, and economic impacts across global industries.',
91
+ },
92
+ {
93
+ value: 'Climate',
94
+ label: 'Climate Data Visualized - Delve into climate change data visualizations that detail weather patterns, environmental impacts, and sustainability efforts worldwide.',
95
+ },
96
+ {
97
+ value: 'Demographics',
98
+ label: 'Demographic Visual Insights - Explore visual demographics data showcasing population trends, societal changes, and demographic analytics across regions.',
99
+ },
100
+ {
101
+ value: 'Economy',
102
+ label: 'Economic Visualization Insights - View economic visualizations illustrating financial markets, economic policies, and global economic health.',
103
+ },
104
+ {
105
+ value: 'Energy',
106
+ label: 'Energy Industry Visual Data - Discover the dynamics of global energy consumption, renewable sources, and energy market trends through vivid visualizations.',
107
+ },
108
+ {
109
+ value: 'Entertainment',
110
+ label: 'Entertainment Industry Data - Explore data visualizations in the entertainment industry, covering everything from box office trends to streaming service analytics.',
111
+ },
112
+ {
113
+ value: 'Geopolitics',
114
+ label: 'Geopolitical Data Visualized - Understand global geopolitical shifts and international relations through comprehensive geopolitical data visualizations.',
115
+ },
116
+ {
117
+ value: 'Healthcare',
118
+ label: 'Healthcare Insights Visualized - Analyze healthcare data visualizations spanning disease trends, healthcare services, and public health policies.',
119
+ },
120
+ {
121
+ value: 'Innovation',
122
+ label: 'Innovation in Data - Dive into innovation data visualizations highlighting technology advancements, R&D investments, and patent trends.',
123
+ },
124
+ {
125
+ value: 'Maps',
126
+ label: 'Cartographic Visual Insights - Discover cartographic visualizations that map everything from socio-economic data to geographical phenomena.',
127
+ },
128
+ {
129
+ value: 'Markets',
130
+ label: 'Market Trends Visualized - Visualize market trends, financial data, and economic forecasts through comprehensive market visualizations.',
131
+ },
132
+ {
133
+ value: 'Money',
134
+ label: 'Financial Data Visualized - Dive into financial visualizations depicting currency trends, investment flows, and banking statistics.',
135
+ },
136
+ {
137
+ value: 'Natural Resources',
138
+ label: 'Natural Resources Data - Explore visualizations of natural resources, detailing extraction, consumption, and conservation data.',
139
+ },
140
+ {
141
+ value: 'Politics',
142
+ label: 'Political Visual Insights - Analyze political trends, election results, and legislative impacts through detailed political visualizations.',
143
+ },
144
+ {
145
+ value: 'Public Opinion',
146
+ label: 'Public Opinion Trends - Discover visualizations of public opinion polls, social trends, and cultural shifts across different regions.',
147
+ },
148
+ {
149
+ value: 'Real Estate',
150
+ label: 'Real Estate Market Insights - Explore real estate market trends, property values, and urban development through targeted data visualizations.',
151
+ },
152
+ {
153
+ value: 'Sports',
154
+ label: 'Sports Data Insights - Analyze sports data visualizations that showcase performance statistics, team rankings, and sports economics.',
155
+ },
156
+ {
157
+ value: 'Technology',
158
+ label: 'Technology Trends Visualized - Dive into technology visualizations highlighting industry trends, tech adoption rates, and innovation impacts.',
159
+ },
160
+ {
161
+ value: 'Wealth',
162
+ label: 'Wealth Distribution Insights - Explore wealth distribution, financial health, and economic disparities through detailed visualizations.',
163
+ },
164
+ {
165
+ value: 'Travel',
166
+ label: 'Travel Trends Visualized - Discover travel trends, tourism statistics, and destination analytics through engaging visualizations.',
167
+ },
168
+ {
169
+ value: 'Nature',
170
+ label: 'Nature and Conservation Data - Delve into visualizations of ecological data, wildlife statistics, and conservation efforts around the globe.',
171
+ },
172
+ {
173
+ value: 'Space',
174
+ label: 'Space Exploration Data - Explore the universe with space data visualizations covering planetary science, space missions, and astronomical discoveries.',
175
+ },
176
+ {
177
+ value: 'Diagram',
178
+ label: 'Diagrammatic Data Insights - Understand complex data through diagrams that simplify information across various topics and industries.',
179
+ },
180
+ {
181
+ value: 'Other',
182
+ label: "Diverse Data Visualizations - Explore a variety of data visualizations that don't neatly fit into any single category but offer unique insights.",
183
+ },
184
+ ],
185
+ };
186
+
187
+ export const TimeRangeParam = {
188
+ description: 'Time range between which the posts are popular.',
189
+ default: 'MONTH',
190
+ options: [
191
+ {
192
+ value: 'WEEK',
193
+ label: 'Last 7 days',
194
+ },
195
+ {
196
+ value: 'MONTH',
197
+ label: 'Last 30 days',
198
+ },
199
+ {
200
+ value: 'YEAR',
201
+ label: 'Last 12 months',
202
+ },
203
+ {
204
+ value: 'ALL',
205
+ label: 'All time',
206
+ },
207
+ ],
208
+ };
209
+
210
+ export const TabMap = {
211
+ 'most-popular': 'POPULAR',
212
+ 'most-discussed': 'DISCUSSED',
213
+ 'most-viewed': 'VIEWED',
214
+ };
215
+
216
+ export const TabParam = {
217
+ description: 'The tab to get the popular posts from.',
218
+ default: 'most-popular',
219
+ options: [
220
+ {
221
+ value: 'most-popular',
222
+ label: 'Most Liked',
223
+ },
224
+ {
225
+ value: 'most-discussed',
226
+ label: 'Most Discussed',
227
+ },
228
+ {
229
+ value: 'most-viewed',
230
+ label: 'Most Viewed',
231
+ },
232
+ ],
233
+ };
234
+
235
+ export const CommonRouteProperties: Pick<Route, 'url' | 'categories' | 'maintainers' | 'view'> = {
236
+ url: 'voronoiapp.com',
237
+ categories: ['picture'],
238
+ view: ViewType.Pictures,
239
+ maintainers: ['Cesaryuan'],
240
+ };
241
+
242
+ export const CommonDataProperties: Pick<Data, 'allowEmpty' | 'image'> | { logo: string; icon: string } = {
243
+ logo: 'https://about.voronoiapp.com/wp-content/uploads/2023/07/voronoi-icon.png',
244
+ image: 'https://about.voronoiapp.com/wp-content/uploads/2023/07/voronoi-icon.png',
245
+ icon: 'https://about.voronoiapp.com/wp-content/uploads/2023/07/voronoi-icon.png',
246
+ allowEmpty: true,
247
+ };
@@ -0,0 +1,28 @@
1
+ import type { Data, Route } from '@/types';
2
+ import { getPostItems, CategoryParam, CommonRouteProperties, CommonDataProperties } from './common';
3
+
4
+ export const route: Route = {
5
+ ...CommonRouteProperties,
6
+ name: "Editor's Pick Posts",
7
+ path: '/editors-pick/:category?',
8
+ radar: [
9
+ {
10
+ source: ['www.voronoiapp.com/posts/editors-pick'],
11
+ target: '/editors-pick',
12
+ },
13
+ ],
14
+ example: '/voronoiapp/editors-pick',
15
+ parameters: {
16
+ category: CategoryParam,
17
+ },
18
+ handler: async (ctx) => {
19
+ const { category = '' } = ctx.req.param();
20
+ const items = await getPostItems({ swimlane: 'CURATED', category: category === '' ? undefined : category });
21
+ return {
22
+ ...CommonDataProperties,
23
+ title: `Voronoi Editor's Pick Posts${category ? ` - ${category}` : ''}`,
24
+ link: 'https://www.voronoiapp.com/editors-pick',
25
+ item: items,
26
+ } as Data;
27
+ },
28
+ };
@@ -0,0 +1,29 @@
1
+ import type { Data, Route } from '@/types';
2
+ import { getPostItems, CategoryParam, CommonRouteProperties, CommonDataProperties } from './common';
3
+
4
+ export const route: Route = {
5
+ ...CommonRouteProperties,
6
+ name: 'Home Posts',
7
+ path: '/home/:category?',
8
+ description: 'This is the home page of Voronoi App',
9
+ radar: [
10
+ {
11
+ source: ['www.voronoiapp.com', 'www.voronoiapp.com/posts/voronoi'],
12
+ target: '/home',
13
+ },
14
+ ],
15
+ example: '/voronoiapp/home',
16
+ parameters: {
17
+ category: CategoryParam,
18
+ },
19
+ handler: async (ctx) => {
20
+ const { category = '' } = ctx.req.param();
21
+ const items = await getPostItems({ feed: 'VORONOI', category: category === '' ? undefined : category });
22
+ return {
23
+ ...CommonDataProperties,
24
+ title: `Voronoi Home Posts${category ? ` - ${category}` : ''}`,
25
+ link: 'https://www.voronoiapp.com',
26
+ item: items,
27
+ } as Data;
28
+ },
29
+ };
@@ -0,0 +1,28 @@
1
+ import type { Data, Route } from '@/types';
2
+ import { getPostItems, CategoryParam, CommonRouteProperties, CommonDataProperties } from './common';
3
+
4
+ export const route: Route = {
5
+ ...CommonRouteProperties,
6
+ name: 'Latest Posts',
7
+ path: '/latest/:category?',
8
+ radar: [
9
+ {
10
+ source: ['www.voronoiapp.com/posts/latest'],
11
+ target: '/latest',
12
+ },
13
+ ],
14
+ example: '/voronoiapp/latest',
15
+ parameters: {
16
+ category: CategoryParam,
17
+ },
18
+ handler: async (ctx) => {
19
+ const { category = '' } = ctx.req.param();
20
+ const items = await getPostItems({ swimlane: 'LATEST', category: category === '' ? undefined : category });
21
+ return {
22
+ ...CommonDataProperties,
23
+ title: `Voronoi Latest Posts${category ? ` - ${category}` : ''}`,
24
+ link: 'https://www.voronoiapp.com/latest',
25
+ item: items,
26
+ } as Data;
27
+ },
28
+ };
@@ -0,0 +1,6 @@
1
+ import type { Namespace } from '@/types';
2
+
3
+ export const namespace: Namespace = {
4
+ name: 'Voronoi',
5
+ url: 'voronoiapp.com',
6
+ };
@@ -0,0 +1,49 @@
1
+ import type { Data, Route } from '@/types';
2
+ import { CategoryParam, CommonDataProperties, CommonRouteProperties, getPostItems, TabMap, TabParam, TimeRangeParam } from './common';
3
+
4
+ export const route: Route = {
5
+ ...CommonRouteProperties,
6
+ name: 'Popular Posts',
7
+ path: '/popular/:tab?/:time_range?/:category?',
8
+ radar: [
9
+ {
10
+ title: 'Most Liked Posts',
11
+ source: ['www.voronoiapp.com/posts/most-popular'],
12
+ target: '/popular/most-popular',
13
+ },
14
+ {
15
+ title: 'Most Discussed Posts',
16
+ source: ['www.voronoiapp.com/posts/most-discussed'],
17
+ target: '/popular/most-discussed',
18
+ },
19
+ {
20
+ title: 'Most Viewed Posts',
21
+ source: ['www.voronoiapp.com/posts/most-viewed'],
22
+ target: '/popular/most-viewed',
23
+ },
24
+ ],
25
+ parameters: {
26
+ tab: TabParam,
27
+ time_range: TimeRangeParam,
28
+ category: CategoryParam,
29
+ },
30
+ example: '/voronoiapp/popular/most-popular/MONTH',
31
+ handler: async (ctx) => {
32
+ const { tab = 'most-popular', time_range = 'MONTH', category = '' } = ctx.req.param();
33
+ if (!TabMap[tab.toLowerCase()]) {
34
+ throw new Error(`Invalid tab: ${tab}`);
35
+ }
36
+ const items = await getPostItems({
37
+ swimlane: 'POPULAR',
38
+ tab: TabMap[tab.toLowerCase()],
39
+ time_range: time_range === '' ? undefined : time_range.toUpperCase(),
40
+ category: category === '' ? undefined : category,
41
+ });
42
+ return {
43
+ ...CommonDataProperties,
44
+ title: `Voronoi ${TabParam.options.find((option) => option.value === tab.toLowerCase())?.label} Posts in ${TimeRangeParam.options.find((option) => option.value === time_range.toUpperCase())?.label}${category ? ` - ${category}` : ''}`,
45
+ link: `https://www.voronoiapp.com/posts/${tab}`,
46
+ item: items,
47
+ } as Data;
48
+ },
49
+ };
@@ -0,0 +1,33 @@
1
+ import type { Data, Route } from '@/types';
2
+ import { CommonDataProperties, CommonRouteProperties, getPostItems } from './common';
3
+
4
+ export const route: Route = {
5
+ ...CommonRouteProperties,
6
+ name: 'Search Keyword Posts',
7
+ path: '/search/:keyword',
8
+ radar: [
9
+ {
10
+ source: ['www.voronoiapp.com/explore'],
11
+ // 新版本中貌似不再支持 function 形式的 target
12
+ target: (_, url) => {
13
+ const parsedURL = new URL(url);
14
+ const keyword = parsedURL.searchParams.get('search');
15
+ return `/voronoiapp/search/${keyword}`;
16
+ },
17
+ },
18
+ ],
19
+ example: '/voronoiapp/search/china',
20
+ parameters: {
21
+ keyword: 'The keyword to search for',
22
+ },
23
+ handler: async (ctx) => {
24
+ const { keyword } = ctx.req.param();
25
+ const items = await getPostItems({ search: keyword });
26
+ return {
27
+ ...CommonDataProperties,
28
+ title: `Voronoi Posts for "${keyword}"`,
29
+ link: `https://www.voronoiapp.com/explore?search=${encodeURIComponent(keyword)}`,
30
+ item: items,
31
+ } as Data;
32
+ },
33
+ };
@@ -0,0 +1,78 @@
1
+ export interface Social {
2
+ website?: string;
3
+ x?: string;
4
+ linkedin?: string;
5
+ instagram?: string;
6
+ }
7
+
8
+ export interface Author {
9
+ first_name: string;
10
+ last_name: string;
11
+ preferred_username: string;
12
+ web_site: string;
13
+ email: string;
14
+ picture: string;
15
+ bio: string;
16
+ sub: string;
17
+ groups: string;
18
+ badge?: string;
19
+ rcv_mail: boolean;
20
+ rcv_push: boolean;
21
+ key?: string;
22
+ bookmarks?: string;
23
+ following?: string;
24
+ followers: number;
25
+ posts: number;
26
+ views: number;
27
+ wviews: number;
28
+ eviews: number;
29
+ imps: number;
30
+ wimps: number;
31
+ eimps: number;
32
+ social: Social;
33
+ }
34
+
35
+ export interface Post {
36
+ pid: number;
37
+ uid: string;
38
+ completed: number;
39
+ step: number;
40
+ status: string;
41
+ curated: boolean;
42
+ headline: string;
43
+ link: string;
44
+ image: string;
45
+ webp_image: string;
46
+ preview_image: string;
47
+ cropper_data: string;
48
+ description: string;
49
+ category: string;
50
+ tags: string[];
51
+ feeds?: string[];
52
+ dataset: string;
53
+ dataset_settings: string;
54
+ sources: string[];
55
+ note: string;
56
+ comments: number;
57
+ views: number;
58
+ wviews: number;
59
+ eviews: number;
60
+ imps: number;
61
+ wimps: number;
62
+ eimps: number;
63
+ commented: number;
64
+ shares: number;
65
+ bookmarks: number;
66
+ likes: number;
67
+ cools: number;
68
+ loves: number;
69
+ debatables: number;
70
+ insightfuls: number;
71
+ created_at: number;
72
+ updated_at: number;
73
+ author: Author;
74
+ subscribe_vc: boolean;
75
+ sponsored: boolean;
76
+ pinned: boolean;
77
+ published_at: number;
78
+ }
@@ -0,0 +1,6 @@
1
+ import type { Namespace } from '@/types';
2
+
3
+ export const namespace: Namespace = {
4
+ name: '华西医院',
5
+ url: 'www.wchscu.cn',
6
+ };
@@ -0,0 +1,73 @@
1
+ import { Route } from '@/types';
2
+
3
+ import got from '@/utils/got';
4
+ import { load } from 'cheerio';
5
+ import { parseDate } from '@/utils/parse-date';
6
+ import cache from '@/utils/cache';
7
+
8
+ const handler = async () => {
9
+ const rootUrl = 'https:///www.wchscu.cn';
10
+ const currentUrl = 'https://www.wchscu.cn/public/notice/recruit';
11
+ const { data: response } = await got(currentUrl);
12
+
13
+ const $ = load(response);
14
+ const list = $('div#datalist div.list div.item')
15
+ .toArray()
16
+ .map((item) => {
17
+ item = $(item);
18
+ return {
19
+ title: item.find('span.s1').text(),
20
+ pubDate: parseDate(item.find('span.s2').text()),
21
+ link: new URL(item.find('a').prop('href'), rootUrl).href,
22
+ };
23
+ });
24
+
25
+ const items = await Promise.all(
26
+ list.map((item) =>
27
+ cache.tryGet(item.link, async () => {
28
+ const { data: response } = await got(item.link);
29
+ const $ = load(response);
30
+ const newLocal = $('div.xxy3 .content');
31
+ // 选择类名为“comment-body”的第一个元素
32
+ item.description = newLocal.html();
33
+
34
+ // 上面每个列表项的每个属性都在此重用,
35
+ // 并增加了一个新属性“description”
36
+ return item;
37
+ })
38
+ )
39
+ );
40
+
41
+ return {
42
+ title: $('title').text(),
43
+ link: currentUrl,
44
+ item: items,
45
+ allowEmpty: true,
46
+ };
47
+ };
48
+
49
+ export const route: Route = {
50
+ name: '招聘公告',
51
+ path: '/recruit',
52
+ example: '/wchscu/recruit',
53
+ url: 'www.wchscu.cn',
54
+ maintainers: ['ViggoC'],
55
+ categories: ['other'],
56
+
57
+ features: {
58
+ requireConfig: false,
59
+ requirePuppeteer: false,
60
+ antiCrawler: false,
61
+ supportRadar: true,
62
+ supportBT: false,
63
+ supportPodcast: false,
64
+ supportScihub: false,
65
+ },
66
+
67
+ radar: [
68
+ {
69
+ source: ['www.wchscu.cn/public/notice/recruit'],
70
+ },
71
+ ],
72
+ handler,
73
+ };
@@ -41,12 +41,14 @@ async function handler(ctx) {
41
41
  pubDate: timezone(parseDate($item('.weui_media_extra_info').attr('title')), +8),
42
42
  };
43
43
  })
44
- .get();
44
+ .toArray();
45
45
 
46
46
  return {
47
47
  title: `微信公众号 - ${$('span.name').text()}`,
48
48
  link: url,
49
49
  description: $('div.Profile-sideColumnItemValue').text(),
50
- item: await Promise.all(items.map((item) => finishArticleItem(item).catch(() => item))),
50
+ item: await Promise.all(items.map((item) => finishArticleItem(item))).catch((error) => {
51
+ throw error;
52
+ }),
51
53
  };
52
54
  }
@@ -30,6 +30,7 @@ export const namespace: Namespace = {
30
30
  | showEmojiInDescription | 是否展示正文中的微博表情,关闭则替换为 \`[表情名]\` | 0/1/true/false | true |
31
31
  | showLinkIconInDescription | 是否展示正文中的链接图标 | 0/1/true/false | true |
32
32
  | preferMobileLink | 是否使用移动版链接(默认使用 PC 版) | 0/1/true/false | false |
33
+ | showRetweeted | 是否显示转发的微博 | 0/1/true/false | true |
33
34
 
34
35
  指定更多与默认值不同的参数选项可以改善 RSS 的可读性,如
35
36
 
@@ -21,7 +21,7 @@ export const route: Route = {
21
21
  target: '/user/:uid',
22
22
  },
23
23
  ],
24
- name: '用户',
24
+ name: '绿洲用户',
25
25
  maintainers: ['kt286'],
26
26
  handler,
27
27
  };