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
package/README.md CHANGED
@@ -38,7 +38,7 @@ RSSHub 是一个开源、简单易用、易于扩展的 RSS 生成器,可以
38
38
 
39
39
  ### Sponsors
40
40
 
41
- [Sayori Studio](https://t.me/SayoriStudio) . [Sion Kazama](https://blog.sion.moe) . [琚致远](https://wineso.me/) . [Rolly RSS 阅读器](https://www.coolapk.com/apk/239500) . [mokeyjay](https://www.mokeyjay.com/) . [萌开源联盟](https://www.moeunion.com) . [hooke007](https://github.com/hooke007/MPV_lazy) . [feeds.pub](https://feeds.pub)
41
+ [Sayori Studio](https://t.me/SayoriStudio) . [Sion Kazama](https://blog.sion.moe) . [琚致远](https://wineso.me/) . [Rolly RSS 阅读器](https://www.coolapk.com/apk/239500) . [mokeyjay](https://www.mokeyjay.com/) . [萌开源联盟](https://www.moeunion.com) . [hooke007](https://github.com/hooke007/MPV_lazy) . [feeds.pub](https://feeds.pub) . [KINGX@安全引擎](http://cve.today/)
42
42
 
43
43
  [![](https://opencollective.com/static/images/become_sponsor.svg)](https://docs.rsshub.app/en/support/)
44
44
 
package/lib/config.js CHANGED
@@ -1,4 +1,5 @@
1
1
  require('dotenv').config();
2
+ const randUserAgent = require('@/utils/rand-user-agent');
2
3
  let envs = process.env;
3
4
  let value;
4
5
 
@@ -39,7 +40,7 @@ const calculateValue = () => {
39
40
  listenInaddrAny: envs.LISTEN_INADDR_ANY || 1, // 是否允许公网连接,取值 0 1
40
41
  requestRetry: parseInt(envs.REQUEST_RETRY) || 2, // 请求失败重试次数
41
42
  requestTimeout: parseInt(envs.REQUEST_TIMEOUT) || 30000, // Milliseconds to wait for the server to end the response before aborting the request
42
- ua: envs.UA || 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36',
43
+ ua: envs.UA || randUserAgent({ browser: 'chrome', os: 'mac os', device: 'desktop' }),
43
44
  // cors request
44
45
  allowOrigin: envs.ALLOW_ORIGIN,
45
46
  // cache
@@ -127,6 +128,7 @@ const calculateValue = () => {
127
128
  ipb_pass_hash: envs.EH_IPB_PASS_HASH,
128
129
  sk: envs.EH_SK,
129
130
  igneous: envs.EH_IGNEOUS,
131
+ img_proxy: envs.EH_IMG_PROXY,
130
132
  },
131
133
  email: {
132
134
  config: email_config,
@@ -1238,71 +1238,6 @@ module.exports = {
1238
1238
  },
1239
1239
  ],
1240
1240
  },
1241
- 'zju.edu.cn': {
1242
- _name: '浙江大学',
1243
- cst: [
1244
- {
1245
- title: '软件学院 - 全部通知',
1246
- docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
1247
- source: ['', '/*tpath'],
1248
- target: '/zju/cst/0',
1249
- },
1250
- {
1251
- title: '软件学院 - 招生信息',
1252
- docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
1253
- source: '/32178/list.htm',
1254
- target: '/zju/cst/1',
1255
- },
1256
- {
1257
- title: '软件学院 - 教务管理',
1258
- docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
1259
- source: '/36216/list.htm',
1260
- target: '/zju/cst/2',
1261
- },
1262
- {
1263
- title: '软件学院 - 论文管理',
1264
- docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
1265
- source: '/36217/list.htm',
1266
- target: '/zju/cst/3',
1267
- },
1268
- {
1269
- title: '软件学院 - 思政工作',
1270
- docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
1271
- source: '/36192/list.htm',
1272
- target: '/zju/cst/4',
1273
- },
1274
- {
1275
- title: '软件学院 - 评奖评优',
1276
- docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
1277
- source: '/36228/list.htm',
1278
- target: '/zju/cst/5',
1279
- },
1280
- {
1281
- title: '软件学院 - 实习就业',
1282
- docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
1283
- source: '/36193/list.htm',
1284
- target: '/zju/cst/6',
1285
- },
1286
- {
1287
- title: '软件学院 - 国际实习',
1288
- docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
1289
- source: '/36235/list.htm',
1290
- target: '/zju/cst/7',
1291
- },
1292
- {
1293
- title: '软件学院 - 国内合作科研',
1294
- docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
1295
- source: '/36194/list.htm',
1296
- target: '/zju/cst/8',
1297
- },
1298
- {
1299
- title: '软件学院 - 国际合作科研',
1300
- docs: 'https://docs.rsshub.app/university.html#zhe-jiang-da-xue',
1301
- source: '/36246/list.htm',
1302
- target: '/zju/cst/9',
1303
- },
1304
- ],
1305
- },
1306
1241
  'kuaidi100.com': {
1307
1242
  _name: '快递100',
1308
1243
  '.': [
@@ -2226,33 +2161,6 @@ module.exports = {
2226
2161
  },
2227
2162
  ],
2228
2163
  },
2229
- 'eagle.cool': {
2230
- _name: 'Eagle',
2231
- cn: [
2232
- {
2233
- title: '更新日志',
2234
- docs: 'https://docs.rsshub.app/program-update.html#eagle',
2235
- source: '/changelog',
2236
- target: '/eagle/changelog/cn',
2237
- },
2238
- ],
2239
- tw: [
2240
- {
2241
- title: '更新日誌',
2242
- docs: 'https://docs.rsshub.app/program-update.html#eagle',
2243
- source: '/changelog',
2244
- target: '/eagle/changelog/tw',
2245
- },
2246
- ],
2247
- en: [
2248
- {
2249
- title: 'Release Notes',
2250
- docs: 'https://docs.rsshub.app/program-update.html#eagle',
2251
- source: '/changelog',
2252
- target: '/eagle/changelog/en',
2253
- },
2254
- ],
2255
- },
2256
2164
  'furaffinity.net': {
2257
2165
  _name: 'Fur Affinity',
2258
2166
  www: [
package/lib/router.js CHANGED
@@ -42,10 +42,10 @@ router.get('/bangumi/group/:id', lazyloadRouteHandler('./routes/bangumi/group/to
42
42
  router.get('/bangumi/subject/:id', lazyloadRouteHandler('./routes/bangumi/subject'));
43
43
  router.get('/bangumi/user/blog/:id', lazyloadRouteHandler('./routes/bangumi/user/blog'));
44
44
 
45
- // 報導者
46
- router.get('/twreporter/newest', lazyloadRouteHandler('./routes/twreporter/newest'));
47
- router.get('/twreporter/photography', lazyloadRouteHandler('./routes/twreporter/photography'));
48
- router.get('/twreporter/category/:cid', lazyloadRouteHandler('./routes/twreporter/category'));
45
+ // 報導者 migrated to v2
46
+ // router.get('/twreporter/newest', lazyloadRouteHandler('./routes/twreporter/newest'));
47
+ // router.get('/twreporter/photography', lazyloadRouteHandler('./routes/twreporter/photography'));
48
+ // router.get('/twreporter/category/:cid', lazyloadRouteHandler('./routes/twreporter/category'));
49
49
 
50
50
  // 微博
51
51
  router.get('/weibo/user/:uid/:routeParams?', lazyloadRouteHandler('./routes/weibo/user'));
@@ -133,8 +133,8 @@ router.get('/plainlaw/archives', lazyloadRouteHandler('./routes/plainlaw/archive
133
133
  // router.get('/jandan/:sub_model', lazyloadRouteHandler('./routes/jandan/pic'));
134
134
 
135
135
  // 喷嚏
136
- router.get('/dapenti/tugua', lazyloadRouteHandler('./routes/dapenti/tugua'));
137
- router.get('/dapenti/subject/:id', lazyloadRouteHandler('./routes/dapenti/subject'));
136
+ // router.get('/dapenti/tugua', lazyloadRouteHandler('./routes/dapenti/tugua'));
137
+ // router.get('/dapenti/subject/:id', lazyloadRouteHandler('./routes/dapenti/subject'));
138
138
 
139
139
  // Dockone
140
140
  router.get('/dockone/weekly', lazyloadRouteHandler('./routes/dockone/weekly'));
@@ -278,14 +278,13 @@ router.get('/tingshuitz/wuhan', lazyloadRouteHandler('./routes/tingshuitz/wuhan'
278
278
  router.get('/mihoyo/bh3/:type', lazyloadRouteHandler('./routes/mihoyo/bh3'));
279
279
  router.get('/mihoyo/bh2/:type', lazyloadRouteHandler('./routes/mihoyo/bh2'));
280
280
 
281
- // 新闻联播
282
- router.get('/cctv/xwlb', lazyloadRouteHandler('./routes/cctv/xwlb'));
283
-
281
+ // 新闻联播 migrated to v2
282
+ // router.get('/cctv/xwlb', lazyloadRouteHandler('./routes/cctv/xwlb'));
284
283
  // 央视新闻
285
- router.get('/cctv/lm/:id?', lazyloadRouteHandler('./routes/cctv/lm'));
286
- router.get('/cctv/:category', lazyloadRouteHandler('./routes/cctv/category'));
287
- router.get('/cctv/photo/jx', lazyloadRouteHandler('./routes/cctv/jx'));
288
- router.get('/cctv-special/:id?', lazyloadRouteHandler('./routes/cctv/special'));
284
+ // router.get('/cctv/lm/:id?', lazyloadRouteHandler('./routes/cctv/lm'));
285
+ // router.get('/cctv/:category', lazyloadRouteHandler('./routes/cctv/category'));
286
+ // router.get('/cctv/photo/jx', lazyloadRouteHandler('./routes/cctv/jx'));
287
+ // router.get('/cctv-special/:id?', lazyloadRouteHandler('./routes/cctv/special'));
289
288
 
290
289
  // 财新博客
291
290
  router.get('/caixin/blog/:column', lazyloadRouteHandler('./routes/caixin/blog'));
@@ -357,13 +356,13 @@ router.get('/namoc/media', lazyloadRouteHandler('./routes/namoc/media'));
357
356
  router.get('/namoc/exhibition', lazyloadRouteHandler('./routes/namoc/exhibition'));
358
357
  router.get('/namoc/specials', lazyloadRouteHandler('./routes/namoc/specials'));
359
358
 
360
- // 懂球帝
361
- router.get('/dongqiudi/daily', lazyloadRouteHandler('./routes/dongqiudi/daily'));
362
- router.get('/dongqiudi/result/:team', lazyloadRouteHandler('./routes/dongqiudi/result'));
363
- router.get('/dongqiudi/team_news/:team', lazyloadRouteHandler('./routes/dongqiudi/team_news'));
364
- router.get('/dongqiudi/player_news/:id', lazyloadRouteHandler('./routes/dongqiudi/player_news'));
365
- router.get('/dongqiudi/special/:id', lazyloadRouteHandler('./routes/dongqiudi/special'));
366
- router.get('/dongqiudi/top_news/:id?', lazyloadRouteHandler('./routes/dongqiudi/top_news'));
359
+ // 懂球帝 migrated to v2
360
+ // router.get('/dongqiudi/daily', lazyloadRouteHandler('./routes/dongqiudi/daily'));
361
+ // router.get('/dongqiudi/result/:team', lazyloadRouteHandler('./routes/dongqiudi/result'));
362
+ // router.get('/dongqiudi/team_news/:team', lazyloadRouteHandler('./routes/dongqiudi/team_news'));
363
+ // router.get('/dongqiudi/player_news/:id', lazyloadRouteHandler('./routes/dongqiudi/player_news'));
364
+ // router.get('/dongqiudi/special/:id', lazyloadRouteHandler('./routes/dongqiudi/special'));
365
+ // router.get('/dongqiudi/top_news/:id?', lazyloadRouteHandler('./routes/dongqiudi/top_news'));
367
366
 
368
367
  // 维基百科 Wikipedia
369
368
  router.get('/wikipedia/mainland', lazyloadRouteHandler('./routes/wikipedia/mainland'));
@@ -377,15 +376,15 @@ router.get('/egsea/flash', lazyloadRouteHandler('./routes/egsea/flash'));
377
376
  // 选股宝
378
377
  router.get('/xuangubao/subject/:subject_id', lazyloadRouteHandler('./routes/xuangubao/subject'));
379
378
 
380
- // 雪球
381
- router.get('/xueqiu/user/:id/:type?', lazyloadRouteHandler('./routes/xueqiu/user'));
382
- router.get('/xueqiu/favorite/:id', lazyloadRouteHandler('./routes/xueqiu/favorite'));
383
- router.get('/xueqiu/user_stock/:id', lazyloadRouteHandler('./routes/xueqiu/user_stock'));
384
- router.get('/xueqiu/fund/:id', lazyloadRouteHandler('./routes/xueqiu/fund'));
385
- router.get('/xueqiu/stock_info/:id/:type?', lazyloadRouteHandler('./routes/xueqiu/stock_info'));
386
- router.get('/xueqiu/snb/:id', lazyloadRouteHandler('./routes/xueqiu/snb'));
387
- router.get('/xueqiu/hots', lazyloadRouteHandler('./routes/xueqiu/hots'));
388
- router.get('/xueqiu/stock_comments/:id/:titleLength?', lazyloadRouteHandler('./routes/xueqiu/stock_comments'));
379
+ // 雪球 migrated to v2
380
+ // router.get('/xueqiu/user/:id/:type?', lazyloadRouteHandler('./routes/xueqiu/user'));
381
+ // router.get('/xueqiu/favorite/:id', lazyloadRouteHandler('./routes/xueqiu/favorite'));
382
+ // router.get('/xueqiu/user_stock/:id', lazyloadRouteHandler('./routes/xueqiu/user_stock'));
383
+ // router.get('/xueqiu/fund/:id', lazyloadRouteHandler('./routes/xueqiu/fund'));
384
+ // router.get('/xueqiu/stock_info/:id/:type?', lazyloadRouteHandler('./routes/xueqiu/stock_info'));
385
+ // router.get('/xueqiu/snb/:id', lazyloadRouteHandler('./routes/xueqiu/snb'));
386
+ // router.get('/xueqiu/hots', lazyloadRouteHandler('./routes/xueqiu/hots'));
387
+ // router.get('/xueqiu/stock_comments/:id/:titleLength?', lazyloadRouteHandler('./routes/xueqiu/stock_comments'));
389
388
 
390
389
  // Greasy Fork
391
390
  router.get('/greasyfork/:language/:domain?', lazyloadRouteHandler('./routes/greasyfork/scripts'));
@@ -422,20 +421,18 @@ router.get('/tucaoqq/post/:project/:key', lazyloadRouteHandler('./routes/tencent
422
421
  // Bugly SDK
423
422
  router.get('/bugly/changelog/:platform', lazyloadRouteHandler('./routes/tencent/bugly/changelog'));
424
423
 
425
- // wechat
426
- router.get('/wechat/wemp/:id', lazyloadRouteHandler('./routes/tencent/wechat/wemp'));
427
- router.get('/wechat/csm/:id', lazyloadRouteHandler('./routes/tencent/wechat/csm'));
428
- router.get('/wechat/ce/:id', lazyloadRouteHandler('./routes/tencent/wechat/ce'));
429
- router.get('/wechat/announce', lazyloadRouteHandler('./routes/tencent/wechat/announce'));
424
+ // wechat migrated to v2
425
+ // router.get('/wechat/wemp/:id', lazyloadRouteHandler('./routes/tencent/wechat/wemp'));
426
+ // router.get('/wechat/ce/:id', lazyloadRouteHandler('./routes/tencent/wechat/ce'));
427
+ // router.get('/wechat/announce', lazyloadRouteHandler('./routes/tencent/wechat/announce'));
430
428
  router.get('/wechat/miniprogram/plugins', lazyloadRouteHandler('./routes/tencent/wechat/miniprogram/plugins'));
431
- router.get('/wechat/tgchannel/:id/:mpName?/:searchQueryType?', lazyloadRouteHandler('./routes/tencent/wechat/tgchannel'));
432
- router.get('/wechat/uread/:userid', lazyloadRouteHandler('./routes/tencent/wechat/uread'));
433
- router.get('/wechat/ershicimi/:id', lazyloadRouteHandler('./routes/tencent/wechat/ershcimi'));
434
- router.get('/wechat/wjdn/:id', lazyloadRouteHandler('./routes/tencent/wechat/wjdn'));
435
- router.get('/wechat/wxnmh/:id', lazyloadRouteHandler('./routes/tencent/wechat/wxnmh'));
436
- router.get('/wechat/mp/homepage/:biz/:hid/:cid?', lazyloadRouteHandler('./routes/tencent/wechat/mp'));
437
- router.get('/wechat/mp/msgalbum/:biz/:aid', lazyloadRouteHandler('./routes/tencent/wechat/msgalbum'));
438
- router.get('/wechat/feeds/:id', lazyloadRouteHandler('./routes/tencent/wechat/feeds'));
429
+ // router.get('/wechat/tgchannel/:id/:mpName?/:searchQueryType?', lazyloadRouteHandler('./routes/tencent/wechat/tgchannel'));
430
+ // router.get('/wechat/uread/:userid', lazyloadRouteHandler('./routes/tencent/wechat/uread'));
431
+ // router.get('/wechat/ershicimi/:id', lazyloadRouteHandler('./routes/tencent/wechat/ershcimi'));
432
+ // router.get('/wechat/wxnmh/:id', lazyloadRouteHandler('./routes/tencent/wechat/wxnmh'));
433
+ // router.get('/wechat/mp/homepage/:biz/:hid/:cid?', lazyloadRouteHandler('./routes/tencent/wechat/mp'));
434
+ // router.get('/wechat/mp/msgalbum/:biz/:aid', lazyloadRouteHandler('./routes/tencent/wechat/msgalbum'));
435
+ // router.get('/wechat/feeds/:id', lazyloadRouteHandler('./routes/tencent/wechat/feeds'));
439
436
 
440
437
  // All the Flight Deals
441
438
  router.get('/atfd/:locations/:nearby?', lazyloadRouteHandler('./routes/atfd/index'));
@@ -510,7 +507,7 @@ router.get('/dpu/jiaowu/news/:type?', lazyloadRouteHandler('./routes/universitie
510
507
  router.get('/dpu/wlfw/news/:type?', lazyloadRouteHandler('./routes/universities/dpu/wlfw/news'));
511
508
 
512
509
  // 大连理工大学
513
- router.get('/dut/:subsite/:type', lazyloadRouteHandler('./routes/universities/dut/index'));
510
+ // router.get('/dut/:subsite/:type', lazyloadRouteHandler('./routes/universities/dut/index'));
514
511
 
515
512
  // 东南大学
516
513
  router.get('/seu/radio/academic', lazyloadRouteHandler('./routes/universities/seu/radio/academic'));
@@ -716,12 +713,12 @@ router.get('/jgsu/jwc', lazyloadRouteHandler('./routes/universities/jgsu/jwc'));
716
713
  // 中南大学
717
714
  router.get('/csu/job/:type?', lazyloadRouteHandler('./routes/universities/csu/job'));
718
715
 
719
- // 山东大学
720
- router.get('/sdu/sc/:type?', lazyloadRouteHandler('./routes/universities/sdu/sc'));
721
- router.get('/sdu/cs/:type?', lazyloadRouteHandler('./routes/universities/sdu/cs'));
722
- router.get('/sdu/cmse/:type?', lazyloadRouteHandler('./routes/universities/sdu/cmse'));
723
- router.get('/sdu/mech/:type?', lazyloadRouteHandler('./routes/universities/sdu/mech'));
724
- router.get('/sdu/epe/:type?', lazyloadRouteHandler('./routes/universities/sdu/epe'));
716
+ // 山东大学 migrated to v2
717
+ // router.get('/sdu/sc/:type?', lazyloadRouteHandler('./routes/universities/sdu/sc'));
718
+ // router.get('/sdu/cs/:type?', lazyloadRouteHandler('./routes/universities/sdu/cs'));
719
+ // router.get('/sdu/cmse/:type?', lazyloadRouteHandler('./routes/universities/sdu/cmse'));
720
+ // router.get('/sdu/mech/:type?', lazyloadRouteHandler('./routes/universities/sdu/mech'));
721
+ // router.get('/sdu/epe/:type?', lazyloadRouteHandler('./routes/universities/sdu/epe'));
725
722
 
726
723
  // 中国海洋大学
727
724
  router.get('/ouc/it/:type?', lazyloadRouteHandler('./routes/universities/ouc/it'));
@@ -813,8 +810,8 @@ router.get('/xmu/aero/:type', lazyloadRouteHandler('./routes/universities/xmu/ae
813
810
  router.get('/ifanr/:channel?', lazyloadRouteHandler('./routes/ifanr/index'));
814
811
 
815
812
  // 果壳网
816
- router.get('/guokr/scientific', lazyloadRouteHandler('./routes/guokr/scientific'));
817
- router.get('/guokr/:channel', lazyloadRouteHandler('./routes/guokr/calendar'));
813
+ // router.get('/guokr/scientific', lazyloadRouteHandler('./routes/guokr/scientific'));
814
+ // router.get('/guokr/:channel', lazyloadRouteHandler('./routes/guokr/calendar'));
818
815
 
819
816
  // 联合早报 已经迁移至v2模板
820
817
  // router.get('/zaobao/realtime/:section?', require('./routes/zaobao/realtime'));
@@ -1456,8 +1453,8 @@ router.get('/gamersky/news', lazyloadRouteHandler('./routes/gamersky/news'));
1456
1453
  router.get('/gamersky/ent/:category', lazyloadRouteHandler('./routes/gamersky/ent'));
1457
1454
 
1458
1455
  // 游研社
1459
- router.get('/yystv/category/:category', lazyloadRouteHandler('./routes/yystv/category'));
1460
- router.get('/yystv/docs', lazyloadRouteHandler('./routes/yystv/docs'));
1456
+ // router.get('/yystv/category/:category', lazyloadRouteHandler('./routes/yystv/category'));
1457
+ // router.get('/yystv/docs', lazyloadRouteHandler('./routes/yystv/docs'));
1461
1458
 
1462
1459
  // konami
1463
1460
  router.get('/konami/pesmobile/:lang?/:os?', lazyloadRouteHandler('./routes/konami/pesmobile'));
@@ -1470,13 +1467,13 @@ router.get('/psnine/game', lazyloadRouteHandler('./routes/psnine/game'));
1470
1467
  router.get('/psnine/news/:order?', lazyloadRouteHandler('./routes/psnine/news'));
1471
1468
  router.get('/psnine/node/:id?/:order?', lazyloadRouteHandler('./routes/psnine/node'));
1472
1469
 
1473
- // 浙江大学
1474
- router.get('/zju/list/:type', lazyloadRouteHandler('./routes/universities/zju/list'));
1475
- router.get('/zju/physics/:type', lazyloadRouteHandler('./routes/universities/zju/physics'));
1476
- router.get('/zju/grs/:type', lazyloadRouteHandler('./routes/universities/zju/grs'));
1477
- router.get('/zju/career/:type', lazyloadRouteHandler('./routes/universities/zju/career'));
1478
- router.get('/zju/cst/:type', lazyloadRouteHandler('./routes/universities/zju/cst'));
1479
- router.get('/zju/cst/custom/:id', lazyloadRouteHandler('./routes/universities/zju/cst/custom'));
1470
+ // 浙江大学 migrated to v2
1471
+ // router.get('/zju/list/:type', lazyloadRouteHandler('./routes/universities/zju/list'));
1472
+ // router.get('/zju/physics/:type', lazyloadRouteHandler('./routes/universities/zju/physics'));
1473
+ // router.get('/zju/grs/:type', lazyloadRouteHandler('./routes/universities/zju/grs'));
1474
+ // router.get('/zju/career/:type', lazyloadRouteHandler('./routes/universities/zju/career'));
1475
+ // router.get('/zju/cst/:type', lazyloadRouteHandler('./routes/universities/zju/cst'));
1476
+ // router.get('/zju/cst/custom/:id', lazyloadRouteHandler('./routes/universities/zju/cst/custom'));
1480
1477
 
1481
1478
  // 浙江大学城市学院
1482
1479
  router.get('/zucc/news/latest', lazyloadRouteHandler('./routes/universities/zucc/news'));
@@ -2114,10 +2111,10 @@ router.get('/pgyer/:app?', lazyloadRouteHandler('./routes/pgyer/app'));
2114
2111
  // 微博个人时间线
2115
2112
  router.get('/weibo/timeline/:uid/:feature?/:routeParams?', lazyloadRouteHandler('./routes/weibo/timeline'));
2116
2113
 
2117
- // TAPTAP
2118
- router.get('/taptap/topic/:id/:label?', lazyloadRouteHandler('./routes/taptap/topic'));
2119
- router.get('/taptap/changelog/:id', lazyloadRouteHandler('./routes/taptap/changelog'));
2120
- router.get('/taptap/review/:id/:order?', lazyloadRouteHandler('./routes/taptap/review'));
2114
+ // TAPTAP migrated to v2
2115
+ // router.get('/taptap/topic/:id/:label?', lazyloadRouteHandler('./routes/taptap/topic'));
2116
+ // router.get('/taptap/changelog/:id', lazyloadRouteHandler('./routes/taptap/changelog'));
2117
+ // router.get('/taptap/review/:id/:order?/:lang?', lazyloadRouteHandler('./routes/taptap/review'));
2121
2118
 
2122
2119
  // lofter migrated to v2
2123
2120
  // router.get('/lofter/tag/:name?/:type?', lazyloadRouteHandler('./routes/lofter/tag'));
@@ -3460,7 +3457,7 @@ router.get('/blizzard/news/:language?/:category?', lazyloadRouteHandler('./route
3460
3457
  router.get('/deepmind/blog/:category?', lazyloadRouteHandler('./routes/deepmind/blog'));
3461
3458
 
3462
3459
  // 东西智库
3463
- router.get('/dx2025/:type?/:category?', lazyloadRouteHandler('./routes/dx2025/index'));
3460
+ // router.get('/dx2025/:type?/:category?', lazyloadRouteHandler('./routes/dx2025/index'));
3464
3461
 
3465
3462
  // DeepL
3466
3463
  router.get('/deepl/blog/:lang?', lazyloadRouteHandler('./routes/deepl/blog'));
@@ -3655,7 +3652,7 @@ router.get('/yicas/blog', lazyloadRouteHandler('./routes/yicas/blog'));
3655
3652
  router.get('/93/:category?', lazyloadRouteHandler('./routes/93/index'));
3656
3653
 
3657
3654
  // 科学网
3658
- router.get('/sciencenet/blog/:type?/:time?/:sort?', lazyloadRouteHandler('./routes/sciencenet/blog'));
3655
+ // router.get('/sciencenet/blog/:type?/:time?/:sort?', lazyloadRouteHandler('./routes/sciencenet/blog'));
3659
3656
 
3660
3657
  // DailyArt
3661
3658
  router.get('/dailyart/:language?', lazyloadRouteHandler('./routes/dailyart/index'));
@@ -3878,7 +3875,7 @@ router.get('/ccg/:category?', lazyloadRouteHandler('./routes/ccg/index'));
3878
3875
  // router.get('/gf-cn/news/:category?', lazyloadRouteHandler('./routes/gf-cn/news'));
3879
3876
 
3880
3877
  // Eagle
3881
- router.get('/eagle/changelog/:language?', lazyloadRouteHandler('./routes/eagle/changelog'));
3878
+ // router.get('/eagle/changelog/:language?', lazyloadRouteHandler('./routes/eagle/changelog'));
3882
3879
 
3883
3880
  // ezone.hk
3884
3881
  // router.get('/ezone/:category?', lazyloadRouteHandler('./routes/ezone/index'));
@@ -3940,10 +3937,10 @@ router.get('/tongli/news/:type', lazyloadRouteHandler('./routes/tongli/news'));
3940
3937
  // OR
3941
3938
  router.get('/or/:id?', lazyloadRouteHandler('./routes/or'));
3942
3939
 
3943
- // e-hentai
3944
- router.get('/ehentai/favorites/:favcat?/:order?/:page?/:bittorrent?', lazyloadRouteHandler('./routes/ehentai/favorites'));
3945
- router.get('/ehentai/search/:params?/:page?/:bittorrent?', lazyloadRouteHandler('./routes/ehentai/search'));
3946
- router.get('/ehentai/tag/:tag/:page?/:bittorrent?', lazyloadRouteHandler('./routes/ehentai/tag'));
3940
+ // e-hentai migrated to v2
3941
+ // router.get('/ehentai/favorites/:favcat?/:order?/:page?/:routeParams?', lazyloadRouteHandler('./routes/ehentai/favorites'));
3942
+ // router.get('/ehentai/search/:params?/:page?/:routeParams?', lazyloadRouteHandler('./routes/ehentai/search'));
3943
+ // router.get('/ehentai/tag/:tag/:page?/:routeParams?', lazyloadRouteHandler('./routes/ehentai/tag'));
3947
3944
 
3948
3945
  // 字型故事
3949
3946
  router.get('/fontstory', lazyloadRouteHandler('./routes/fontstory/tw'));
@@ -1,5 +1,7 @@
1
1
  const got = require('@/utils/got');
2
2
  const cheerio = require('cheerio');
3
+ const { parseDate } = require('@/utils/parse-date');
4
+ const timezone = require('@/utils/timezone');
3
5
 
4
6
  module.exports = async (ctx) => {
5
7
  const link = `https://developers.weixin.qq.com/miniprogram/dev/framework/release/`;
@@ -16,14 +18,14 @@ module.exports = async (ctx) => {
16
18
  ctx.state.data = {
17
19
  title: name,
18
20
  link,
19
- item: $('#docContent .content h3')
21
+ item: $('#docContent .content h2')
20
22
  .map((_, item) => {
21
23
  item = $(item);
22
24
  const title = item.text().replace(/[\s|#]/g, '');
23
25
  return {
24
26
  title,
25
27
  description: item.next().html(),
26
- pubDate: new Date(new RegExp(/\d{4}-\d{2}-\d{2}/).exec(title) + ' GMT+8').toUTCString(),
28
+ pubDate: timezone(parseDate(new RegExp(/\d{4}-\d{2}-\d{2}/).exec(title)), +8),
27
29
  link: link + item.find('a.header-anchor').attr('href'),
28
30
  };
29
31
  })
@@ -3,6 +3,10 @@ const got = require('@/utils/got');
3
3
  const iconv = require('iconv-lite');
4
4
  // eslint-disable-next-line no-unused-vars
5
5
  const date = require('@/utils/date');
6
+ // eslint-disable-next-line no-unused-vars
7
+ const { parseDate } = require('@/utils/parse-date');
8
+ // eslint-disable-next-line no-unused-vars
9
+ const timezone = require('@/utils/timezone');
6
10
 
7
11
  function transElemText($, prop) {
8
12
  const regex = new RegExp(/\$\((.*)\)/g);
@@ -1,6 +1,7 @@
1
1
  const dayjs = require('dayjs');
2
2
  dayjs.extend(require('dayjs/plugin/customParseFormat'));
3
3
  dayjs.extend(require('dayjs/plugin/duration'));
4
+ dayjs.extend(require('dayjs/plugin/isSameOrBefore'));
4
5
  dayjs.extend(require('dayjs/plugin/weekday'));
5
6
 
6
7
  const words = [
@@ -17,31 +18,31 @@ const words = [
17
18
  regExp: /^(?:前天|(?:the)?d(?:ay)?b(?:eforeyesterda)?y)(.*)/,
18
19
  },
19
20
  {
20
- startAt: dayjs().isBefore(dayjs().weekday(1)) ? dayjs().weekday(1).subtract(1, 'week') : dayjs().weekday(1),
21
+ startAt: dayjs().isSameOrBefore(dayjs().weekday(1)) ? dayjs().weekday(1).subtract(1, 'week') : dayjs().weekday(1),
21
22
  regExp: /^(?:周|星期)一(.*)/,
22
23
  },
23
24
  {
24
- startAt: dayjs().isBefore(dayjs().weekday(2)) ? dayjs().weekday(2).subtract(1, 'week') : dayjs().weekday(2),
25
+ startAt: dayjs().isSameOrBefore(dayjs().weekday(2)) ? dayjs().weekday(2).subtract(1, 'week') : dayjs().weekday(2),
25
26
  regExp: /^(?:周|星期)二(.*)/,
26
27
  },
27
28
  {
28
- startAt: dayjs().isBefore(dayjs().weekday(3)) ? dayjs().weekday(3).subtract(1, 'week') : dayjs().weekday(3),
29
+ startAt: dayjs().isSameOrBefore(dayjs().weekday(3)) ? dayjs().weekday(3).subtract(1, 'week') : dayjs().weekday(3),
29
30
  regExp: /^(?:周|星期)三(.*)/,
30
31
  },
31
32
  {
32
- startAt: dayjs().isBefore(dayjs().weekday(4)) ? dayjs().weekday(4).subtract(1, 'week') : dayjs().weekday(4),
33
+ startAt: dayjs().isSameOrBefore(dayjs().weekday(4)) ? dayjs().weekday(4).subtract(1, 'week') : dayjs().weekday(4),
33
34
  regExp: /^(?:周|星期)四(.*)/,
34
35
  },
35
36
  {
36
- startAt: dayjs().isBefore(dayjs().weekday(5)) ? dayjs().weekday(5).subtract(1, 'week') : dayjs().weekday(5),
37
+ startAt: dayjs().isSameOrBefore(dayjs().weekday(5)) ? dayjs().weekday(5).subtract(1, 'week') : dayjs().weekday(5),
37
38
  regExp: /^(?:周|星期)五(.*)/,
38
39
  },
39
40
  {
40
- startAt: dayjs().isBefore(dayjs().weekday(6)) ? dayjs().weekday(6).subtract(1, 'week') : dayjs().weekday(6),
41
+ startAt: dayjs().isSameOrBefore(dayjs().weekday(6)) ? dayjs().weekday(6).subtract(1, 'week') : dayjs().weekday(6),
41
42
  regExp: /^(?:周|星期)六(.*)/,
42
43
  },
43
44
  {
44
- startAt: dayjs().isBefore(dayjs().weekday(7)) ? dayjs().weekday(7).subtract(1, 'week') : dayjs().weekday(7),
45
+ startAt: dayjs().isSameOrBefore(dayjs().weekday(7)) ? dayjs().weekday(7).subtract(1, 'week') : dayjs().weekday(7),
45
46
  regExp: /^(?:周|星期)(?:日|天)(.*)/,
46
47
  },
47
48
  {
@@ -0,0 +1,29 @@
1
+ const randUserAgent = require('rand-user-agent');
2
+
3
+ /**
4
+ * A handy function to help generate a legit useragent.
5
+ *
6
+ * @param {Object} randUserAgent
7
+ * @param {string} randUserAgent.browser Name of a browser, case-insensitive. `chrome`, `edge`, `firefox`, `mobile safari`(ios only) or `safari`.
8
+ * @param {string} randUserAgent.os Name of an OS, case-insensitive. `android`, `ios`, `mac os`, `linux` or `windows`.
9
+ * @param {string} randUserAgent.device Name of a device, case-insensitive. `desktop`, `mobile` or `tablet`.
10
+ * @returns A random useragent for the given specifications.
11
+ */
12
+ module.exports = ({ browser = 'chrome', os = 'mac os', device = 'desktop' }) => {
13
+ device = device.toLowerCase();
14
+ browser = browser.toLowerCase();
15
+ os = os.toLowerCase();
16
+ let UA = randUserAgent(device, browser, os);
17
+
18
+ if (browser === 'chrome') {
19
+ while (UA.includes('Chrome-Lighthouse') || UA.includes('Gener8') || UA.includes('HeadlessChrome') || UA.includes('SMTBot')) {
20
+ UA = randUserAgent(device, browser, os);
21
+ }
22
+ }
23
+ if (browser === 'safari') {
24
+ while (UA.includes('Applebot')) {
25
+ UA = randUserAgent(device, browser, os);
26
+ }
27
+ }
28
+ return UA;
29
+ };
@@ -14,7 +14,7 @@ if (config.proxyUri && typeof config.proxyUri === 'string') {
14
14
  HttpsProxyAgent = HttpsProxyAgent || require('https-proxy-agent');
15
15
  proxy = new HttpsProxyAgent(config.proxyUri);
16
16
  } else if (config.proxyUri.startsWith('socks')) {
17
- SocksProxyAgent = SocksProxyAgent || require('socks-proxy-agent');
17
+ SocksProxyAgent = SocksProxyAgent || require('socks-proxy-agent').SocksProxyAgent;
18
18
  proxy = new SocksProxyAgent(config.proxyUri);
19
19
  } else {
20
20
  throw 'Unknown proxy-uri format';
@@ -30,7 +30,7 @@ if (config.proxyUri && typeof config.proxyUri === 'string') {
30
30
 
31
31
  switch (config.proxy.protocol) {
32
32
  case 'socks':
33
- SocksProxyAgent = SocksProxyAgent || require('socks-proxy-agent');
33
+ SocksProxyAgent = SocksProxyAgent || require('socks-proxy-agent').SocksProxyAgent;
34
34
  agent.http = new SocksProxyAgent(proxyUrl);
35
35
  agent.https = new SocksProxyAgent(proxyUrl);
36
36
  break;
@@ -102,9 +102,6 @@ const requestWrapper = (url, options) => {
102
102
  options.headers['user-agent'] = config.ua;
103
103
  }
104
104
 
105
- // server
106
- options.headers.server = 'RSSHub';
107
-
108
105
  try {
109
106
  const urlHandler = new URL(url);
110
107
  // referer