rsshub 1.0.0-master.f97cdb2 → 1.0.0-master.fa3428f

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 (237) hide show
  1. package/README.md +1 -1
  2. package/lib/config.js +3 -1
  3. package/lib/radar-rules.js +0 -92
  4. package/lib/router.js +68 -71
  5. package/lib/routes/tencent/wechat/miniprogram/framework.js +4 -2
  6. package/lib/utils/common-config.js +4 -0
  7. package/lib/utils/parse-date.js +8 -7
  8. package/lib/utils/rand-user-agent.js +29 -0
  9. package/lib/utils/request-wrapper.js +2 -5
  10. package/lib/utils/wechat-mp.js +106 -10
  11. package/lib/v2/agirls/index.js +6 -0
  12. package/lib/v2/bilibili/video.js +1 -0
  13. package/lib/v2/bookfere/category.js +36 -0
  14. package/lib/v2/bookfere/maintainer.js +3 -0
  15. package/lib/v2/bookfere/radar.js +11 -0
  16. package/lib/v2/bookfere/router.js +3 -0
  17. package/lib/v2/cankaoxiaoxi/index.js +81 -0
  18. package/lib/v2/cankaoxiaoxi/maintainer.js +3 -0
  19. package/lib/v2/cankaoxiaoxi/radar.js +61 -0
  20. package/lib/v2/cankaoxiaoxi/router.js +3 -0
  21. package/lib/{routes → v2}/cctv/category.js +1 -1
  22. package/lib/{routes → v2}/cctv/jx.js +6 -1
  23. package/lib/{routes → v2}/cctv/lm.js +1 -1
  24. package/lib/v2/cctv/maintainer.js +7 -0
  25. package/lib/v2/cctv/radar.js +41 -0
  26. package/lib/v2/cctv/router.js +7 -0
  27. package/lib/{routes → v2}/cctv/special.js +6 -4
  28. package/lib/{routes → v2}/cctv/utils/mzzlbg.js +8 -6
  29. package/lib/{routes → v2}/cctv/utils/news.js +25 -22
  30. package/lib/{routes → v2}/cctv/utils/xinwen1j1.js +20 -17
  31. package/lib/v2/cctv/xwlb.js +50 -0
  32. package/lib/v2/chinacef/experts.js +38 -0
  33. package/lib/v2/chinacef/hot.js +38 -0
  34. package/lib/v2/chinacef/index.js +39 -0
  35. package/lib/v2/chinacef/maintainer.js +5 -0
  36. package/lib/v2/chinacef/radar.js +25 -0
  37. package/lib/v2/chinacef/router.js +5 -0
  38. package/lib/v2/{wechat → chinacef}/templates/description.art +0 -0
  39. package/lib/v2/chinacef/utils.js +55 -0
  40. package/lib/v2/chinanews/index.js +65 -0
  41. package/lib/v2/chinanews/maintainer.js +3 -0
  42. package/lib/v2/chinanews/radar.js +13 -0
  43. package/lib/v2/chinanews/router.js +3 -0
  44. package/lib/v2/cnbeta/index.js +2 -1
  45. package/lib/v2/cnbeta/utils.js +1 -0
  46. package/lib/v2/dapenti/maintainer.js +4 -0
  47. package/lib/v2/dapenti/radar.js +27 -0
  48. package/lib/v2/dapenti/router.js +4 -0
  49. package/lib/{routes → v2}/dapenti/subject.js +1 -1
  50. package/lib/{routes → v2}/dapenti/tugua.js +1 -1
  51. package/lib/v2/dapenti/utils.js +75 -0
  52. package/lib/{routes → v2}/dongqiudi/daily.js +10 -13
  53. package/lib/v2/dongqiudi/maintainer.js +8 -0
  54. package/lib/{routes → v2}/dongqiudi/player_news.js +0 -0
  55. package/lib/v2/dongqiudi/radar.js +45 -0
  56. package/lib/{routes → v2}/dongqiudi/result.js +2 -1
  57. package/lib/v2/dongqiudi/router.js +8 -0
  58. package/lib/{routes → v2}/dongqiudi/special.js +0 -0
  59. package/lib/{routes → v2}/dongqiudi/team_news.js +0 -0
  60. package/lib/{routes → v2}/dongqiudi/top_news.js +12 -15
  61. package/lib/{routes → v2}/dongqiudi/utils.js +47 -28
  62. package/lib/v2/dut/defaults.js +53 -0
  63. package/lib/v2/dut/index.js +78 -0
  64. package/lib/v2/dut/maintainer.js +14 -0
  65. package/lib/v2/dut/radar.js +109 -0
  66. package/lib/v2/dut/router.js +4 -0
  67. package/lib/v2/dut/shortcuts.js +77 -0
  68. package/lib/{routes → v2}/dx2025/index.js +0 -0
  69. package/lib/v2/dx2025/maintainer.js +3 -0
  70. package/lib/v2/dx2025/radar.js +19 -0
  71. package/lib/v2/dx2025/router.js +3 -0
  72. package/lib/v2/e-hentai/radar.js +21 -3
  73. package/lib/v2/eagle/blog.js +47 -0
  74. package/lib/{routes → v2}/eagle/changelog.js +3 -1
  75. package/lib/v2/eagle/maintainer.js +4 -0
  76. package/lib/v2/eagle/radar.js +101 -0
  77. package/lib/v2/eagle/router.js +4 -0
  78. package/lib/{routes → v2}/ehentai/ehapi.js +50 -21
  79. package/lib/{routes → v2}/ehentai/favorites.js +4 -2
  80. package/lib/v2/ehentai/maintainer.js +5 -0
  81. package/lib/v2/ehentai/router.js +5 -0
  82. package/lib/{routes → v2}/ehentai/search.js +5 -3
  83. package/lib/{routes → v2}/ehentai/tag.js +4 -2
  84. package/lib/v2/firefox/index.js +7 -2
  85. package/lib/v2/fortunechina/index.js +1 -1
  86. package/lib/v2/github/comments.js +7 -0
  87. package/lib/v2/gitpod/blog.js +8 -0
  88. package/lib/v2/gov/maintainer.js +1 -0
  89. package/lib/v2/gov/nrta/news.js +63 -0
  90. package/lib/v2/gov/radar.js +11 -0
  91. package/lib/v2/gov/router.js +1 -0
  92. package/lib/v2/guancha/index.js +1 -1
  93. package/lib/v2/guangdiu/cheaps.js +28 -0
  94. package/lib/v2/guangdiu/index.js +44 -0
  95. package/lib/v2/guangdiu/maintainer.js +5 -0
  96. package/lib/v2/guangdiu/radar.js +25 -0
  97. package/lib/v2/guangdiu/rank.js +38 -0
  98. package/lib/v2/guangdiu/router.js +5 -0
  99. package/lib/{routes/guokr/calendar.js → v2/guokr/channel.js} +2 -2
  100. package/lib/v2/guokr/maintainer.js +4 -0
  101. package/lib/v2/guokr/radar.js +19 -0
  102. package/lib/v2/guokr/router.js +4 -0
  103. package/lib/{routes → v2}/guokr/scientific.js +3 -3
  104. package/lib/v2/hkej/index.js +9 -15
  105. package/lib/v2/hkepc/index.js +8 -0
  106. package/lib/v2/hket/index.js +10 -2
  107. package/lib/v2/huangz/index.js +29 -0
  108. package/lib/v2/huangz/maintainer.js +3 -0
  109. package/lib/v2/huangz/radar.js +13 -0
  110. package/lib/v2/huangz/router.js +3 -0
  111. package/lib/v2/huanqiu/index.js +65 -0
  112. package/lib/v2/huanqiu/maintainer.js +3 -0
  113. package/lib/v2/huanqiu/radar.js +13 -0
  114. package/lib/v2/huanqiu/router.js +3 -0
  115. package/lib/v2/miris/blog.js +19 -0
  116. package/lib/v2/miris/maintainer.js +3 -0
  117. package/lib/v2/miris/radar.js +11 -0
  118. package/lib/v2/miris/router.js +3 -0
  119. package/lib/v2/news/whxw.js +2 -2
  120. package/lib/v2/npm/package.js +1 -1
  121. package/lib/v2/npm/router.js +1 -1
  122. package/lib/v2/qbittorrent/maintainer.js +3 -0
  123. package/lib/v2/qbittorrent/news.js +59 -0
  124. package/lib/v2/qbittorrent/radar.js +13 -0
  125. package/lib/v2/qbittorrent/router.js +3 -0
  126. package/lib/v2/rsshub/sponsors.js +1 -0
  127. package/lib/{routes → v2}/sciencenet/blog.js +17 -12
  128. package/lib/v2/sciencenet/maintainer.js +4 -0
  129. package/lib/v2/sciencenet/radar.js +19 -0
  130. package/lib/v2/sciencenet/router.js +4 -0
  131. package/lib/v2/sciencenet/user.js +65 -0
  132. package/lib/v2/sdu/cmse.js +59 -0
  133. package/lib/v2/sdu/cs.js +57 -0
  134. package/lib/v2/sdu/data.js +110 -0
  135. package/lib/v2/sdu/epe.js +55 -0
  136. package/lib/v2/sdu/extractor/index.js +15 -0
  137. package/lib/v2/sdu/extractor/sdrj.js +21 -0
  138. package/lib/v2/sdu/extractor/view.js +21 -0
  139. package/lib/v2/sdu/extractor/wh/jwc.js +24 -0
  140. package/lib/v2/sdu/extractor/wh/news.js +21 -0
  141. package/lib/v2/sdu/maintainer.js +9 -0
  142. package/lib/v2/sdu/mech.js +60 -0
  143. package/lib/v2/sdu/radar.js +159 -0
  144. package/lib/v2/sdu/router.js +9 -0
  145. package/lib/v2/sdu/sc.js +61 -0
  146. package/lib/v2/sdu/wh/jwc.js +42 -0
  147. package/lib/v2/sdu/wh/news.js +38 -0
  148. package/lib/v2/stratechery/index.js +20 -0
  149. package/lib/v2/stratechery/maintainer.js +3 -0
  150. package/lib/v2/stratechery/radar.js +11 -0
  151. package/lib/v2/stratechery/router.js +3 -0
  152. package/lib/{routes → v2}/taptap/changelog.js +2 -1
  153. package/lib/v2/taptap/maintainer.js +5 -0
  154. package/lib/v2/taptap/radar.js +25 -0
  155. package/lib/v2/taptap/review.js +69 -0
  156. package/lib/v2/taptap/router.js +5 -0
  157. package/lib/v2/taptap/templates/videoPost.art +2 -0
  158. package/lib/v2/taptap/topic.js +79 -0
  159. package/lib/v2/taptap/utils.js +48 -0
  160. package/lib/v2/thecover/channel.js +66 -0
  161. package/lib/v2/thecover/maintainer.js +3 -0
  162. package/lib/v2/thecover/radar.js +13 -0
  163. package/lib/v2/thecover/router.js +3 -0
  164. package/lib/{routes → v2}/twreporter/category.js +7 -12
  165. package/lib/{routes → v2}/twreporter/fetch_article.js +5 -4
  166. package/lib/v2/twreporter/maintainer.js +5 -0
  167. package/lib/{routes → v2}/twreporter/newest.js +8 -13
  168. package/lib/v2/twreporter/photography.js +46 -0
  169. package/lib/v2/twreporter/radar.js +25 -0
  170. package/lib/v2/twreporter/router.js +5 -0
  171. package/lib/{routes/tencent → v2}/wechat/announce.js +3 -2
  172. package/lib/v2/wechat/ce.js +69 -0
  173. package/lib/v2/wechat/data258.js +137 -0
  174. package/lib/v2/wechat/ershcimi.js +35 -0
  175. package/lib/{routes/tencent → v2}/wechat/feeds.js +0 -0
  176. package/lib/v2/wechat/maintainer.js +11 -0
  177. package/lib/{routes/tencent → v2}/wechat/mp.js +0 -0
  178. package/lib/{routes/tencent → v2}/wechat/msgalbum.js +0 -0
  179. package/lib/v2/wechat/radar.js +76 -1
  180. package/lib/v2/wechat/router.js +11 -0
  181. package/lib/{routes/tencent → v2}/wechat/tgchannel.js +0 -0
  182. package/lib/{routes/tencent → v2}/wechat/uread.js +0 -0
  183. package/lib/{routes/tencent → v2}/wechat/wemp.js +0 -0
  184. package/lib/{routes/tencent → v2}/wechat/wxnmh.js +0 -0
  185. package/lib/{routes → v2}/xueqiu/favorite.js +2 -1
  186. package/lib/v2/xueqiu/fund.js +50 -0
  187. package/lib/{routes → v2}/xueqiu/hots.js +2 -1
  188. package/lib/v2/xueqiu/maintainer.js +10 -0
  189. package/lib/v2/xueqiu/radar.js +60 -0
  190. package/lib/v2/xueqiu/router.js +10 -0
  191. package/lib/{routes → v2}/xueqiu/snb.js +2 -1
  192. package/lib/{routes → v2}/xueqiu/stock_comments.js +4 -20
  193. package/lib/{routes → v2}/xueqiu/stock_info.js +2 -1
  194. package/lib/v2/xueqiu/templates/comments_description.art +10 -0
  195. package/lib/{routes → v2}/xueqiu/user.js +2 -1
  196. package/lib/{routes → v2}/xueqiu/user_stock.js +3 -2
  197. package/lib/v2/yunspe/maintainer.js +3 -0
  198. package/lib/v2/yunspe/newsflash.js +42 -0
  199. package/lib/v2/yunspe/radar.js +13 -0
  200. package/lib/v2/yunspe/router.js +3 -0
  201. package/lib/{routes → v2}/yystv/category.js +8 -8
  202. package/lib/{routes → v2}/yystv/docs.js +2 -2
  203. package/lib/v2/yystv/maintainer.js +4 -0
  204. package/lib/v2/yystv/radar.js +49 -0
  205. package/lib/v2/yystv/router.js +4 -0
  206. package/lib/{routes/universities → v2}/zju/career/index.js +14 -13
  207. package/lib/{routes/universities → v2}/zju/cst/custom.js +2 -1
  208. package/lib/{routes/universities → v2}/zju/cst/index.js +20 -24
  209. package/lib/v2/zju/grs/index.js +43 -0
  210. package/lib/v2/zju/list.js +66 -0
  211. package/lib/v2/zju/maintainer.js +8 -0
  212. package/lib/v2/zju/physics/index.js +52 -0
  213. package/lib/v2/zju/radar.js +139 -0
  214. package/lib/v2/zju/router.js +8 -0
  215. package/lib/views/atom.art +13 -1
  216. package/lib/views/welcome.art +4 -1
  217. package/package.json +13 -12
  218. package/lib/routes/cctv/xwlb.js +0 -48
  219. package/lib/routes/dapenti/utils.js +0 -73
  220. package/lib/routes/taptap/review.js +0 -39
  221. package/lib/routes/taptap/topic.js +0 -85
  222. package/lib/routes/tencent/wechat/_README +0 -1
  223. package/lib/routes/tencent/wechat/ce.js +0 -40
  224. package/lib/routes/tencent/wechat/ershcimi.js +0 -43
  225. package/lib/routes/twreporter/photography.js +0 -57
  226. package/lib/routes/universities/dut/index.js +0 -60
  227. package/lib/routes/universities/dut/subsite.js +0 -50
  228. package/lib/routes/universities/sdu/cmse.js +0 -55
  229. package/lib/routes/universities/sdu/cs.js +0 -55
  230. package/lib/routes/universities/sdu/epe.js +0 -54
  231. package/lib/routes/universities/sdu/mech.js +0 -58
  232. package/lib/routes/universities/sdu/sc.js +0 -56
  233. package/lib/routes/universities/zju/grs/index.js +0 -44
  234. package/lib/routes/universities/zju/list.js +0 -78
  235. package/lib/routes/universities/zju/physics/index.js +0 -55
  236. package/lib/routes/xueqiu/fund.js +0 -71
  237. package/lib/v2/wechat/templates/image.art +0 -1
@@ -1,5 +1,6 @@
1
1
  const got = require('@/utils/got');
2
2
  const cheerio = require('cheerio');
3
+ const { parseDate } = require('@/utils/parse-date');
3
4
 
4
5
  const host = 'http://www.cst.zju.edu.cn/';
5
6
 
@@ -33,7 +34,7 @@ async function getPage(id) {
33
34
  item = $(item);
34
35
  return {
35
36
  title: item.find('a').text(),
36
- pubDate: new Date(item.find('.fr').text()).toUTCString(),
37
+ pubDate: parseDate(item.find('.fr').text()),
37
38
  link: item.find('a').attr('href'),
38
39
  };
39
40
  })
@@ -42,7 +43,7 @@ async function getPage(id) {
42
43
  }
43
44
 
44
45
  module.exports = async (ctx) => {
45
- const type = Number.parseInt(ctx.params.type);
46
+ const type = parseInt(ctx.params.type);
46
47
  const link = host + map.get(type).id;
47
48
  let items = [];
48
49
  if (type === 0) {
@@ -59,30 +60,25 @@ module.exports = async (ctx) => {
59
60
  }
60
61
 
61
62
  const out = await Promise.all(
62
- items.map(async (item) => {
63
+ items.map((item) => {
63
64
  const itemUrl = host + item.link;
64
- const cache = await ctx.cache.get(itemUrl);
65
- if (cache) {
66
- return Promise.resolve(JSON.parse(cache));
67
- }
68
-
69
- const response = await got({
70
- method: 'get',
71
- url: itemUrl,
72
- headers: {
73
- Referer: link,
74
- },
65
+ return ctx.cache.tryGet(itemUrl, async () => {
66
+ const response = await got({
67
+ method: 'get',
68
+ url: itemUrl,
69
+ headers: {
70
+ Referer: link,
71
+ },
72
+ });
73
+ const $ = cheerio.load(response.data);
74
+ const description = $('.vid_wz').html();
75
+ return {
76
+ title: item.title,
77
+ link: itemUrl,
78
+ description,
79
+ pubDate: item.pubDate,
80
+ };
75
81
  });
76
- const $ = cheerio.load(response.data);
77
- const description = $('.vid_wz').html();
78
- const single = {
79
- title: item.title,
80
- link: itemUrl,
81
- description,
82
- pubDate: item.pubDate,
83
- };
84
- ctx.cache.set(itemUrl, JSON.stringify(single));
85
- return Promise.resolve(single);
86
82
  })
87
83
  );
88
84
 
@@ -0,0 +1,43 @@
1
+ const got = require('@/utils/got');
2
+ const cheerio = require('cheerio');
3
+ const { parseDate } = require('@/utils/parse-date');
4
+
5
+ const host = 'http://www.grs.zju.edu.cn/';
6
+
7
+ const map = new Map([
8
+ [1, { title: '浙大研究生院 -- 全部公告', tag: '1335' }],
9
+ [2, { title: '浙大研究生院 -- 教学管理', tag: '1336' }],
10
+ [3, { title: '浙大研究生院 -- 各类资助', tag: '1337' }],
11
+ [4, { title: '浙大研究生院 -- 学科建设', tag: '1338' }],
12
+ [5, { title: '浙大研究生院 -- 海外交流', tag: '1339' }],
13
+ ]);
14
+
15
+ module.exports = async (ctx) => {
16
+ const type = parseInt(ctx.params.type);
17
+ const tag = map.get(type).tag;
18
+ const url = `${host}${tag}/list.htm`;
19
+ const res = await got(url);
20
+
21
+ const $ = cheerio.load(res.data);
22
+ const list = $('#wp_news_w24').find('.list_nav');
23
+
24
+ const items =
25
+ list &&
26
+ list
27
+ .map((index, item) => {
28
+ item = $(item);
29
+ return {
30
+ title: item.find('.list_tit').children('a').attr('title'),
31
+ pubDate: parseDate(item.find('.list_time').text()),
32
+ link: `http://www.grs.zju.edu.cn/${item.find('a').eq(-1).attr('href')}`,
33
+ description: item.find('.list_intro a').text(),
34
+ };
35
+ })
36
+ .get();
37
+
38
+ ctx.state.data = {
39
+ title: map.get(type).title,
40
+ link: `${host}${tag}/list.htm`,
41
+ item: items,
42
+ };
43
+ };
@@ -0,0 +1,66 @@
1
+ const got = require('@/utils/got');
2
+ const cheerio = require('cheerio');
3
+ const { parseDate } = require('@/utils/parse-date');
4
+ const host = 'https://www.zju.edu.cn/';
5
+ module.exports = async (ctx) => {
6
+ const type = ctx.params.type ?? 'xs';
7
+ const link = host + type + `/list.htm`;
8
+ const response = await got({
9
+ method: 'get',
10
+ url: link,
11
+ headers: {
12
+ Referer: host,
13
+ },
14
+ });
15
+ const $ = cheerio.load(response.data);
16
+
17
+ function sortUrl(e) {
18
+ if (e.search('redirect') !== -1) {
19
+ return link;
20
+ } else {
21
+ return e;
22
+ }
23
+ }
24
+ const list = $('#wp_news_w7 ul.news li')
25
+ .map(function () {
26
+ const info = {
27
+ title: $(this).find('a').attr('title'),
28
+ link: sortUrl($(this).find('a').attr('href')),
29
+ date: $(this)
30
+ .text()
31
+ .match(/\d{4}-\d{2}-\d{2}/)[0],
32
+ };
33
+ return info;
34
+ })
35
+ .get();
36
+
37
+ const out = await Promise.all(
38
+ list.map((info) => {
39
+ const title = info.title;
40
+ const date = info.date;
41
+ const itemUrl = new URL(info.link, host).href;
42
+ return ctx.cache.tryGet(itemUrl, async () => {
43
+ const response = await got({
44
+ method: 'get',
45
+ url: itemUrl,
46
+ headers: {
47
+ Referer: link,
48
+ },
49
+ });
50
+ const $ = cheerio.load(response.data);
51
+ const description = $('.right_content').html();
52
+ return {
53
+ title,
54
+ link: itemUrl,
55
+ description,
56
+ pubDate: parseDate(date),
57
+ };
58
+ });
59
+ })
60
+ );
61
+ ctx.state.data = {
62
+ title: `浙江大学` + $('ul.submenu .selected').text(),
63
+ link,
64
+ item: out,
65
+ };
66
+ };
@@ -0,0 +1,8 @@
1
+ module.exports = {
2
+ '/career/:type': ['Caicailiushui'],
3
+ '/cst/custom/:id': ['zwithz'],
4
+ '/cst/:type': ['yonvenne', 'zwithz'],
5
+ '/grs/:type': ['Caicailiushui'],
6
+ '/list/:type': ['Jeason0228'],
7
+ '/physics/:type': ['Caicailiushui'],
8
+ };
@@ -0,0 +1,52 @@
1
+ const got = require('@/utils/got');
2
+ const cheerio = require('cheerio');
3
+ const { parseDate } = require('@/utils/parse-date');
4
+
5
+ // const host = 'http://physics.zju.edu.cn/redir.php?catalog_id=';
6
+ const host = 'http://physics.zju.edu.cn';
7
+ // const host = 'http://10.14.122.238/redir.php?catalog_id=';
8
+
9
+ const map = new Map([
10
+ [1, { title: '浙大物理学院 -- 本院动态', id: '39060' }],
11
+ [2, { title: '浙大物理学院 -- 科研进展', id: '39070' }],
12
+ [3, { title: '浙大物理学院 -- 研究生教育最新消息', id: '39079' }],
13
+
14
+ // could not find these sections due to http://physics.zju.edu.cn/2022/0325/c39060a2510676/page.htm
15
+ /* [4, { title: '浙大物理学院 -- 学生思政最新消息', id: '112' }],
16
+ [5, { title: '浙大物理学院 -- 研究生思政消息公告', id: '155' }],
17
+ [6, { title: '浙大物理学院 -- 研究生奖助学金', id: '661' }],
18
+ [7, { title: '浙大物理学院 -- 研究生思政就业信息', id: '664' }],
19
+ [8, { title: '浙大物理学院 -- 本科生思政消息公告', id: '667' }],
20
+ [9, { title: '浙大物理学院 -- 本科生奖助学金', id: '670' }],
21
+ [10, { title: '浙大物理学院 -- 本科生就业信息', id: '671' }],
22
+ [11, { title: '浙大物理学院 -- 学术报告', id: '3735' }],*/
23
+ ]);
24
+
25
+ module.exports = async (ctx) => {
26
+ const type = parseInt(ctx.params.type);
27
+ const id = map.get(type).id;
28
+ const res = await got({
29
+ method: 'get',
30
+ url: `${host}/${id}/list.htm`,
31
+ });
32
+
33
+ const $ = cheerio.load(res.data);
34
+ const items = $('#arthd li')
35
+ .map((index, item) => {
36
+ item = $(item);
37
+ return {
38
+ title: item.find('a').attr('title'),
39
+ pubDate: parseDate(item.find('.art-date').text()),
40
+
41
+ link: `http://physics.zju.edu.cn/${item.find('a').attr('href')}`,
42
+ // link: `http://10.14.122.238/${item.find('a').attr('href')}`,
43
+ };
44
+ })
45
+ .get();
46
+
47
+ ctx.state.data = {
48
+ title: map.get(type).title,
49
+ link: `${host}${id}`,
50
+ item: items,
51
+ };
52
+ };
@@ -0,0 +1,139 @@
1
+ module.exports = {
2
+ 'zju.edu.cn': {
3
+ _name: '浙江大学',
4
+ physics: [
5
+ {
6
+ title: '物理学院',
7
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
8
+ source: ['/*path'],
9
+ target: (params) => {
10
+ let type;
11
+ switch (params.path) {
12
+ case '39060/list.htm':
13
+ type = '1';
14
+ break;
15
+ case '39070/list.htm':
16
+ type = '2';
17
+ break;
18
+ case '39079/list.htm':
19
+ type = '3';
20
+ break;
21
+ default:
22
+ type = '1';
23
+ break;
24
+ }
25
+ return `/zju/physics/${type}`;
26
+ },
27
+ },
28
+ ],
29
+ www: [
30
+ {
31
+ title: '普通栏目',
32
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
33
+ source: ['/*path'],
34
+ target: (params) => `/zju/list/${params.path.replace('/list.htm', '')}`,
35
+ },
36
+ ],
37
+ 'www.career': [
38
+ {
39
+ title: '就业服务平台',
40
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
41
+ source: ['/'],
42
+ target: '/zju/career/1',
43
+ },
44
+ ],
45
+ 'www.cst': [
46
+ {
47
+ title: '软件学院 - 全部通知',
48
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
49
+ source: ['', '/*tpath'],
50
+ target: '/zju/cst/0',
51
+ },
52
+ {
53
+ title: '软件学院 - 招生信息',
54
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
55
+ source: '/32178/list.htm',
56
+ target: '/zju/cst/1',
57
+ },
58
+ {
59
+ title: '软件学院 - 教务管理',
60
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
61
+ source: '/36216/list.htm',
62
+ target: '/zju/cst/2',
63
+ },
64
+ {
65
+ title: '软件学院 - 论文管理',
66
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
67
+ source: '/36217/list.htm',
68
+ target: '/zju/cst/3',
69
+ },
70
+ {
71
+ title: '软件学院 - 思政工作',
72
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
73
+ source: '/36192/list.htm',
74
+ target: '/zju/cst/4',
75
+ },
76
+ {
77
+ title: '软件学院 - 评奖评优',
78
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
79
+ source: '/36228/list.htm',
80
+ target: '/zju/cst/5',
81
+ },
82
+ {
83
+ title: '软件学院 - 实习就业',
84
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
85
+ source: '/36193/list.htm',
86
+ target: '/zju/cst/6',
87
+ },
88
+ {
89
+ title: '软件学院 - 国际实习',
90
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
91
+ source: '/36235/list.htm',
92
+ target: '/zju/cst/7',
93
+ },
94
+ {
95
+ title: '软件学院 - 国内合作科研',
96
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
97
+ source: '/36194/list.htm',
98
+ target: '/zju/cst/8',
99
+ },
100
+ {
101
+ title: '软件学院 - 国际合作科研',
102
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
103
+ source: '/36246/list.htm',
104
+ target: '/zju/cst/9',
105
+ },
106
+ ],
107
+ 'www.grs': [
108
+ {
109
+ title: '研究生院',
110
+ docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
111
+ source: ['/*path', '/'],
112
+ target: (params) => {
113
+ let type;
114
+ switch (params.path) {
115
+ case '1335/list.htm':
116
+ type = 1;
117
+ break;
118
+ case '1336/list.htm':
119
+ type = 2;
120
+ break;
121
+ case '1337/list.htm':
122
+ type = 3;
123
+ break;
124
+ case '1338/list.htm':
125
+ type = 4;
126
+ break;
127
+ case '1339/list.htm':
128
+ type = 5;
129
+ break;
130
+ default:
131
+ type = 1;
132
+ break;
133
+ }
134
+ return `/zju/grs/${type}`;
135
+ },
136
+ },
137
+ ],
138
+ },
139
+ };
@@ -0,0 +1,8 @@
1
+ module.exports = (router) => {
2
+ router.get('/career/:type', require('./career'));
3
+ router.get('/cst/custom/:id', require('./cst/custom'));
4
+ router.get('/cst/:type', require('./cst'));
5
+ router.get('/grs/:type', require('./grs'));
6
+ router.get('/list/:type', require('./list'));
7
+ router.get('/physics/:type', require('./physics'));
8
+ };
@@ -1,5 +1,5 @@
1
1
  <?xml version="1.0" encoding="utf-8"?>
2
- <feed xmlns="http://www.w3.org/2005/Atom">
2
+ <feed xmlns="http://www.w3.org/2005/Atom" xmlns:rsshub="http://rsshub.app/xml/schemas">
3
3
  <generator>RSSHub</generator>
4
4
  <webMaster>i@diygod.me (DIYgod)</webMaster>
5
5
  <language>{{ language || 'zh-cn' }}</language>
@@ -50,6 +50,18 @@
50
50
 
51
51
  <link href="{{ $e.link }}" />
52
52
 
53
+ {{ if $e.upvotes }}
54
+ <rsshub:upvotes>{{ $e.upvotes }}</rsshub:upvotes>
55
+ {{ /if }}
56
+
57
+ {{ if $e.downvotes }}
58
+ <rsshub:downvotes>{{ $e.downvotes }}</rsshub:downvotes>
59
+ {{ /if }}
60
+
61
+ {{ if $e.comments }}
62
+ <rsshub:comments>{{ $e.comments }}</rsshub:comments>
63
+ {{ /if }}
64
+
53
65
  {{ if $e.summary }}
54
66
  <summary type="html"><![CDATA[{{@ $e.summary }}]]></summary>
55
67
  {{ /if }}
@@ -60,15 +60,18 @@
60
60
  }
61
61
 
62
62
  .debug-item {
63
+ white-space: nowrap;
63
64
  margin: 5px 0;
64
65
  font-size: 12px;
65
66
  line-height: 24px;
67
+ max-width: 75%;
66
68
  }
67
69
 
68
70
  .debug-value {
71
+ white-space: pre-wrap !important;
72
+ overflow-wrap: anywhere;
69
73
  display: inline-block;
70
74
  vertical-align: top;
71
- white-space: pre;
72
75
  }
73
76
  </style>
74
77
  </head>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rsshub",
3
- "version": "1.0.0-master.f97cdb2",
3
+ "version": "1.0.0-master.fa3428f",
4
4
  "description": "Make RSS Great Again!",
5
5
  "main": "lib/pkg.js",
6
6
  "files": [
@@ -42,18 +42,18 @@
42
42
  "devDependencies": {
43
43
  "@napi-rs/pinyin": "1.7.0",
44
44
  "@types/koa": "2.13.4",
45
- "@vercel/nft": "0.18.0",
45
+ "@vercel/nft": "0.18.2",
46
46
  "@vuepress/plugin-back-to-top": "1.9.7",
47
47
  "@vuepress/plugin-google-analytics": "1.9.7",
48
48
  "@vuepress/plugin-pwa": "1.9.7",
49
49
  "@vuepress/shared-utils": "1.9.7",
50
50
  "ci-info": "3.3.0",
51
51
  "cross-env": "7.0.3",
52
- "eslint": "8.12.0",
52
+ "eslint": "8.13.0",
53
53
  "eslint-config-prettier": "8.5.0",
54
54
  "eslint-plugin-prettier": "4.0.0",
55
55
  "eslint-plugin-yml": "0.14.0",
56
- "fs-extra": "10.0.1",
56
+ "fs-extra": "10.1.0",
57
57
  "jest": "27.5.1",
58
58
  "mockdate": "3.0.5",
59
59
  "nock": "13.2.4",
@@ -77,7 +77,7 @@
77
77
  "dependencies": {
78
78
  "@koa/router": "10.1.1",
79
79
  "@postlight/mercury-parser": "2.2.1",
80
- "@sentry/node": "6.19.4",
80
+ "@sentry/node": "6.19.6",
81
81
  "aes-js": "3.1.2",
82
82
  "art-template": "4.13.2",
83
83
  "bbcodejs": "0.0.4",
@@ -86,7 +86,7 @@
86
86
  "city-timezones": "1.2.0",
87
87
  "crypto-js": "4.1.1",
88
88
  "currency-symbol-map": "5.0.1",
89
- "dayjs": "1.11.0",
89
+ "dayjs": "1.11.1",
90
90
  "dotenv": "16.0.0",
91
91
  "emailjs-imap-client": "3.1.0",
92
92
  "entities": "3.0.1",
@@ -95,10 +95,10 @@
95
95
  "git-rev-sync": "3.0.2",
96
96
  "googleapis": "100.0.0",
97
97
  "got": "11.8.3",
98
- "https-proxy-agent": "5.0.0",
98
+ "https-proxy-agent": "5.0.1",
99
99
  "iconv-lite": "0.6.3",
100
100
  "instagram-private-api": "1.45.3",
101
- "ioredis": "5.0.3",
101
+ "ioredis": "5.0.4",
102
102
  "ip": "*",
103
103
  "ip-regex": "4.3.0",
104
104
  "is-localhost-ip": "1.4.0",
@@ -109,7 +109,7 @@
109
109
  "koa-basic-auth": "4.0.0",
110
110
  "koa-favicon": "2.1.0",
111
111
  "koa-mount": "4.0.0",
112
- "lru-cache": "7.7.3",
112
+ "lru-cache": "7.8.1",
113
113
  "lz-string": "1.4.4",
114
114
  "mailparser": "3.4.0",
115
115
  "markdown-it": "12.3.2",
@@ -117,13 +117,14 @@
117
117
  "parse-torrent": "9.1.5",
118
118
  "pidusage": "3.0.0",
119
119
  "plist": "3.0.5",
120
- "puppeteer": "13.5.2",
120
+ "puppeteer": "13.6.0",
121
121
  "query-string": "7.1.1",
122
+ "rand-user-agent": "1.0.59",
122
123
  "require-all": "3.0.0",
123
124
  "rss-parser": "3.12.0",
124
- "showdown": "2.0.3",
125
+ "showdown": "2.1.0",
125
126
  "simplecc-wasm": "0.1.4",
126
- "socks-proxy-agent": "6.1.1",
127
+ "socks-proxy-agent": "6.2.0",
127
128
  "string-similarity": "4.0.4",
128
129
  "tiny-async-pool": "2.0.1",
129
130
  "torrent-search-api": "2.1.4",
@@ -1,48 +0,0 @@
1
- const got = require('@/utils/got');
2
- const date = require('@/utils/date');
3
- const cheerio = require('cheerio');
4
- const dayjs = require('dayjs');
5
- require('dayjs/locale/zh-cn');
6
-
7
- module.exports = async (ctx) => {
8
- const res = await got({ method: 'get', url: 'http://tv.cctv.com/lm/xwlb/' });
9
- const $ = cheerio.load(res.data);
10
- // 解析最新一期新闻联播的日期
11
- const latestDate = dayjs(date($('.md .mh_title > a').text().replace(/\s/g, '')), { locale: 'zh-cn' });
12
- const count = [];
13
- for (let i = 0; i < 20; i++) {
14
- count.push(i);
15
- }
16
- const resultItems = await Promise.all(
17
- count.map(async (i) => {
18
- const newsDate = latestDate.subtract(i, 'days').set('hour', 19);
19
- const url = `http://tv.cctv.com/lm/xwlb/day/${newsDate.format('YYYYMMDD')}.shtml`;
20
- const item = {
21
- title: `新闻联播 ${newsDate.format('YYYY/MM/DD')}`,
22
- link: url,
23
- pubDate: newsDate.toISOString(),
24
- description: await ctx.cache.tryGet(url, async () => {
25
- const res = await got.get(url);
26
- const content = cheerio.load(res.data);
27
- const alist = new Array();
28
- content('a').map((i, e) => {
29
- const a = content(e);
30
- const href = a.attr('href');
31
- const title = a.find('.text .title').text();
32
- const dur = a.find('.text .bottom').text();
33
- alist.push(`<a href="${href}">${title} ⏱${dur}</a>`);
34
- return i;
35
- });
36
- return alist.join('<br/>\n');
37
- }),
38
- };
39
- return item;
40
- })
41
- );
42
-
43
- ctx.state.data = {
44
- title: 'CCTV 新闻联播',
45
- link: 'http://tv.cctv.com/lm/xwlb/',
46
- item: resultItems,
47
- };
48
- };
@@ -1,73 +0,0 @@
1
- const got = require('@/utils/got');
2
- const cheerio = require('cheerio');
3
- const iconv = require('iconv-lite');
4
- const { parseDate } = require('@/utils/parse-date');
5
- const timezone = require('@/utils/timezone');
6
-
7
- module.exports = {
8
- parseFeed: async ({ subjectid }) => {
9
- const url = `https://www.dapenti.com/blog/blog.asp?name=xilei&subjectid=${subjectid}`;
10
- const listRes = await got({
11
- method: 'get',
12
- url,
13
- headers: {
14
- Referer: url,
15
- },
16
- // 喷嚏网编码为GBK,需要转码
17
- // 转码需要设定返回数据的格式,其可选项是arraybuffer,blob,document,json,text,stream
18
- // 默认为json
19
- responseType: 'buffer',
20
- });
21
- // 转码
22
- const data = iconv.decode(listRes.data, 'gb2312');
23
- const $ = cheerio.load(data);
24
- // 只取最近的三个,取全文rss
25
- const list = $('li', 'ul').slice(0, 3).get();
26
-
27
- const result_item = await Promise.all(
28
- list.map(async (item) => {
29
- const el = $(item);
30
- const url = `https://www.dapenti.com/blog/${el.find('a').attr('href')}`;
31
- const original_data = await got({
32
- method: 'get',
33
- url,
34
- headers: {
35
- Referer: url,
36
- },
37
- responseType: 'buffer',
38
- });
39
- const convert_data = iconv.decode(original_data.data, 'gbk');
40
- const description = cheerio.load(convert_data, {
41
- decodeEntities: false,
42
- })('body > table > tbody > tr > td.oblog_t_2 > div > table > tbody > tr:nth-child(2) > td');
43
- const pubInfo = description.find('span span.oblog_text').text().split('发布于');
44
- description.find('table, .adsbygoogle').remove();
45
-
46
- // remove header
47
- const count = subjectid.toString() === '70' ? 8 : 3;
48
- for (let index = 0; index < count; index++) {
49
- description.children().first().remove();
50
- }
51
-
52
- // remove footer
53
- for (let index = 0; index < 8; index++) {
54
- description.children().last().remove();
55
- }
56
- const single = {
57
- title: el.text(),
58
- author: pubInfo[0].trim(),
59
- description: description.html(),
60
- pubDate: timezone(parseDate(pubInfo[1].trim()), +8),
61
- link: url,
62
- };
63
- return single;
64
- })
65
- );
66
-
67
- return {
68
- title: `喷嚏-${subjectid}`,
69
- link: url,
70
- item: result_item,
71
- };
72
- },
73
- };