rsshub 1.0.0-master.f7c0247 → 1.0.0-master.f7c4a93

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 (478) hide show
  1. package/lib/config.js +11 -1
  2. package/lib/middleware/anti-hotlink.js +90 -22
  3. package/lib/middleware/cache/redis.js +7 -2
  4. package/lib/middleware/onerror.js +2 -1
  5. package/lib/middleware/parameter.js +76 -35
  6. package/lib/middleware/templates/iframe.art +14 -0
  7. package/lib/radar-rules.js +0 -163
  8. package/lib/router.js +79 -94
  9. package/lib/routes/agefans/update.js +1 -1
  10. package/lib/routes/index.js +1 -1
  11. package/lib/routes/novel/biqugeinfo.js +2 -2
  12. package/lib/routes/universities/uestc/sice.js +12 -33
  13. package/lib/routes/weibo/user.js +20 -28
  14. package/lib/utils/cf-email.js +36 -0
  15. package/lib/utils/parse-date.js +4 -2
  16. package/lib/utils/puppeteer.js +22 -0
  17. package/lib/utils/wechat-mp.js +1 -0
  18. package/lib/v2/19lou/index.js +74 -0
  19. package/lib/v2/19lou/maintainer.js +3 -0
  20. package/lib/v2/19lou/radar.js +29 -0
  21. package/lib/v2/19lou/router.js +3 -0
  22. package/lib/v2/7mmtv/index.js +86 -0
  23. package/lib/v2/7mmtv/maintainer.js +4 -0
  24. package/lib/v2/7mmtv/radar.js +19 -0
  25. package/lib/v2/7mmtv/router.js +3 -0
  26. package/lib/v2/7mmtv/templates/description.art +11 -0
  27. package/lib/v2/91porn/index.js +58 -0
  28. package/lib/v2/91porn/maintainer.js +3 -0
  29. package/lib/v2/91porn/radar.js +13 -0
  30. package/lib/v2/91porn/router.js +3 -0
  31. package/lib/v2/91porn/templates/index.art +1 -0
  32. package/lib/v2/9to5/maintainer.js +3 -0
  33. package/lib/v2/9to5/radar.js +35 -0
  34. package/lib/v2/9to5/router.js +3 -0
  35. package/lib/{routes → v2}/9to5/subsite.js +20 -17
  36. package/lib/{routes → v2}/9to5/utils.js +4 -1
  37. package/lib/{routes → v2}/aliyun/database_month.js +8 -13
  38. package/lib/{routes → v2}/aliyun/developer/group.js +6 -1
  39. package/lib/v2/aliyun/maintainer.js +5 -0
  40. package/lib/{routes → v2}/aliyun/notice.js +13 -21
  41. package/lib/v2/aliyun/radar.js +32 -0
  42. package/lib/v2/aliyun/router.js +5 -0
  43. package/lib/v2/apnews/maintainer.js +3 -0
  44. package/lib/v2/apnews/radar.js +13 -0
  45. package/lib/v2/apnews/router.js +3 -0
  46. package/lib/v2/apnews/templates/description.art +14 -0
  47. package/lib/v2/apnews/topics.js +44 -0
  48. package/lib/{routes → v2}/asiantolick/index.js +20 -17
  49. package/lib/v2/asiantolick/maintainer.js +6 -0
  50. package/lib/v2/asiantolick/radar.js +31 -0
  51. package/lib/v2/asiantolick/router.js +3 -0
  52. package/lib/v2/asiantolick/templates/description.art +3 -0
  53. package/lib/v2/behance/maintainer.js +3 -0
  54. package/lib/v2/behance/radar.js +26 -0
  55. package/lib/v2/behance/router.js +3 -0
  56. package/lib/v2/behance/user.js +67 -0
  57. package/lib/v2/caareviews/book.js +14 -0
  58. package/lib/v2/caareviews/essay.js +14 -0
  59. package/lib/v2/caareviews/exhibition.js +14 -0
  60. package/lib/v2/caareviews/maintainer.js +5 -0
  61. package/lib/v2/caareviews/radar.js +25 -0
  62. package/lib/v2/caareviews/router.js +5 -0
  63. package/lib/v2/caareviews/templates/utils.art +2 -0
  64. package/lib/v2/caareviews/utils.js +49 -0
  65. package/lib/v2/ccac/news.js +12 -3
  66. package/lib/v2/chinanews/index.js +4 -3
  67. package/lib/v2/cn-healthcare/index.js +31 -0
  68. package/lib/v2/cn-healthcare/maintainer.js +3 -0
  69. package/lib/v2/cn-healthcare/radar.js +13 -0
  70. package/lib/v2/cn-healthcare/router.js +3 -0
  71. package/lib/v2/cncf/index.js +43 -0
  72. package/lib/v2/cncf/maintainer.js +3 -0
  73. package/lib/v2/cncf/radar.js +31 -0
  74. package/lib/v2/cncf/reports.js +38 -0
  75. package/lib/v2/cncf/router.js +4 -0
  76. package/lib/v2/cnjxol/index.js +94 -0
  77. package/lib/v2/cnjxol/maintainer.js +4 -0
  78. package/lib/v2/cnjxol/radar.js +19 -0
  79. package/lib/v2/cnjxol/router.js +3 -0
  80. package/lib/v2/cnjxol/templates/description.art +2 -0
  81. package/lib/v2/cntheory/maintainer.js +3 -0
  82. package/lib/v2/cntheory/paper.js +93 -0
  83. package/lib/v2/cntheory/radar.js +13 -0
  84. package/lib/v2/cntheory/router.js +3 -0
  85. package/lib/v2/cntheory/templates/description.art +2 -0
  86. package/lib/v2/cscse/maintainer.js +3 -0
  87. package/lib/v2/cscse/radar.js +13 -0
  88. package/lib/v2/cscse/router.js +3 -0
  89. package/lib/v2/cscse/tzgg.js +54 -0
  90. package/lib/v2/diandong/ddh.js +51 -0
  91. package/lib/v2/diandong/maintainer.js +4 -0
  92. package/lib/v2/diandong/news.js +50 -0
  93. package/lib/v2/diandong/radar.js +19 -0
  94. package/lib/v2/diandong/router.js +4 -0
  95. package/lib/v2/domp4/detail.js +67 -0
  96. package/lib/v2/domp4/latest.js +31 -0
  97. package/lib/v2/domp4/maintainer.js +4 -0
  98. package/lib/v2/domp4/radar.js +25 -0
  99. package/lib/v2/domp4/router.js +4 -0
  100. package/lib/v2/domp4/utils.js +72 -0
  101. package/lib/v2/douyin/hashtag.js +133 -0
  102. package/lib/v2/douyin/radar.js +6 -0
  103. package/lib/v2/douyin/router.js +1 -0
  104. package/lib/v2/douyin/user.js +10 -1
  105. package/lib/{routes → v2}/earthquake/ceic.js +3 -1
  106. package/lib/{routes → v2}/earthquake/index.js +5 -3
  107. package/lib/v2/earthquake/maintainer.js +4 -0
  108. package/lib/v2/earthquake/radar.js +24 -0
  109. package/lib/v2/earthquake/router.js +4 -0
  110. package/lib/{routes/the-economist → v2/economist}/download.js +0 -0
  111. package/lib/v2/economist/espresso.js +50 -0
  112. package/lib/v2/economist/full.js +42 -0
  113. package/lib/v2/economist/gre-vocabulary.js +19 -0
  114. package/lib/v2/economist/maintainer.js +6 -0
  115. package/lib/v2/economist/radar.js +27 -0
  116. package/lib/v2/economist/router.js +6 -0
  117. package/lib/v2/elasticsearch-cn/index.js +57 -0
  118. package/lib/v2/elasticsearch-cn/maintainer.js +3 -0
  119. package/lib/v2/elasticsearch-cn/radar.js +13 -0
  120. package/lib/v2/elasticsearch-cn/router.js +3 -0
  121. package/lib/v2/elsevier/issue.js +62 -0
  122. package/lib/v2/elsevier/journal.js +72 -0
  123. package/lib/v2/elsevier/maintainer.js +2 -2
  124. package/lib/v2/elsevier/radar.js +5 -5
  125. package/lib/v2/elsevier/router.js +4 -2
  126. package/lib/v2/elsevier/templates/description.art +5 -5
  127. package/lib/v2/epicgames/index.js +45 -11
  128. package/lib/v2/feng/forum.js +42 -0
  129. package/lib/v2/feng/radar.js +13 -0
  130. package/lib/v2/feng/router.js +3 -0
  131. package/lib/v2/feng/templates/deleted.art +2 -0
  132. package/lib/v2/feng/templates/img.art +6 -0
  133. package/lib/v2/feng/utils.js +80 -0
  134. package/lib/v2/fx-markets/channel.js +56 -0
  135. package/lib/v2/fx-markets/maintainer.js +3 -0
  136. package/lib/v2/fx-markets/radar.js +31 -0
  137. package/lib/v2/fx-markets/router.js +3 -0
  138. package/lib/v2/gcores/category.js +5 -1
  139. package/lib/v2/gcores/tag.js +5 -1
  140. package/lib/v2/getitfree/index.js +54 -0
  141. package/lib/v2/getitfree/maintainer.js +3 -0
  142. package/lib/v2/getitfree/radar.js +13 -0
  143. package/lib/v2/getitfree/router.js +3 -0
  144. package/lib/v2/gitee/maintainer.js +6 -0
  145. package/lib/v2/gitee/radar.js +31 -0
  146. package/lib/v2/gitee/repos/commits.js +40 -0
  147. package/lib/v2/gitee/repos/events.js +66 -0
  148. package/lib/v2/gitee/repos/releases.js +33 -0
  149. package/lib/v2/gitee/router.js +6 -0
  150. package/lib/v2/gitee/users/events.js +84 -0
  151. package/lib/v2/gov/beijing/jw/tzgg.js +58 -0
  152. package/lib/v2/gov/customs/list.js +80 -0
  153. package/lib/v2/gov/customs/utils.js +21 -0
  154. package/lib/v2/gov/maintainer.js +4 -1
  155. package/lib/v2/gov/miit/wjgs.js +50 -41
  156. package/lib/v2/gov/miit/zcjd.js +50 -41
  157. package/lib/v2/gov/pbc/goutongjiaoliu.js +20 -15
  158. package/lib/v2/gov/pbc/tradeAnnouncement.js +18 -14
  159. package/lib/v2/gov/radar.js +45 -26
  160. package/lib/v2/gov/router.js +2 -0
  161. package/lib/v2/gumroad/index.js +35 -0
  162. package/lib/v2/gumroad/maintainer.js +3 -0
  163. package/lib/v2/gumroad/radar.js +17 -0
  164. package/lib/v2/gumroad/router.js +3 -0
  165. package/lib/v2/gumroad/templates/products.art +7 -0
  166. package/lib/v2/hackertalk/index.js +23 -0
  167. package/lib/v2/hackertalk/maintainer.js +3 -0
  168. package/lib/v2/hackertalk/radar.js +13 -0
  169. package/lib/v2/hackertalk/router.js +3 -0
  170. package/lib/v2/hashnode/blog.js +62 -0
  171. package/lib/v2/hashnode/maintainer.js +3 -0
  172. package/lib/v2/hashnode/radar.js +13 -0
  173. package/lib/v2/hashnode/router.js +3 -0
  174. package/lib/v2/hashnode/templates/description.art +2 -0
  175. package/lib/v2/heu/gx/list.js +2 -2
  176. package/lib/v2/heu/job/list.js +2 -2
  177. package/lib/v2/heu/uae/list.js +2 -2
  178. package/lib/v2/heu/yjsy/list.js +2 -2
  179. package/lib/v2/hk01/channel.js +40 -0
  180. package/lib/{routes → v2}/hk01/hot.js +2 -1
  181. package/lib/v2/hk01/issue.js +41 -0
  182. package/lib/v2/hk01/maintainer.js +7 -0
  183. package/lib/v2/hk01/radar.js +37 -0
  184. package/lib/v2/hk01/router.js +7 -0
  185. package/lib/{routes → v2}/hk01/tag.js +2 -1
  186. package/lib/{routes → v2}/hk01/zone.js +3 -2
  187. package/lib/v2/hotukdeals/index.js +1 -1
  188. package/lib/{routes → v2}/huxiu/article.js +1 -1
  189. package/lib/{routes → v2}/huxiu/author.js +18 -6
  190. package/lib/{routes → v2}/huxiu/collection.js +1 -2
  191. package/lib/v2/huxiu/maintainer.js +7 -0
  192. package/lib/v2/huxiu/radar.js +35 -0
  193. package/lib/v2/huxiu/router.js +7 -0
  194. package/lib/{routes → v2}/huxiu/search.js +0 -0
  195. package/lib/{routes → v2}/huxiu/tag.js +0 -0
  196. package/lib/{routes → v2}/huxiu/utils.js +3 -4
  197. package/lib/v2/ieee/journal.js +78 -0
  198. package/lib/v2/ieee/maintainer.js +2 -2
  199. package/lib/v2/ieee/radar.js +4 -4
  200. package/lib/v2/ieee/{latestdate.js → recent.js} +34 -42
  201. package/lib/v2/ieee/router.js +4 -2
  202. package/lib/v2/ieee/templates/description.art +5 -5
  203. package/lib/v2/ielts/index.js +32 -26
  204. package/lib/v2/itch/devlog.js +62 -0
  205. package/lib/v2/itch/index.js +56 -0
  206. package/lib/v2/itch/maintainer.js +5 -0
  207. package/lib/v2/itch/posts.js +41 -0
  208. package/lib/v2/itch/radar.js +28 -0
  209. package/lib/v2/itch/router.js +5 -0
  210. package/lib/v2/itch/templates/description.art +4 -0
  211. package/lib/v2/jike/utils.js +32 -1
  212. package/lib/{routes → v2}/juejin/books.js +2 -1
  213. package/lib/{routes → v2}/juejin/category.js +1 -1
  214. package/lib/{routes → v2}/juejin/collection.js +0 -0
  215. package/lib/{routes → v2}/juejin/column.js +0 -0
  216. package/lib/{routes → v2}/juejin/favorites.js +0 -0
  217. package/lib/v2/juejin/maintainer.js +13 -0
  218. package/lib/v2/juejin/news.js +25 -0
  219. package/lib/{routes → v2}/juejin/pins.js +3 -2
  220. package/lib/{routes → v2}/juejin/posts.js +0 -0
  221. package/lib/v2/juejin/radar.js +61 -0
  222. package/lib/v2/juejin/router.js +13 -0
  223. package/lib/{routes → v2}/juejin/shares.js +0 -0
  224. package/lib/{routes → v2}/juejin/tag.js +0 -0
  225. package/lib/{routes → v2}/juejin/trending.js +0 -0
  226. package/lib/{routes → v2}/juejin/utils.js +15 -7
  227. package/lib/v2/kcna/maintainer.js +3 -0
  228. package/lib/v2/kcna/news.js +81 -0
  229. package/lib/v2/kcna/radar.js +61 -0
  230. package/lib/v2/kcna/router.js +3 -0
  231. package/lib/v2/kcna/templates/news.art +9 -0
  232. package/lib/v2/kcna/utils.js +64 -0
  233. package/lib/v2/keep/maintainer.js +3 -0
  234. package/lib/v2/keep/radar.js +13 -0
  235. package/lib/v2/keep/router.js +3 -0
  236. package/lib/v2/keep/templates/user.art +16 -0
  237. package/lib/{routes → v2}/keep/user.js +14 -4
  238. package/lib/v2/laohu8/maintainer.js +3 -0
  239. package/lib/v2/laohu8/personal.js +32 -0
  240. package/lib/v2/laohu8/radar.js +13 -0
  241. package/lib/v2/laohu8/router.js +3 -0
  242. package/lib/v2/lever/index.js +28 -0
  243. package/lib/v2/lever/maintainer.js +3 -0
  244. package/lib/v2/lever/radar.js +13 -0
  245. package/lib/v2/lever/router.js +3 -0
  246. package/lib/v2/mdpi/journal.js +65 -0
  247. package/lib/v2/mdpi/maintainer.js +3 -0
  248. package/lib/v2/mdpi/radar.js +13 -0
  249. package/lib/v2/mdpi/router.js +3 -0
  250. package/lib/v2/mdpi/templates/description.art +12 -0
  251. package/lib/v2/mihoyo/bbs.js +1 -0
  252. package/lib/v2/mihoyo/radar.js +2 -2
  253. package/lib/v2/mirror/index.js +34 -0
  254. package/lib/v2/mirror/maintainer.js +3 -0
  255. package/lib/v2/mirror/radar.js +17 -0
  256. package/lib/v2/mirror/router.js +3 -0
  257. package/lib/v2/mobilism/forums.js +75 -0
  258. package/lib/v2/mobilism/maintainer.js +4 -0
  259. package/lib/v2/mobilism/portal.js +54 -0
  260. package/lib/v2/mobilism/radar.js +23 -0
  261. package/lib/v2/mobilism/router.js +4 -0
  262. package/lib/{routes → v2}/mp4er/index.js +1 -1
  263. package/lib/v2/mp4er/maintainer.js +3 -0
  264. package/lib/v2/mp4er/radar.js +13 -0
  265. package/lib/v2/mp4er/router.js +3 -0
  266. package/lib/v2/mysql/maintainer.js +3 -0
  267. package/lib/v2/mysql/radar.js +13 -0
  268. package/lib/v2/mysql/release.js +55 -0
  269. package/lib/v2/mysql/router.js +3 -0
  270. package/lib/v2/nbd/radar.js +2 -2
  271. package/lib/v2/ncwu/maintainer.js +3 -0
  272. package/lib/v2/ncwu/notice.js +27 -0
  273. package/lib/v2/ncwu/radar.js +13 -0
  274. package/lib/v2/ncwu/router.js +3 -0
  275. package/lib/v2/nhk/news.js +41 -0
  276. package/lib/{routes → v2}/nhk/news_web_easy.js +20 -20
  277. package/lib/v2/nhk/radar.js +19 -0
  278. package/lib/v2/nhk/router.js +4 -0
  279. package/lib/v2/nhk/templates/news.art +5 -0
  280. package/lib/v2/nju/rczp.js +34 -24
  281. package/lib/v2/njust/utils.js +4 -0
  282. package/lib/v2/nuaa/utils/pypasswaf.js +4 -5
  283. package/lib/v2/nytimes/daily_briefing_chinese.js +66 -41
  284. package/lib/v2/nytimes/index.js +3 -3
  285. package/lib/v2/nytimes/maintainer.js +1 -1
  286. package/lib/v2/nytimes/templates/image.art +4 -0
  287. package/lib/v2/nytimes/utils.js +7 -1
  288. package/lib/v2/oceanengine/arithmeticIndex.js +145 -0
  289. package/lib/v2/oceanengine/maintainer.js +3 -0
  290. package/lib/v2/oceanengine/radar.js +13 -0
  291. package/lib/v2/oceanengine/router.js +3 -0
  292. package/lib/v2/oceanengine/templates/content.art +14 -0
  293. package/lib/v2/openwrt/maintainer.js +3 -0
  294. package/lib/v2/openwrt/radar.js +13 -0
  295. package/lib/v2/openwrt/releases.js +25 -0
  296. package/lib/v2/openwrt/router.js +3 -0
  297. package/lib/v2/orcid/index.js +1 -1
  298. package/lib/v2/orcid/templates/description.art +2 -2
  299. package/lib/v2/panewslab/{column.js → author.js} +11 -23
  300. package/lib/v2/panewslab/index.js +24 -17
  301. package/lib/v2/panewslab/maintainer.js +3 -1
  302. package/lib/v2/panewslab/news.js +28 -0
  303. package/lib/v2/panewslab/radar.js +2 -2
  304. package/lib/v2/panewslab/router.js +4 -2
  305. package/lib/v2/panewslab/topic.js +7 -14
  306. package/lib/v2/pincong/hot.js +28 -0
  307. package/lib/{routes → v2}/pincong/index.js +6 -12
  308. package/lib/v2/pincong/maintainer.js +5 -0
  309. package/lib/v2/pincong/radar.js +35 -0
  310. package/lib/v2/pincong/router.js +5 -0
  311. package/lib/v2/pincong/topic.js +25 -0
  312. package/lib/v2/pincong/utils.js +22 -0
  313. package/lib/v2/pku/maintainer.js +1 -0
  314. package/lib/v2/pku/nsd.js +69 -0
  315. package/lib/v2/pku/radar.js +8 -0
  316. package/lib/v2/pku/router.js +1 -0
  317. package/lib/v2/playno1/av.js +41 -0
  318. package/lib/v2/playno1/maintainer.js +4 -0
  319. package/lib/v2/playno1/radar.js +21 -0
  320. package/lib/v2/playno1/router.js +4 -0
  321. package/lib/v2/playno1/st.js +36 -0
  322. package/lib/v2/playno1/utils.js +32 -0
  323. package/lib/v2/pmthinking/index.js +61 -0
  324. package/lib/v2/pmthinking/maintainer.js +3 -0
  325. package/lib/v2/pmthinking/radar.js +13 -0
  326. package/lib/v2/pmthinking/router.js +3 -0
  327. package/lib/v2/pmthinking/templates/description.art +4 -0
  328. package/lib/v2/prestige-av/maintainer.js +3 -0
  329. package/lib/v2/prestige-av/radar.js +18 -0
  330. package/lib/v2/prestige-av/router.js +3 -0
  331. package/lib/{routes → v2}/prestige-av/series.js +8 -5
  332. package/lib/v2/qipamaijia/index.js +26 -0
  333. package/lib/v2/qipamaijia/maintainer.js +3 -0
  334. package/lib/v2/qipamaijia/radar.js +13 -0
  335. package/lib/v2/qipamaijia/router.js +3 -0
  336. package/lib/v2/reuters/common.js +54 -0
  337. package/lib/v2/reuters/investigates.js +39 -0
  338. package/lib/v2/reuters/maintainer.js +6 -0
  339. package/lib/v2/reuters/migration_prompt.js +3 -0
  340. package/lib/v2/reuters/radar.js +19 -0
  341. package/lib/v2/reuters/router.js +6 -0
  342. package/lib/v2/sciencedirect/journal.js +8 -1
  343. package/lib/v2/{jasa/latest.js → scitation/journal.js} +24 -27
  344. package/lib/v2/scitation/maintainer.js +4 -0
  345. package/lib/v2/scitation/radar.js +19 -0
  346. package/lib/v2/scitation/router.js +4 -0
  347. package/lib/v2/scitation/section.js +90 -0
  348. package/lib/v2/scitation/templates/description.art +11 -0
  349. package/lib/v2/sis001/forum.js +62 -0
  350. package/lib/v2/sis001/maintainer.js +3 -0
  351. package/lib/v2/sis001/radar.js +13 -0
  352. package/lib/v2/sis001/router.js +3 -0
  353. package/lib/{routes → v2}/sobooks/date.js +1 -1
  354. package/lib/{routes → v2}/sobooks/index.js +1 -1
  355. package/lib/v2/sobooks/maintainer.js +5 -0
  356. package/lib/v2/sobooks/radar.js +25 -0
  357. package/lib/v2/sobooks/router.js +5 -0
  358. package/lib/{routes → v2}/sobooks/tag.js +1 -1
  359. package/lib/{routes → v2}/sobooks/utils.js +3 -2
  360. package/lib/v2/springer/journal.js +72 -0
  361. package/lib/v2/springer/maintainer.js +3 -0
  362. package/lib/v2/springer/radar.js +13 -0
  363. package/lib/v2/springer/router.js +3 -0
  364. package/lib/v2/springer/templates/description.art +12 -0
  365. package/lib/v2/sspai/maintainer.js +1 -0
  366. package/lib/v2/sspai/radar.js +6 -0
  367. package/lib/v2/sspai/router.js +1 -0
  368. package/lib/v2/sspai/seriesUpdate.js +36 -0
  369. package/lib/v2/supchina/index.js +67 -0
  370. package/lib/v2/supchina/maintainer.js +4 -0
  371. package/lib/v2/supchina/podcasts.js +66 -0
  372. package/lib/v2/supchina/radar.js +19 -0
  373. package/lib/v2/supchina/router.js +4 -0
  374. package/lib/v2/techflow520/index.js +34 -0
  375. package/lib/v2/techflow520/maintainer.js +4 -0
  376. package/lib/v2/techflow520/newsflash.js +32 -0
  377. package/lib/v2/techflow520/radar.js +19 -0
  378. package/lib/v2/techflow520/router.js +4 -0
  379. package/lib/v2/tencent/cloud/column.js +51 -0
  380. package/lib/v2/tencent/maintainer.js +1 -0
  381. package/lib/v2/tencent/radar.js +11 -0
  382. package/lib/v2/tencent/router.js +1 -0
  383. package/lib/v2/test/index.js +23 -2
  384. package/lib/v2/tiktok/maintainer.js +3 -0
  385. package/lib/v2/tiktok/radar.js +13 -0
  386. package/lib/v2/tiktok/router.js +3 -0
  387. package/lib/v2/tiktok/templates/user.art +3 -0
  388. package/lib/v2/tiktok/user.js +89 -0
  389. package/lib/v2/tingshuitz/dalian.js +29 -0
  390. package/lib/{routes → v2}/tingshuitz/dongguan.js +2 -1
  391. package/lib/{routes → v2}/tingshuitz/guangzhou.js +0 -0
  392. package/lib/{routes → v2}/tingshuitz/hangzhou.js +0 -0
  393. package/lib/v2/tingshuitz/maintainer.js +11 -0
  394. package/lib/{routes → v2}/tingshuitz/nanjing.js +9 -11
  395. package/lib/v2/tingshuitz/radar.js +68 -0
  396. package/lib/v2/tingshuitz/router.js +11 -0
  397. package/lib/v2/tingshuitz/wuhan.js +32 -0
  398. package/lib/{routes → v2}/tingshuitz/xian.js +1 -1
  399. package/lib/{routes → v2}/tingshuitz/xiaoshan.js +0 -0
  400. package/lib/{routes → v2}/tingshuitz/yangjiang.js +6 -8
  401. package/lib/v2/trending/allTrending.js +169 -0
  402. package/lib/v2/trending/maintainer.js +3 -0
  403. package/lib/v2/trending/radar.js +35 -0
  404. package/lib/v2/trending/router.js +3 -0
  405. package/lib/v2/trending/templates/content.art +24 -0
  406. package/lib/v2/uraaka-joshi/uraaka-joshi-user.js +7 -1
  407. package/lib/v2/uraaka-joshi/uraaka-joshi.js +8 -1
  408. package/lib/v2/usts/jwch.js +56 -0
  409. package/lib/v2/usts/maintainer.js +3 -0
  410. package/lib/v2/usts/radar.js +25 -0
  411. package/lib/v2/usts/router.js +3 -0
  412. package/lib/v2/wallpaperhub/index.js +28 -0
  413. package/lib/v2/wallpaperhub/maintainer.js +3 -0
  414. package/lib/v2/wallpaperhub/radar.js +13 -0
  415. package/lib/v2/wallpaperhub/router.js +3 -0
  416. package/lib/v2/wallpaperhub/templates/description.art +1 -0
  417. package/lib/{routes → v2}/xiaohongshu/board.js +8 -6
  418. package/lib/v2/xiaohongshu/maintainer.js +4 -0
  419. package/lib/v2/xiaohongshu/radar.js +25 -0
  420. package/lib/v2/xiaohongshu/router.js +4 -0
  421. package/lib/{routes → v2}/xiaohongshu/user.js +9 -11
  422. package/lib/v2/xiaohongshu/util.js +32 -0
  423. package/lib/v2/xiaozhuanlan/column.js +52 -0
  424. package/lib/v2/xiaozhuanlan/maintainer.js +3 -0
  425. package/lib/v2/xiaozhuanlan/radar.js +13 -0
  426. package/lib/v2/xiaozhuanlan/router.js +3 -0
  427. package/lib/v2/xidian/jwc.js +54 -0
  428. package/lib/v2/xidian/maintainer.js +3 -0
  429. package/lib/v2/xidian/radar.js +13 -0
  430. package/lib/v2/xidian/router.js +3 -0
  431. package/lib/{routes → v2}/youtube/channel.js +9 -5
  432. package/lib/v2/youtube/maintainer.js +6 -0
  433. package/lib/{routes → v2}/youtube/playlist.js +6 -10
  434. package/lib/v2/youtube/radar.js +31 -0
  435. package/lib/v2/youtube/router.js +6 -0
  436. package/lib/v2/youtube/subscriptions.js +56 -0
  437. package/lib/v2/youtube/templates/description.art +7 -0
  438. package/lib/{routes → v2}/youtube/user.js +4 -5
  439. package/lib/v2/youtube/utils.js +141 -0
  440. package/lib/v2/zhihu/activities.js +36 -0
  441. package/lib/v2/zyshow/index.js +46 -0
  442. package/lib/v2/zyshow/maintainer.js +3 -0
  443. package/lib/v2/zyshow/radar.js +17 -0
  444. package/lib/v2/zyshow/router.js +3 -0
  445. package/lib/v2/zyshow/templates/description.art +16 -0
  446. package/package.json +21 -20
  447. package/lib/routes/apnews/topics.js +0 -43
  448. package/lib/routes/behance/index.js +0 -58
  449. package/lib/routes/gov/customs/list.js +0 -77
  450. package/lib/routes/hk01/channel.js +0 -22
  451. package/lib/routes/hk01/issue.js +0 -22
  452. package/lib/routes/mirror/entries.js +0 -80
  453. package/lib/routes/mobilism/release.js +0 -42
  454. package/lib/routes/pincong/hot.js +0 -33
  455. package/lib/routes/pincong/topic.js +0 -32
  456. package/lib/routes/reuters/channel.js +0 -155
  457. package/lib/routes/reuters/theWire.js +0 -45
  458. package/lib/routes/reuters/utils.js +0 -72
  459. package/lib/routes/the-economist/full.js +0 -48
  460. package/lib/routes/the-economist/gre-vocabulary.js +0 -27
  461. package/lib/routes/tingshuitz/dalian.js +0 -34
  462. package/lib/routes/tingshuitz/wuhan.js +0 -34
  463. package/lib/routes/universities/ncwu/notice.js +0 -42
  464. package/lib/routes/universities/xidian/jwc.js +0 -70
  465. package/lib/routes/waijiedanao/article.js +0 -78
  466. package/lib/routes/wallpaperhub/index.js +0 -22
  467. package/lib/routes/xiaohongshu/util.js +0 -18
  468. package/lib/routes/youtube/utils.js +0 -90
  469. package/lib/routes/zyshow/index.js +0 -42
  470. package/lib/v2/elsevier/latest.js +0 -87
  471. package/lib/v2/elsevier/volume.js +0 -75
  472. package/lib/v2/ieee/latestvol.js +0 -87
  473. package/lib/v2/jasa/maintainer.js +0 -4
  474. package/lib/v2/jasa/radar.js +0 -19
  475. package/lib/v2/jasa/router.js +0 -4
  476. package/lib/v2/jasa/section.js +0 -95
  477. package/lib/v2/jasa/templates/description.art +0 -11
  478. package/lib/v2/panewslab/newsflash.js +0 -35
package/lib/router.js CHANGED
@@ -68,17 +68,18 @@ router.get('/ncm/artist/:id', lazyloadRouteHandler('./routes/ncm/artist'));
68
68
  router.get('/ncm/djradio/:id', lazyloadRouteHandler('./routes/ncm/djradio'));
69
69
  router.get('/ncm/user/playrecords/:uid/:type?', lazyloadRouteHandler('./routes/ncm/userplayrecords'));
70
70
 
71
- // 掘金
72
- router.get('/juejin/category/:category', lazyloadRouteHandler('./routes/juejin/category'));
73
- router.get('/juejin/tag/:tag', lazyloadRouteHandler('./routes/juejin/tag'));
74
- router.get('/juejin/trending/:category/:type', lazyloadRouteHandler('./routes/juejin/trending'));
75
- router.get('/juejin/books', lazyloadRouteHandler('./routes/juejin/books'));
76
- router.get('/juejin/pins/:type?', lazyloadRouteHandler('./routes/juejin/pins'));
77
- router.get('/juejin/posts/:id', lazyloadRouteHandler('./routes/juejin/posts'));
78
- router.get('/juejin/collections/:userId', lazyloadRouteHandler('./routes/juejin/favorites'));
79
- router.get('/juejin/collection/:collectionId', lazyloadRouteHandler('./routes/juejin/collection'));
80
- router.get('/juejin/shares/:userId', lazyloadRouteHandler('./routes/juejin/shares'));
81
- router.get('/juejin/column/:id', lazyloadRouteHandler('./routes/juejin/column'));
71
+ // 掘金 migrated to v2
72
+ // router.get('/juejin/category/:category', lazyloadRouteHandler('./routes/juejin/category'));
73
+ // router.get('/juejin/tag/:tag', lazyloadRouteHandler('./routes/juejin/tag'));
74
+ // router.get('/juejin/trending/:category/:type', lazyloadRouteHandler('./routes/juejin/trending'));
75
+ // router.get('/juejin/books', lazyloadRouteHandler('./routes/juejin/books'));
76
+ // router.get('/juejin/pins/:type?', lazyloadRouteHandler('./routes/juejin/pins'));
77
+ // router.get('/juejin/posts/:id', lazyloadRouteHandler('./routes/juejin/posts'));
78
+ // router.get('/juejin/news/:id', lazyloadRouteHandler('./routes/juejin/news'));
79
+ // router.get('/juejin/collections/:userId', lazyloadRouteHandler('./routes/juejin/favorites'));
80
+ // router.get('/juejin/collection/:collectionId', lazyloadRouteHandler('./routes/juejin/collection'));
81
+ // router.get('/juejin/shares/:userId', lazyloadRouteHandler('./routes/juejin/shares'));
82
+ // router.get('/juejin/column/:id', lazyloadRouteHandler('./routes/juejin/column'));
82
83
 
83
84
  // 自如
84
85
  router.get('/ziroom/room/:city/:iswhole/:room/:keyword', lazyloadRouteHandler('./routes/ziroom/room'));
@@ -159,10 +160,10 @@ router.get('/twitter/keyword/:keyword/:routeParams?/:limit?', lazyloadRouteHandl
159
160
  router.get('/twitter/trends/:woeid?', lazyloadRouteHandler('./routes/twitter/trends'));
160
161
  router.get('/twitter/media/:id/:routeParams?', lazyloadRouteHandler('./routes/twitter/media'));
161
162
 
162
- // YouTube
163
- router.get('/youtube/user/:username/:embed?', lazyloadRouteHandler('./routes/youtube/user'));
164
- router.get('/youtube/channel/:id/:embed?', lazyloadRouteHandler('./routes/youtube/channel'));
165
- router.get('/youtube/playlist/:id/:embed?', lazyloadRouteHandler('./routes/youtube/playlist'));
163
+ // YouTube migrated to v2
164
+ // router.get('/youtube/user/:username/:embed?', lazyloadRouteHandler('./routes/youtube/user'));
165
+ // router.get('/youtube/channel/:id/:embed?', lazyloadRouteHandler('./routes/youtube/channel'));
166
+ // router.get('/youtube/playlist/:id/:embed?', lazyloadRouteHandler('./routes/youtube/playlist'));
166
167
 
167
168
  // 极客时间
168
169
  router.get('/geektime/column/:cid', lazyloadRouteHandler('./routes/geektime/column'));
@@ -227,8 +228,8 @@ router.get('/pornhub/:language?/users/:username', lazyloadRouteHandler('./routes
227
228
  router.get('/pornhub/:language?/model/:username/:sort?', lazyloadRouteHandler('./routes/pornhub/model'));
228
229
  router.get('/pornhub/:language?/pornstar/:username/:sort?', lazyloadRouteHandler('./routes/pornhub/pornstar'));
229
230
 
230
- // Prestige
231
- router.get('/prestige-av/series/:mid/:sort?', lazyloadRouteHandler('./routes/prestige-av/series'));
231
+ // Prestige migrated to v2
232
+ // router.get('/prestige-av/series/:mid/:sort?', lazyloadRouteHandler('./routes/prestige-av/series'));
232
233
 
233
234
  // yande.re
234
235
  router.get('/yande.re/post/popular_recent', lazyloadRouteHandler('./routes/yande.re/post_popular_recent'));
@@ -263,16 +264,16 @@ router.get('/smzdm/baoliao/:uid', lazyloadRouteHandler('./routes/smzdm/baoliao')
263
264
  router.get('/bjnews/:cat', lazyloadRouteHandler('./routes/bjnews/news'));
264
265
  router.get('/bjnews/epaper/:cat', lazyloadRouteHandler('./routes/bjnews/epaper'));
265
266
 
266
- // 停水通知
267
- router.get('/tingshuitz/hangzhou', lazyloadRouteHandler('./routes/tingshuitz/hangzhou'));
268
- router.get('/tingshuitz/xiaoshan', lazyloadRouteHandler('./routes/tingshuitz/xiaoshan'));
269
- router.get('/tingshuitz/dalian', lazyloadRouteHandler('./routes/tingshuitz/dalian'));
270
- router.get('/tingshuitz/guangzhou', lazyloadRouteHandler('./routes/tingshuitz/guangzhou'));
271
- router.get('/tingshuitz/dongguan', lazyloadRouteHandler('./routes/tingshuitz/dongguan'));
272
- router.get('/tingshuitz/xian', lazyloadRouteHandler('./routes/tingshuitz/xian'));
273
- router.get('/tingshuitz/yangjiang', lazyloadRouteHandler('./routes/tingshuitz/yangjiang'));
274
- router.get('/tingshuitz/nanjing', lazyloadRouteHandler('./routes/tingshuitz/nanjing'));
275
- router.get('/tingshuitz/wuhan', lazyloadRouteHandler('./routes/tingshuitz/wuhan'));
267
+ // 停水通知 migrated to v2
268
+ // router.get('/tingshuitz/hangzhou', lazyloadRouteHandler('./routes/tingshuitz/hangzhou'));
269
+ // router.get('/tingshuitz/xiaoshan', lazyloadRouteHandler('./routes/tingshuitz/xiaoshan'));
270
+ // router.get('/tingshuitz/dalian', lazyloadRouteHandler('./routes/tingshuitz/dalian'));
271
+ // router.get('/tingshuitz/guangzhou', lazyloadRouteHandler('./routes/tingshuitz/guangzhou'));
272
+ // router.get('/tingshuitz/dongguan', lazyloadRouteHandler('./routes/tingshuitz/dongguan'));
273
+ // router.get('/tingshuitz/xian', lazyloadRouteHandler('./routes/tingshuitz/xian'));
274
+ // router.get('/tingshuitz/yangjiang', lazyloadRouteHandler('./routes/tingshuitz/yangjiang'));
275
+ // router.get('/tingshuitz/nanjing', lazyloadRouteHandler('./routes/tingshuitz/nanjing'));
276
+ // router.get('/tingshuitz/wuhan', lazyloadRouteHandler('./routes/tingshuitz/wuhan'));
276
277
 
277
278
  // 米哈游
278
279
  router.get('/mihoyo/bh3/:type', lazyloadRouteHandler('./routes/mihoyo/bh3'));
@@ -335,7 +336,7 @@ router.get('/miui/:device/:type?/:region?', lazyloadRouteHandler('./routes/mi/mi
335
336
  router.get('/mi/bbs/board/:boardId', lazyloadRouteHandler('./routes/mi/board'));
336
337
 
337
338
  // Keep
338
- router.get('/keep/user/:id', lazyloadRouteHandler('./routes/keep/user'));
339
+ // router.get('/keep/user/:id', lazyloadRouteHandler('./routes/keep/user'));
339
340
 
340
341
  // 起点
341
342
  router.get('/qidian/chapter/:id', lazyloadRouteHandler('./routes/qidian/chapter'));
@@ -453,11 +454,10 @@ router.get('/hopper/:lowestOnly/:from/:to?', lazyloadRouteHandler('./routes/hopp
453
454
  router.get('/mafengwo/note/:type', lazyloadRouteHandler('./routes/mafengwo/note'));
454
455
  router.get('/mafengwo/ziyouxing/:code', lazyloadRouteHandler('./routes/mafengwo/ziyouxing'));
455
456
 
456
- // 中国地震局震情速递(与地震台网同步更新)
457
- router.get('/earthquake/:region?', lazyloadRouteHandler('./routes/earthquake'));
458
-
457
+ // 中国地震局震情速递(与地震台网同步更新)migrated to v2
458
+ // router.get('/earthquake/:region?', lazyloadRouteHandler('./routes/earthquake'));
459
459
  // 中国地震台网
460
- router.get('/earthquake/ceic/:type', lazyloadRouteHandler('./routes/earthquake/ceic'));
460
+ // router.get('/earthquake/ceic/:type', lazyloadRouteHandler('./routes/earthquake/ceic'));
461
461
 
462
462
  // 小说
463
463
  router.get('/novel/biquge/:id', lazyloadRouteHandler('./routes/novel/biquge'));
@@ -759,7 +759,7 @@ router.get('/upc/main/:type?', lazyloadRouteHandler('./routes/universities/upc/m
759
759
  router.get('/upc/jsj/:type?', lazyloadRouteHandler('./routes/universities/upc/jsj'));
760
760
 
761
761
  // 华北水利水电大学
762
- router.get('/ncwu/notice', lazyloadRouteHandler('./routes/universities/ncwu/notice'));
762
+ // router.get('/ncwu/notice', lazyloadRouteHandler('./routes/universities/ncwu/notice'));
763
763
 
764
764
  // 太原师范学院
765
765
  router.get('/tynu', lazyloadRouteHandler('./routes/universities/tynu/tynu'));
@@ -867,8 +867,8 @@ router.get('/rs05/rs05', lazyloadRouteHandler('./routes/rs05/rs05'));
867
867
  // 趣头条
868
868
  router.get('/qutoutiao/category/:cid', lazyloadRouteHandler('./routes/qutoutiao/category'));
869
869
 
870
- // NHK NEW WEB EASY
871
- router.get('/nhk/news_web_easy', lazyloadRouteHandler('./routes/nhk/news_web_easy'));
870
+ // NHK NEW WEB EASY migrated to v2
871
+ // router.get('/nhk/news_web_easy', lazyloadRouteHandler('./routes/nhk/news_web_easy'));
872
872
 
873
873
  // BBC
874
874
  router.get('/bbc/:site?/:channel?', lazyloadRouteHandler('./routes/bbc/index'));
@@ -923,8 +923,8 @@ router.get('/dgtle/trade/search/:keyword', lazyloadRouteHandler('./routes/dgtle/
923
923
  router.get('/chouti/top/:hour?', lazyloadRouteHandler('./routes/chouti/top'));
924
924
  router.get('/chouti/:subject?', lazyloadRouteHandler('./routes/chouti'));
925
925
 
926
- // 西安电子科技大学
927
- router.get('/xidian/jwc/:category?', lazyloadRouteHandler('./routes/universities/xidian/jwc'));
926
+ // 西安电子科技大学 migrated to v2
927
+ // router.get('/xidian/jwc/:category?', lazyloadRouteHandler('./routes/universities/xidian/jwc'));
928
928
 
929
929
  // Westore
930
930
  router.get('/westore/new', lazyloadRouteHandler('./routes/westore/new'));
@@ -1043,7 +1043,7 @@ router.get('/gitea/blog', lazyloadRouteHandler('./routes/gitea/blog'));
1043
1043
  router.get('/idownloadblog', lazyloadRouteHandler('./routes/idownloadblog/index'));
1044
1044
 
1045
1045
  // 9to5
1046
- router.get('/9to5/:subsite/:tag?', lazyloadRouteHandler('./routes/9to5/subsite'));
1046
+ // router.get('/9to5/:subsite/:tag?', lazyloadRouteHandler('./routes/9to5/subsite'));
1047
1047
 
1048
1048
  // TesterHome
1049
1049
  router.get('/testerhome/newest', lazyloadRouteHandler('./routes/testerhome/newest'));
@@ -1111,12 +1111,12 @@ router.get('/zimuku/:type?', lazyloadRouteHandler('./routes/zimuku/index'));
1111
1111
  // SubHD.tv
1112
1112
  // router.get('/subhd/newest', lazyloadRouteHandler('./routes/subhd/newest'));
1113
1113
 
1114
- // 虎嗅
1115
- router.get('/huxiu/tag/:id', lazyloadRouteHandler('./routes/huxiu/tag'));
1116
- router.get('/huxiu/search/:keyword', lazyloadRouteHandler('./routes/huxiu/search'));
1117
- router.get('/huxiu/author/:id', lazyloadRouteHandler('./routes/huxiu/author'));
1118
- router.get('/huxiu/article', lazyloadRouteHandler('./routes/huxiu/article'));
1119
- router.get('/huxiu/collection/:id', lazyloadRouteHandler('./routes/huxiu/collection'));
1114
+ // 虎嗅 migrated to v2
1115
+ // router.get('/huxiu/tag/:id', lazyloadRouteHandler('./routes/huxiu/tag'));
1116
+ // router.get('/huxiu/search/:keyword', lazyloadRouteHandler('./routes/huxiu/search'));
1117
+ // router.get('/huxiu/author/:id', lazyloadRouteHandler('./routes/huxiu/author'));
1118
+ // router.get('/huxiu/article', lazyloadRouteHandler('./routes/huxiu/article'));
1119
+ // router.get('/huxiu/collection/:id', lazyloadRouteHandler('./routes/huxiu/collection'));
1120
1120
 
1121
1121
  // Steam
1122
1122
  router.get('/steam/search/:params', lazyloadRouteHandler('./routes/steam/search'));
@@ -1200,10 +1200,10 @@ router.get('/gov/hunan/notice/:type', lazyloadRouteHandler('./routes/gov/hunan/n
1200
1200
  // 中华人民共和国国家发展和改革委员会
1201
1201
  router.get('/gov/ndrc/xwdt/:caty?', lazyloadRouteHandler('./routes/gov/ndrc/xwdt'));
1202
1202
 
1203
- // 中华人民共和国-海关总署
1204
- router.get('/gov/customs/list/:gchannel', lazyloadRouteHandler('./routes/gov/customs/list'));
1203
+ // 中华人民共和国-海关总署 migrated to v2
1204
+ // router.get('/gov/customs/list/:gchannel', lazyloadRouteHandler('./routes/gov/customs/list'));
1205
1205
 
1206
- // 中华人民共和国教育部 migrated to v2
1206
+ // 中华人民共和国教育部
1207
1207
  // router.get('/gov/moe/:type', lazyloadRouteHandler('./routes/gov/moe/moe'));
1208
1208
 
1209
1209
  // 中华人民共和国外交部
@@ -1566,10 +1566,10 @@ router.get('/saraba1st/thread/:tid', lazyloadRouteHandler('./routes/saraba1st/th
1566
1566
  router.get('/gradcafe/result/:type', lazyloadRouteHandler('./routes/gradcafe/result'));
1567
1567
  router.get('/gradcafe/result', lazyloadRouteHandler('./routes/gradcafe/result'));
1568
1568
 
1569
- // The Economist
1570
- router.get('/the-economist/download', lazyloadRouteHandler('./routes/the-economist/download'));
1571
- router.get('/the-economist/gre-vocabulary', lazyloadRouteHandler('./routes/the-economist/gre-vocabulary'));
1572
- router.get('/the-economist/:endpoint', lazyloadRouteHandler('./routes/the-economist/full'));
1569
+ // The Economist migrated to v2
1570
+ // router.get('/the-economist/download', lazyloadRouteHandler('./routes/the-economist/download'));
1571
+ // router.get('/the-economist/gre-vocabulary', lazyloadRouteHandler('./routes/the-economist/gre-vocabulary'));
1572
+ // router.get('/the-economist/:endpoint', lazyloadRouteHandler('./routes/the-economist/full'));
1573
1573
 
1574
1574
  // 鼠绘漫画
1575
1575
  router.get('/shuhui/comics/:id', lazyloadRouteHandler('./routes/shuhui/comics'));
@@ -1922,10 +1922,10 @@ router.get('/socialclub/events/:game?', lazyloadRouteHandler('./routes/socialclu
1922
1922
  router.get('/ctfhub/upcoming/:limit?', lazyloadRouteHandler('./routes/ctfhub/upcoming'));
1923
1923
  router.get('/ctfhub/search/:limit?/:form?/:class?/:title?', lazyloadRouteHandler('./routes/ctfhub/search'));
1924
1924
 
1925
- // 阿里云
1926
- router.get('/aliyun/database_month', lazyloadRouteHandler('./routes/aliyun/database_month'));
1927
- router.get('/aliyun/notice/:type?', lazyloadRouteHandler('./routes/aliyun/notice'));
1928
- router.get('/aliyun/developer/group/:type', lazyloadRouteHandler('./routes/aliyun/developer/group'));
1925
+ // 阿里云 migrated to v2
1926
+ // router.get('/aliyun/database_month', lazyloadRouteHandler('./routes/aliyun/database_month'));
1927
+ // router.get('/aliyun/notice/:type?', lazyloadRouteHandler('./routes/aliyun/notice'));
1928
+ // router.get('/aliyun/developer/group/:type', lazyloadRouteHandler('./routes/aliyun/developer/group'));
1929
1929
 
1930
1930
  // 礼物说
1931
1931
  router.get('/liwushuo/index', lazyloadRouteHandler('./routes/liwushuo/index.js'));
@@ -2085,9 +2085,6 @@ router.get('/cug/gcxy/:type?', lazyloadRouteHandler('./routes/universities/cug/g
2085
2085
  // 海猫吧
2086
2086
  router.get('/haimaoba/:id?', lazyloadRouteHandler('./routes/haimaoba/comics'));
2087
2087
 
2088
- // 路透社
2089
- router.get('/reuters/channel/:site/:channel', lazyloadRouteHandler('./routes/reuters/channel'));
2090
-
2091
2088
  // 蒲公英
2092
2089
  router.get('/pgyer/:app?', lazyloadRouteHandler('./routes/pgyer/app'));
2093
2090
 
@@ -2116,11 +2113,11 @@ router.get('/zhanqi/room/:id', lazyloadRouteHandler('./routes/zhanqi/room'));
2116
2113
  // 酒云网
2117
2114
  router.get('/wineyun/:category', lazyloadRouteHandler('./routes/wineyun'));
2118
2115
 
2119
- // 小红书
2120
- router.get('/xiaohongshu/user/:user_id/:category', lazyloadRouteHandler('./routes/xiaohongshu/user'));
2121
- router.get('/xiaohongshu/board/:board_id', lazyloadRouteHandler('./routes/xiaohongshu/board'));
2116
+ // 小红书 migrated to v2
2117
+ // router.get('/xiaohongshu/user/:user_id/:category', lazyloadRouteHandler('./routes/xiaohongshu/user'));
2118
+ // router.get('/xiaohongshu/board/:board_id', lazyloadRouteHandler('./routes/xiaohongshu/board'));
2122
2119
 
2123
- // 每经网 migrated to v2
2120
+ // 每经网
2124
2121
  // router.get('/nbd/daily', lazyloadRouteHandler('./routes/nbd/article'));
2125
2122
  // router.get('/nbd/:id?', lazyloadRouteHandler('./routes/nbd/index'));
2126
2123
 
@@ -2204,11 +2201,11 @@ router.get('/mcbbs/post/:tid/:authorid?', lazyloadRouteHandler('./routes/mcbbs/p
2204
2201
  router.get('/pocket/trending', lazyloadRouteHandler('./routes/pocket/trending'));
2205
2202
 
2206
2203
  // HK01
2207
- router.get('/hk01/zone/:id', lazyloadRouteHandler('./routes/hk01/zone'));
2208
- router.get('/hk01/channel/:id', lazyloadRouteHandler('./routes/hk01/channel'));
2209
- router.get('/hk01/issue/:id', lazyloadRouteHandler('./routes/hk01/issue'));
2210
- router.get('/hk01/tag/:id', lazyloadRouteHandler('./routes/hk01/tag'));
2211
- router.get('/hk01/hot', lazyloadRouteHandler('./routes/hk01/hot'));
2204
+ // router.get('/hk01/zone/:id', lazyloadRouteHandler('./routes/hk01/zone'));
2205
+ // router.get('/hk01/channel/:id', lazyloadRouteHandler('./routes/hk01/channel'));
2206
+ // router.get('/hk01/issue/:id', lazyloadRouteHandler('./routes/hk01/issue'));
2207
+ // router.get('/hk01/tag/:id', lazyloadRouteHandler('./routes/hk01/tag'));
2208
+ // router.get('/hk01/hot', lazyloadRouteHandler('./routes/hk01/hot'));
2212
2209
 
2213
2210
  // 码农周刊
2214
2211
  router.get('/manong-weekly', lazyloadRouteHandler('./routes/manong-weekly/issues'));
@@ -2367,7 +2364,7 @@ router.get('/xinquji/today/internal', lazyloadRouteHandler('./routes/xinquji/int
2367
2364
  router.get('/gbcc/trust', lazyloadRouteHandler('./routes/gbcc/trust'));
2368
2365
 
2369
2366
  // Associated Press
2370
- router.get('/apnews/topics/:topic', lazyloadRouteHandler('./routes/apnews/topics'));
2367
+ // router.get('/apnews/topics/:topic', lazyloadRouteHandler('./routes/apnews/topics'));
2371
2368
 
2372
2369
  // CBC
2373
2370
  router.get('/cbc/topics/:topic?', lazyloadRouteHandler('./routes/cbc/topics'));
@@ -2862,9 +2859,6 @@ router.get('/law/dh', lazyloadRouteHandler('./routes/law/dh'));
2862
2859
  // 金诚同达律师事务所文章
2863
2860
  router.get('/law/jctd', lazyloadRouteHandler('./routes/law/jctd'));
2864
2861
 
2865
- // Mobilism
2866
- router.get('/mobilism/release', lazyloadRouteHandler('./routes/mobilism/release'));
2867
-
2868
2862
  // 三星盖乐世社区
2869
2863
  router.get('/samsungmembers/latest', lazyloadRouteHandler('./routes/samsungmembers/latest'));
2870
2864
 
@@ -2902,9 +2896,6 @@ router.get('/lizhi/user/:id', lazyloadRouteHandler('./routes/lizhi/user'));
2902
2896
  // 富途牛牛
2903
2897
  router.get('/futunn/highlights', lazyloadRouteHandler('./routes/futunn/highlights'));
2904
2898
 
2905
- // 外接大脑
2906
- router.get('/waijiedanao/article/:caty', lazyloadRouteHandler('./routes/waijiedanao/article'));
2907
-
2908
2899
  // 即刻 migrated to v2
2909
2900
  // router.get('/jike/topic/:id', lazyloadRouteHandler('./routes/jike/topic'));
2910
2901
  // router.get('/jike/topic/text/:id', lazyloadRouteHandler('./routes/jike/topicText'));
@@ -2979,9 +2970,6 @@ router.get('/dsb/area/:area', lazyloadRouteHandler('./routes/dsb/area'));
2979
2970
  // 靠谱新闻
2980
2971
  router.get('/kaopunews/:language?', lazyloadRouteHandler('./routes/kaopunews'));
2981
2972
 
2982
- // Reuters
2983
- router.get('/reuters/theWire', lazyloadRouteHandler('./routes/reuters/theWire'));
2984
-
2985
2973
  // 格隆汇
2986
2974
  router.get('/gelonghui/user/:id', lazyloadRouteHandler('./routes/gelonghui/user'));
2987
2975
  router.get('/gelonghui/subject/:id', lazyloadRouteHandler('./routes/gelonghui/subject'));
@@ -3025,9 +3013,6 @@ router.get('/touhougarakuta/:language/:type', lazyloadRouteHandler('./routes/tou
3025
3013
  // 猎趣TV
3026
3014
  router.get('/liequtv/room/:id', lazyloadRouteHandler('./routes/liequtv/room'));
3027
3015
 
3028
- // Behance
3029
- router.get('/behance/:user/:type?', lazyloadRouteHandler('./routes/behance/index'));
3030
-
3031
3016
  // 北京物资学院
3032
3017
  router.get('/bwu/news', lazyloadRouteHandler('./routes/universities/bwu/news'));
3033
3018
 
@@ -3086,8 +3071,8 @@ router.get('/kotaku/story/:type', lazyloadRouteHandler('./routes/kotaku/story'))
3086
3071
  // 梅斯医学
3087
3072
  router.get('/medsci/recommend', lazyloadRouteHandler('./routes/medsci/recommend'));
3088
3073
 
3089
- // Wallpaperhub
3090
- router.get('/wallpaperhub', lazyloadRouteHandler('./routes/wallpaperhub/index'));
3074
+ // Wallpaperhub migrated to v2
3075
+ // router.get('/wallpaperhub', lazyloadRouteHandler('./routes/wallpaperhub/index'));
3091
3076
 
3092
3077
  // 悟空问答
3093
3078
  router.get('/wukong/user/:id/:type?', lazyloadRouteHandler('./routes/wukong/user'));
@@ -3477,9 +3462,9 @@ router.get('/matataki/tags/:tagId/:tagName/posts/:ipfsFlag?', lazyloadRouteHandl
3477
3462
  router.get('/matataki/users/:userId/favorites/:favoriteListId/posts/:ipfsFlag?', lazyloadRouteHandler('./routes/matataki/site/posts/favorite'));
3478
3463
 
3479
3464
  // SoBooks
3480
- router.get('/sobooks/tag/:id?', lazyloadRouteHandler('./routes/sobooks/tag'));
3481
- router.get('/sobooks/date/:date?', lazyloadRouteHandler('./routes/sobooks/date'));
3482
- router.get('/sobooks/:category?', lazyloadRouteHandler('./routes/sobooks/index'));
3465
+ // router.get('/sobooks/tag/:id?', lazyloadRouteHandler('./routes/sobooks/tag'));
3466
+ // router.get('/sobooks/date/:date?', lazyloadRouteHandler('./routes/sobooks/date'));
3467
+ // router.get('/sobooks/:category?', lazyloadRouteHandler('./routes/sobooks/index'));
3483
3468
 
3484
3469
  // Zhimap 知识导图社区
3485
3470
  router.get('/zhimap/:categoryUuid?/:recommend?', lazyloadRouteHandler('./routes/zhimap/index'));
@@ -3669,8 +3654,8 @@ router.get('/voa/:language/:channel?', lazyloadRouteHandler('./routes/voa/index'
3669
3654
  router.get('/6park/:id?/:type?/:keyword?', lazyloadRouteHandler('./routes/6park/index'));
3670
3655
 
3671
3656
  // 哔嘀影视
3672
- router.get('/mp4er/:type?/:caty?/:area?/:year?/:order?', lazyloadRouteHandler('./routes/mp4er/index'));
3673
- router.get('/bde4/:type?/:caty?/:area?/:year?/:order?', lazyloadRouteHandler('./routes/mp4er/index'));
3657
+ // router.get('/mp4er/:type?/:caty?/:area?/:year?/:order?', lazyloadRouteHandler('./routes/mp4er/index'));
3658
+ // router.get('/bde4/:type?/:caty?/:area?/:year?/:order?', lazyloadRouteHandler('./routes/mp4er/index'));
3674
3659
 
3675
3660
  // 上海证券交易所
3676
3661
  router.get('/sse/sserules/:slug?', lazyloadRouteHandler('./routes/sse/sserules'));
@@ -3693,10 +3678,10 @@ router.get('/mofish/:id', lazyloadRouteHandler('./routes/mofish/index'));
3693
3678
  // Mcdonalds
3694
3679
  router.get('/mcdonalds/:category', lazyloadRouteHandler('./routes/mcdonalds/news'));
3695
3680
 
3696
- // Pincong 品葱
3697
- router.get('/pincong/category/:category?/:sort?', lazyloadRouteHandler('./routes/pincong/index'));
3698
- router.get('/pincong/hot/:category?', lazyloadRouteHandler('./routes/pincong/hot'));
3699
- router.get('/pincong/topic/:topic', lazyloadRouteHandler('./routes/pincong/topic'));
3681
+ // Pincong 品葱 migrated to v2
3682
+ // router.get('/pincong/category/:category?/:sort?', lazyloadRouteHandler('./routes/pincong/index'));
3683
+ // router.get('/pincong/hot/:category?', lazyloadRouteHandler('./routes/pincong/hot'));
3684
+ // router.get('/pincong/topic/:topic', lazyloadRouteHandler('./routes/pincong/topic'));
3700
3685
 
3701
3686
  // GoComics
3702
3687
  router.get('/gocomics/:name', lazyloadRouteHandler('./routes/gocomics/index'));
@@ -3945,7 +3930,7 @@ router.get('/macau-bolsas/:lang?', lazyloadRouteHandler('./routes/macau-bolsas/i
3945
3930
  router.get('/potplayer/update/:language?', lazyloadRouteHandler('./routes/potplayer/update'));
3946
3931
 
3947
3932
  // 综艺秀
3948
- router.get('/zyshow/:name', lazyloadRouteHandler('./routes/zyshow'));
3933
+ // router.get('/zyshow/:name', lazyloadRouteHandler('./routes/zyshow'));
3949
3934
 
3950
3935
  // 加美财经
3951
3936
  router.get('/caus/:category?', lazyloadRouteHandler('./routes/caus'));
@@ -4049,7 +4034,7 @@ router.get('/netflix/newsroom/:category?/:region?', lazyloadRouteHandler('./rout
4049
4034
  router.get('/sbs/chinese/:category?/:id?/:dialect?/:language?', lazyloadRouteHandler('./routes/sbs/chinese'));
4050
4035
 
4051
4036
  // Asian to lick
4052
- router.get('/asiantolick/:category?/:keyword?', lazyloadRouteHandler('./routes/asiantolick'));
4037
+ // router.get('/asiantolick/:category?/:keyword?', lazyloadRouteHandler('./routes/asiantolick'));
4053
4038
 
4054
4039
  // Research Gate
4055
4040
  router.get('/researchgate/publications/:id', lazyloadRouteHandler('./routes/researchgate/publications'));
@@ -4080,7 +4065,7 @@ router.get('/secrss/author/:author?', lazyloadRouteHandler('./routes/secrss/auth
4080
4065
  router.get('/fashionnetwork/headline/:country?', lazyloadRouteHandler('./routes/fashionnetwork/headline.js'));
4081
4066
 
4082
4067
  // mirror.xyz
4083
- router.get('/mirror/:id', lazyloadRouteHandler('./routes/mirror/entries'));
4068
+ // router.get('/mirror/:id', lazyloadRouteHandler('./routes/mirror/entries'));
4084
4069
 
4085
4070
  // KBS migrated to v2
4086
4071
  // router.get('/kbs/today/:language?', lazyloadRouteHandler('./routes/kbs/today'));
@@ -2,7 +2,7 @@ const got = require('@/utils/got');
2
2
  const cheerio = require('cheerio');
3
3
 
4
4
  module.exports = async (ctx) => {
5
- const rootUrl = 'https://www.agefans.cc';
5
+ const rootUrl = 'https://www.agemys.com';
6
6
  const currentUrl = `${rootUrl}/update`;
7
7
  const response = await got({
8
8
  method: 'get',
@@ -7,7 +7,7 @@ let gitHash;
7
7
  try {
8
8
  gitHash = require('git-rev-sync').short();
9
9
  } catch (e) {
10
- gitHash = (process.env.HEROKU_SLUG_COMMIT && process.env.HEROKU_SLUG_COMMIT.slice(0, 7)) || (process.env.VERCEL_GITHUB_COMMIT_SHA && process.env.VERCEL_GITHUB_COMMIT_SHA.slice(0, 7)) || 'unknown';
10
+ gitHash = (process.env.HEROKU_SLUG_COMMIT && process.env.HEROKU_SLUG_COMMIT.slice(0, 7)) || (process.env.VERCEL_GIT_COMMIT_SHA && process.env.VERCEL_GIT_COMMIT_SHA.slice(0, 7)) || 'unknown';
11
11
  }
12
12
 
13
13
  module.exports = async (ctx) => {
@@ -35,7 +35,7 @@ module.exports = async (ctx) => {
35
35
 
36
36
  const items = [];
37
37
  for await (const item of asyncPool(3, chapter_item, (item) =>
38
- ctx.cache.tryGet(item, async () => {
38
+ ctx.cache.tryGet(item.link.href, async () => {
39
39
  const response = await got({
40
40
  method: 'get',
41
41
  url: item.link,
@@ -61,7 +61,7 @@ module.exports = async (ctx) => {
61
61
 
62
62
  ctx.state.data = {
63
63
  title: `笔趣阁 ${title}`,
64
- link: pageUrl,
64
+ link: pageUrl.href,
65
65
  image: cover_url,
66
66
  description,
67
67
  item: items,
@@ -1,40 +1,18 @@
1
1
  const cheerio = require('cheerio');
2
+ const { parseDate } = require('@/utils/parse-date');
3
+ const dayjs = require('dayjs');
2
4
 
3
5
  module.exports = async (ctx) => {
4
6
  const baseIndexUrl = 'https://www.sice.uestc.edu.cn/index.htm';
5
7
  const host = 'https://www.sice.uestc.edu.cn/';
6
- const browser = await require('@/utils/puppeteer')();
8
+ const browser = await require('@/utils/puppeteer')({ stealth: true });
7
9
  const page = await browser.newPage();
8
-
9
- // 浏览器伪装
10
- await page.evaluateOnNewDocument(() => {
11
- // 在每个新页面打开前执行以下脚本
12
- const newProto = navigator.__proto__;
13
- delete newProto.webdriver; // 删除navigator.webdriver字段
14
- navigator.__proto__ = newProto;
15
- window.chrome = {}; // 添加window.chrome字段,为增加真实性还需向内部填充一些值
16
- window.chrome.app = { InstallState: 'hehe', RunningState: 'haha', getDetails: 'xixi', getIsInstalled: 'ohno' };
17
- window.chrome.csi = function () {};
18
- window.chrome.loadTimes = function () {};
19
- window.chrome.runtime = function () {};
20
- Object.defineProperty(navigator, 'userAgent', {
21
- // userAgent在无头模式下有headless字样,所以需覆写
22
- get: () => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.113 Safari/537.36',
23
- });
24
- Object.defineProperty(navigator, 'plugins', {
25
- // 伪装真实的插件信息
26
- get: () => [{ description: 'Portable Document Format', filename: 'internal-pdf-viewer', length: 1, name: 'Chrome PDF Plugin' }],
27
- });
28
- Object.defineProperty(navigator, 'languages', {
29
- // 添加语言
30
- get: () => ['zh-CN', 'zh', 'en'],
31
- });
32
- const originalQuery = window.navigator.permissions.query; // notification伪装
33
- window.navigator.permissions.query = (parameters) => (parameters.name === 'notifications' ? Promise.resolve({ state: Notification.permission }) : originalQuery(parameters));
10
+ await page.setRequestInterception(true);
11
+ page.on('request', (request) => {
12
+ request.resourceType() === 'document' || request.resourceType() === 'script' ? request.continue() : request.abort();
34
13
  });
35
-
36
14
  await page.goto(baseIndexUrl, {
37
- waitUntil: 'networkidle0',
15
+ waitUntil: 'networkidle2',
38
16
  });
39
17
  const content = await page.content();
40
18
  await browser.close();
@@ -43,14 +21,15 @@ module.exports = async (ctx) => {
43
21
  const out = $('.notice p')
44
22
  .map((index, item) => {
45
23
  item = $(item);
46
- let date = new Date(new Date().getFullYear() + '-' + item.find('a.date').text());
47
- if (new Date() < date) {
48
- date = new Date(new Date().getFullYear() - 1 + '-' + item.find('a.date').text());
24
+ const now = dayjs();
25
+ let date = dayjs(now.year() + '-' + item.find('a.date').text());
26
+ if (now < date) {
27
+ date = dayjs(now.year() - 1 + '-' + item.find('a.date').text());
49
28
  }
50
29
  return {
51
30
  title: item.find('a[href]').text(),
52
31
  link: host + item.find('a[href]').attr('href'),
53
- pubDate: date,
32
+ pubDate: parseDate(date),
54
33
  };
55
34
  })
56
35
  .get();
@@ -1,4 +1,4 @@
1
- const querystring = require('querystring');
1
+ const querystring = require('query-string');
2
2
  const got = require('@/utils/got');
3
3
  const weiboUtils = require('./utils');
4
4
  const config = require('@/config').value;
@@ -62,22 +62,14 @@ module.exports = async (ctx) => {
62
62
  false
63
63
  );
64
64
 
65
- let earliestDate;
66
-
67
- const resultItem = await Promise.all(
65
+ let resultItems = await Promise.all(
68
66
  cards
69
- .reverse() // reverse first to ensure the pinned card will be processed lastly
67
+ .filter((item) => item.mblog)
70
68
  .map(async (item) => {
71
- if (!item.mblog && item.card_group && Array.isArray(item.card_group) && item.card_group.length > 0) {
72
- // w/o `mblog`, it may have a `card_group` containing only 1 card
73
- // only get the 1st card because we haven't observed that there can be multiple cards in it
74
- item = item.card_group[0];
75
- }
76
-
77
- if (!item.mblog) {
78
- return; // drop
79
- }
80
-
69
+ // TODO: unify cache key and let weiboUtils.getShowData() handle the cache? It seems safe to do so.
70
+ // Need more investigation, pending for now since the current version works fine.
71
+ // TODO: getShowData() on demand? The API seems to return most things we need since 2022/05/21.
72
+ // Need more investigation, pending for now since the current version works fine.
81
73
  const key = 'weibo:user:' + item.mblog.bid;
82
74
  const data = await ctx.cache.tryGet(key, () => weiboUtils.getShowData(uid, item.mblog.bid));
83
75
 
@@ -92,20 +84,10 @@ module.exports = async (ctx) => {
92
84
  item.mblog.created_at = timezone(item.mblog.created_at, +8);
93
85
  }
94
86
 
95
- // drop too old pinned weibo, otherwise preserve it
96
- if (!item.mblog.title || item.mblog.title.text !== '置顶') {
97
- if (!earliestDate || (item.mblog.created_at && earliestDate > item.mblog.created_at)) {
98
- earliestDate = item.mblog.created_at;
99
- }
100
- } else {
101
- if (earliestDate && item.mblog.created_at && earliestDate > item.mblog.created_at) {
102
- return;
103
- }
104
- }
105
-
106
87
  // 转发的长微博处理
107
88
  const retweet = item.mblog.retweeted_status;
108
89
  if (retweet && retweet.isLongText) {
90
+ // TODO: unify cache key and ...
109
91
  const retweetData = await ctx.cache.tryGet(`weibo:retweeted:${retweet.user.id}:${retweet.bid}`, () => weiboUtils.getShowData(retweet.user.id, retweet.bid));
110
92
  if (retweetData !== undefined && retweetData.text) {
111
93
  item.mblog.retweeted_status.text = retweetData.text;
@@ -149,15 +131,25 @@ module.exports = async (ctx) => {
149
131
  link,
150
132
  pubDate,
151
133
  author: item.mblog.user.screen_name,
134
+ isPinned: item.profile_type_id?.startsWith('proweibotop'),
152
135
  };
153
136
  })
154
137
  );
155
138
 
139
+ // remove pinned weibo if they are too old (older than all the rest weibo)
140
+ // the character of pinned weibo is `card.profile_type_id.startsWith('proweibotop')`
141
+ // there can be 1 or 2 (WHAT A FANTASTIC BRAIN THE PM HAS?) pinned weibo at the same time
142
+ const pinnedItems = resultItems.filter((item) => item.isPinned);
143
+ const ordinaryItems = resultItems.filter((item) => !item.isPinned);
144
+ if (pinnedItems.length > 0 && ordinaryItems.length > 0 && Math.max(...pinnedItems.map((i) => i.pubDate).filter(Boolean)) < Math.min(...ordinaryItems.map((i) => i.pubDate).filter(Boolean))) {
145
+ resultItems = ordinaryItems;
146
+ }
147
+
156
148
  ctx.state.data = {
157
149
  title: `${name}的微博`,
158
- link: `http://weibo.com/${uid}/`,
150
+ link: `https://weibo.com/${uid}/`,
159
151
  description,
160
152
  image: profileImageUrl,
161
- item: resultItem.filter((item) => item).reverse(),
153
+ item: resultItems,
162
154
  };
163
155
  };
@@ -0,0 +1,36 @@
1
+ /**
2
+ * The alogrithm is well-explained in https://andrewlock.net/simple-obfuscation-of-email-addresses-using-javascript/
3
+ */
4
+ module.exports = {
5
+ // eslint-disable-next-line lines-around-comment
6
+ /**
7
+ * Returns decoded email address using CloudFlare's email address obfuscation.
8
+ * @param {String} encoded - encoded email, (`cfemail` attribute in `__cf_email__` tag)
9
+ * @returns decoded email address
10
+ */
11
+ decodeCFEmail: (encoded) => {
12
+ const parseHex = (string, position) => parseInt(string.substr(position, 2), 16);
13
+ let decoded = '';
14
+ const key = parseHex(encoded, 0);
15
+ for (let position = 2; position < encoded.length; position += 2) {
16
+ const byte = parseHex(encoded, position) ^ key;
17
+ decoded += String.fromCharCode(byte);
18
+ }
19
+ return decoded;
20
+ },
21
+
22
+ /**
23
+ * Returns CloudFlare protected email address.
24
+ * @param {String} email - email in plaintext
25
+ * @returns obfuscated email
26
+ */
27
+ encodeCFEmail: (email) => {
28
+ const key = Math.floor(Math.random() * 256);
29
+ let encoded = ('0' + key.toString(16)).slice(-2);
30
+ for (let position = 0; position < email.length; position++) {
31
+ const byte = email.charCodeAt(position) ^ key;
32
+ encoded += ('0' + byte.toString(16)).slice(-2);
33
+ }
34
+ return encoded;
35
+ },
36
+ };