rsshub 1.0.0-master.f7cdf8b → 1.0.0-master.f812e91
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.
- package/README.md +9 -7
- package/lib/config.js +21 -8
- package/lib/middleware/cache/index.js +4 -3
- package/lib/middleware/cache/redis.js +3 -3
- package/lib/middleware/onerror.js +8 -0
- package/lib/middleware/template.js +79 -85
- package/lib/radar-rules.js +0 -93
- package/lib/router.js +11 -303
- package/lib/routes/199it/category.js +1 -1
- package/lib/routes/199it/tag.js +1 -1
- package/lib/routes/199it/utils.js +1 -1
- package/lib/routes/index.js +6 -13
- package/lib/utils/common-utils.js +2 -6
- package/lib/utils/render.js +2 -0
- package/lib/v2/1point3acres/maintainer.js +2 -2
- package/lib/v2/95mm/utils.js +3 -2
- package/lib/v2/9to5/utils.js +1 -1
- package/lib/v2/aeon/utils.js +1 -1
- package/lib/v2/agirls/maintainer.js +0 -1
- package/lib/v2/agirls/radar.js +0 -6
- package/lib/v2/agirls/router.js +0 -1
- package/lib/v2/aliyun/notice.js +1 -1
- package/lib/v2/amazon/maintainer.js +1 -1
- package/lib/v2/apnews/topics.js +1 -1
- package/lib/v2/arcteryx/maintainer.js +3 -3
- package/lib/v2/artstation/maintainer.js +3 -0
- package/lib/v2/artstation/radar.js +13 -0
- package/lib/v2/artstation/router.js +3 -0
- package/lib/v2/artstation/templates/description.art +17 -0
- package/lib/v2/artstation/user.js +98 -0
- package/lib/v2/bangumi/maintainer.js +1 -0
- package/lib/v2/bangumi/radar.js +6 -0
- package/lib/v2/bangumi/router.js +1 -0
- package/lib/v2/bangumi/tv/user/wish.js +38 -0
- package/lib/v2/bellroy/maintainer.js +1 -1
- package/lib/v2/bilibili/cache.js +10 -7
- package/lib/v2/bilibili/maintainer.js +1 -5
- package/lib/v2/bilibili/platform.js +43 -0
- package/lib/v2/bilibili/radar.js +8 -6
- package/lib/v2/bilibili/router.js +1 -5
- package/lib/v2/bilibili/video.js +8 -1
- package/lib/v2/bossdesign/index.js +41 -0
- package/lib/v2/bossdesign/radar.js +13 -0
- package/lib/v2/brave/latest.js +4 -2
- package/lib/v2/buaa/maintainer.js +4 -0
- package/lib/v2/buaa/news/index.js +46 -0
- package/lib/v2/buaa/radar.js +21 -0
- package/lib/v2/buaa/router.js +4 -0
- package/lib/v2/buaa/sme.js +59 -0
- package/lib/v2/cctv/maintainer.js +0 -1
- package/lib/v2/cctv/radar.js +0 -6
- package/lib/v2/cctv/router.js +0 -1
- package/lib/v2/cfachina/analygarden.js +60 -0
- package/lib/v2/cfachina/maintainer.js +3 -0
- package/lib/v2/cfachina/radar.js +13 -0
- package/lib/v2/cfachina/router.js +3 -0
- package/lib/v2/cna/maintainer.js +1 -0
- package/lib/v2/cna/radar.js +6 -0
- package/lib/v2/cna/router.js +1 -0
- package/lib/v2/cna/web/index.js +62 -0
- package/lib/v2/cste/radar.js +1 -1
- package/lib/v2/curius/templates/description.art +1 -1
- package/lib/v2/dahecube/index.js +1 -1
- package/lib/v2/dahecube/radar.js +40 -4
- package/lib/v2/deeplearning/maintainer.js +3 -0
- package/lib/v2/deeplearning/radar.js +13 -0
- package/lib/v2/deeplearning/router.js +3 -0
- package/lib/v2/deeplearning/thebatch.js +36 -0
- package/lib/v2/diandong/maintainer.js +0 -1
- package/lib/v2/diandong/radar.js +0 -6
- package/lib/v2/diandong/router.js +0 -1
- package/lib/v2/dongqiudi/utils.js +1 -1
- package/lib/v2/douban/maintainer.js +1 -0
- package/lib/v2/douban/other/discussion.js +58 -0
- package/lib/v2/douban/radar.js +8 -0
- package/lib/v2/douban/router.js +1 -0
- package/lib/v2/dut/defaults.js +4 -0
- package/lib/v2/dut/index.js +21 -9
- package/lib/v2/dut/maintainer.js +8 -7
- package/lib/v2/dut/radar.js +37 -29
- package/lib/v2/dut/shortcuts.js +5 -0
- package/lib/v2/dx2025/radar.js +0 -6
- package/lib/v2/eastday/maintainer.js +0 -1
- package/lib/v2/eastday/radar.js +0 -6
- package/lib/v2/eastday/router.js +0 -1
- package/lib/v2/economist/maintainer.js +0 -2
- package/lib/v2/economist/radar.js +0 -8
- package/lib/v2/economist/router.js +0 -2
- package/lib/v2/egsea/flash.js +30 -0
- package/lib/v2/egsea/maintainer.js +3 -0
- package/lib/v2/egsea/radar.js +13 -0
- package/lib/v2/egsea/router.js +3 -0
- package/lib/v2/fisher-spb/news.js +1 -2
- package/lib/v2/fosshub/radar.js +1 -1
- package/lib/v2/ft/maintainer.js +0 -1
- package/lib/v2/ft/radar.js +0 -13
- package/lib/v2/ft/router.js +0 -1
- package/lib/v2/fxiaoke/crm.js +63 -0
- package/lib/v2/fxiaoke/maintainer.js +3 -0
- package/lib/v2/fxiaoke/radar.js +37 -0
- package/lib/v2/fxiaoke/router.js +3 -0
- package/lib/v2/gdsrx/index.js +72 -0
- package/lib/v2/gdsrx/maintainer.js +3 -0
- package/lib/v2/gdsrx/radar.js +61 -0
- package/lib/v2/gdsrx/router.js +3 -0
- package/lib/v2/github/radar.js +12 -12
- package/lib/v2/gogoanimehd/radar.js +1 -1
- package/lib/v2/gogoanimehd/recent-releases.js +1 -1
- package/lib/v2/google/alerts.js +33 -0
- package/lib/v2/google/maintainer.js +1 -0
- package/lib/v2/google/router.js +1 -0
- package/lib/v2/gov/chinamine-safety/util.js +77 -0
- package/lib/v2/gov/chinamine-safety/xw.js +37 -0
- package/lib/v2/gov/chinamine-safety/zfxxgk.js +36 -0
- package/lib/v2/gov/maintainer.js +11 -2
- package/lib/v2/gov/moa/zdscxx.js +104 -0
- package/lib/v2/gov/mot/index.js +66 -0
- package/lib/v2/gov/nea/ghs.js +58 -0
- package/lib/v2/gov/nifdc/index.js +40 -33
- package/lib/v2/gov/radar.js +423 -4
- package/lib/v2/gov/router.js +12 -2
- package/lib/v2/gov/safe/business.js +8 -0
- package/lib/v2/gov/safe/complaint.js +8 -0
- package/lib/v2/gov/safe/templates/message.art +25 -0
- package/lib/v2/gov/safe/util.js +87 -0
- package/lib/v2/gov/zhengce/index.js +99 -0
- package/lib/v2/greasyfork/maintainer.js +1 -0
- package/lib/v2/greasyfork/router.js +1 -0
- package/lib/v2/greasyfork/scripts.js +25 -20
- package/lib/{routes/universities → v2}/harvard/health/blog.js +8 -7
- package/lib/v2/harvard/maintainer.js +3 -0
- package/lib/v2/harvard/radar.js +13 -0
- package/lib/v2/harvard/router.js +3 -0
- package/lib/v2/hellobtc/maintainer.js +0 -1
- package/lib/v2/hellobtc/radar.js +0 -6
- package/lib/v2/hellobtc/router.js +0 -1
- package/lib/v2/huxiu/briefColumn.js +13 -25
- package/lib/v2/huxiu/channel.js +28 -0
- package/lib/v2/huxiu/club.js +30 -0
- package/lib/v2/huxiu/collection.js +14 -26
- package/lib/v2/huxiu/maintainer.js +8 -5
- package/lib/v2/huxiu/member.js +27 -0
- package/lib/v2/huxiu/moment.js +11 -25
- package/lib/v2/huxiu/radar.js +24 -16
- package/lib/v2/huxiu/router.js +7 -4
- package/lib/v2/huxiu/search.js +16 -21
- package/lib/v2/huxiu/tag.js +13 -25
- package/lib/v2/huxiu/templates/description.art +46 -0
- package/lib/v2/huxiu/util.js +460 -0
- package/lib/v2/ifi-audio/maintainer.js +1 -1
- package/lib/v2/imiker/jinghua.js +87 -0
- package/lib/v2/imiker/maintainer.js +3 -0
- package/lib/v2/imiker/radar.js +13 -0
- package/lib/v2/imiker/router.js +3 -0
- package/lib/v2/imiker/templates/description.art +32 -0
- package/lib/v2/inoreader/maintainer.js +1 -1
- package/lib/v2/instagram/common-utils.js +7 -4
- package/lib/v2/instagram/radar.js +2 -2
- package/lib/v2/instagram/templates/images.art +9 -2
- package/lib/v2/instagram/templates/video.art +4 -1
- package/lib/v2/instagram/web-api/index.js +30 -9
- package/lib/v2/instagram/web-api/utils.js +149 -25
- package/lib/v2/jianshu/maintainer.js +5 -0
- package/lib/v2/jianshu/radar.js +25 -0
- package/lib/v2/jianshu/router.js +5 -0
- package/lib/{routes → v2}/jianshu/utils.js +18 -26
- package/lib/v2/kemono/index.js +26 -2
- package/lib/v2/kemono/radar.js +1 -1
- package/lib/v2/kepu/live.js +89 -0
- package/lib/v2/kepu/maintainer.js +3 -0
- package/lib/v2/kepu/radar.js +13 -0
- package/lib/v2/kepu/router.js +3 -0
- package/lib/v2/kepu/templates/description.art +33 -0
- package/lib/v2/leetcode/maintainer.js +1 -1
- package/lib/v2/lightnovel/lightNovel.js +62 -0
- package/lib/v2/lightnovel/maintainer.js +3 -0
- package/lib/v2/lightnovel/radar.js +13 -0
- package/lib/v2/lightnovel/router.js +3 -0
- package/lib/v2/line/radar.js +1 -1
- package/lib/v2/liquipedia/cs_matches.js +52 -0
- package/lib/v2/liquipedia/dota2_matches.js +47 -0
- package/lib/v2/liquipedia/maintainer.js +4 -0
- package/lib/v2/liquipedia/radar.js +19 -0
- package/lib/v2/liquipedia/router.js +4 -0
- package/lib/v2/magazinelib/maintainer.js +1 -1
- package/lib/v2/mihoyo/radar.js +1 -1
- package/lib/v2/missav/maintainer.js +3 -0
- package/lib/v2/missav/new.js +36 -0
- package/lib/v2/missav/radar.js +13 -0
- package/lib/v2/missav/router.js +3 -0
- package/lib/v2/missav/templates/preview.art +3 -0
- package/lib/v2/modb/maintainer.js +3 -0
- package/lib/v2/modb/radar.js +13 -0
- package/lib/v2/modb/router.js +3 -0
- package/lib/v2/modb/topic.js +59 -0
- package/lib/v2/nature/cover.js +32 -42
- package/lib/v2/nature/highlight.js +2 -2
- package/lib/v2/nature/news-and-comment.js +2 -2
- package/lib/v2/nature/news.js +2 -2
- package/lib/v2/nature/research.js +2 -2
- package/lib/v2/nature/siteindex.js +5 -5
- package/lib/v2/nature/utils.js +124 -5
- package/lib/v2/ncu/jwc.js +33 -0
- package/lib/v2/ncu/maintainer.js +3 -0
- package/lib/v2/ncu/radar.js +13 -0
- package/lib/v2/ncu/router.js +3 -0
- package/lib/v2/nhk/news.js +1 -1
- package/lib/v2/nmtv/radar.js +1 -1
- package/lib/v2/nytimes/radar.js +0 -6
- package/lib/v2/nytimes/router.js +0 -1
- package/lib/v2/oo-software/radar.js +1 -1
- package/lib/v2/patagonia/maintainer.js +1 -1
- package/lib/v2/phoronix/index.js +177 -48
- package/lib/v2/phoronix/maintainer.js +1 -1
- package/lib/v2/phoronix/radar.js +3 -3
- package/lib/v2/phoronix/router.js +1 -1
- package/lib/v2/picnob/maintainer.js +1 -1
- package/lib/v2/picnob/templates/desc.art +3 -3
- package/lib/v2/picnob/user.js +74 -37
- package/lib/v2/picnob/utils.js +24 -0
- package/lib/v2/qbitai/category.js +27 -0
- package/lib/v2/qbitai/maintainer.js +4 -0
- package/lib/v2/qbitai/radar.js +19 -0
- package/lib/v2/qbitai/router.js +4 -0
- package/lib/v2/qbitai/tag.js +27 -0
- package/lib/v2/questmobile/maintainer.js +3 -0
- package/lib/v2/questmobile/radar.js +18 -0
- package/lib/v2/questmobile/report.js +127 -0
- package/lib/v2/questmobile/router.js +3 -0
- package/lib/v2/questmobile/templates/description.art +17 -0
- package/lib/v2/qweather/3days.js +1 -1
- package/lib/v2/readhub/daily.js +43 -0
- package/lib/v2/readhub/index.js +19 -72
- package/lib/v2/readhub/maintainer.js +1 -0
- package/lib/v2/readhub/radar.js +6 -0
- package/lib/v2/readhub/router.js +1 -0
- package/lib/v2/readhub/util.js +69 -0
- package/lib/v2/reuters/common.js +55 -48
- package/lib/v2/routledge/book-series.js +78 -0
- package/lib/v2/routledge/maintainer.js +3 -0
- package/lib/v2/routledge/radar.js +13 -0
- package/lib/v2/routledge/router.js +3 -0
- package/lib/v2/{qdaily/templates/article.art → routledge/templates/description.art} +2 -0
- package/lib/v2/sehuatang/index.js +10 -12
- package/lib/v2/sehuatang/user.js +11 -12
- package/lib/v2/showstart/artist.js +15 -0
- package/lib/v2/showstart/brand.js +15 -0
- package/lib/v2/showstart/const.js +4 -0
- package/lib/v2/showstart/event.js +18 -0
- package/lib/v2/showstart/maintainer.js +6 -0
- package/lib/v2/showstart/radar.js +40 -0
- package/lib/v2/showstart/router.js +6 -0
- package/lib/v2/showstart/search.js +51 -0
- package/lib/v2/showstart/service.js +166 -0
- package/lib/v2/showstart/utils.js +92 -0
- package/lib/v2/snowpeak/maintainer.js +1 -1
- package/lib/v2/sony/maintainer.js +1 -1
- package/lib/v2/sse/disclosure.js +4 -3
- package/lib/v2/sspu/jwc.js +44 -0
- package/lib/v2/sspu/maintainer.js +3 -0
- package/lib/v2/sspu/radar.js +13 -0
- package/lib/v2/sspu/router.js +3 -0
- package/lib/v2/techcrunch/maintainer.js +1 -1
- package/lib/v2/theatlantic/maintainer.js +1 -1
- package/lib/v2/thenewslens/radar.js +0 -6
- package/lib/v2/thepaper/radar.js +2 -2
- package/lib/v2/thoughtco/index.js +1 -1
- package/lib/v2/threads/index.js +20 -150
- package/lib/v2/threads/utils.js +147 -0
- package/lib/v2/tophub/list.js +40 -0
- package/lib/v2/tophub/maintainer.js +1 -0
- package/lib/v2/tophub/radar.js +6 -0
- package/lib/v2/tophub/router.js +1 -0
- package/lib/v2/tophub/templates/rank.art +22 -0
- package/lib/v2/twitter/keyword.js +1 -3
- package/lib/v2/twitter/media.js +1 -5
- package/lib/v2/twitter/user.js +1 -3
- package/lib/v2/twitter/utils.js +5 -3
- package/lib/v2/twitter/web-api/constants.js +80 -68
- package/lib/v2/twitter/web-api/twitter-api.js +96 -103
- package/lib/v2/twreporter/maintainer.js +0 -2
- package/lib/v2/twreporter/radar.js +0 -12
- package/lib/v2/twreporter/router.js +0 -2
- package/lib/v2/uniqlo/maintainer.js +3 -0
- package/lib/v2/uniqlo/new.js +62 -0
- package/lib/v2/uniqlo/radar.js +12 -0
- package/lib/v2/uniqlo/router.js +3 -0
- package/lib/v2/wechat/maintainer.js +1 -1
- package/lib/v2/weibo/maintainer.js +1 -1
- package/lib/v2/weibo/radar.js +1 -1
- package/lib/v2/weibo/router.js +1 -1
- package/lib/v2/weibo/search/hot.js +118 -7
- package/lib/v2/weibo/search/template/digest.art +17 -0
- package/lib/v2/worldjournal/index.js +1 -1
- package/lib/v2/woshipm/maintainer.js +0 -2
- package/lib/v2/woshipm/radar.js +0 -12
- package/lib/v2/woshipm/router.js +0 -2
- package/lib/v2/xiaohongshu/util.js +17 -7
- package/lib/v2/xmnn/docs.js +0 -0
- package/lib/v2/xmnn/maintainer.js +1 -0
- package/lib/v2/xmnn/news.js +65 -0
- package/lib/v2/xmnn/radar.js +67 -1
- package/lib/v2/xmnn/router.js +1 -0
- package/lib/v2/xsijishe/maintainer.js +1 -0
- package/lib/v2/xsijishe/radar.js +12 -0
- package/lib/v2/xsijishe/rank.js +60 -0
- package/lib/v2/xsijishe/router.js +1 -0
- package/lib/v2/yahoo/maintainer.js +2 -0
- package/lib/v2/yahoo/news/tw/index.js +24 -0
- package/lib/v2/yahoo/news/tw/provider-helper.js +22 -0
- package/lib/v2/yahoo/news/tw/provider.js +24 -0
- package/lib/v2/yahoo/news/tw/utils.js +129 -0
- package/lib/v2/yahoo/radar.js +29 -1
- package/lib/v2/yahoo/router.js +4 -1
- package/lib/v2/yahoo/templates/youtube.art +1 -0
- package/lib/v2/yuque/book.js +6 -1
- package/lib/v2/yuque/utils.js +16 -0
- package/lib/v2/zagg/maintainer.js +1 -1
- package/lib/v2/zhihu/maintainer.js +2 -0
- package/lib/v2/zhihu/radar.js +18 -0
- package/lib/v2/zhihu/router.js +2 -0
- package/lib/v2/zhihu/xhu/activities.js +112 -0
- package/lib/v2/zhihu/xhu/answers.js +31 -0
- package/lib/views/error.art +1 -1
- package/lib/views/rss3-ums.js +62 -0
- package/lib/views/welcome.art +1 -1
- package/package.json +46 -40
- package/lib/routes/8btc/author.js +0 -49
- package/lib/routes/8btc/news/flash.js +0 -41
- package/lib/routes/91ddcc/stage.js +0 -48
- package/lib/routes/91ddcc/user.js +0 -45
- package/lib/routes/93/index.js +0 -50
- package/lib/routes/allnow/column.js +0 -7
- package/lib/routes/allnow/index.js +0 -5
- package/lib/routes/allnow/tag.js +0 -7
- package/lib/routes/allnow/user.js +0 -7
- package/lib/routes/allnow/utils.js +0 -67
- package/lib/routes/andyt/index.js +0 -36
- package/lib/routes/asahi/area.js +0 -57
- package/lib/routes/baidu/daily.js +0 -55
- package/lib/routes/bell-labs/events-news.js +0 -70
- package/lib/routes/bihu/activaties.js +0 -76
- package/lib/routes/bioon/latest.js +0 -51
- package/lib/routes/bishijie/kuaixun.js +0 -21
- package/lib/routes/bjnews/epaper.js +0 -80
- package/lib/routes/bof/home.js +0 -42
- package/lib/routes/boston/index.js +0 -73
- package/lib/routes/buaq/index.js +0 -31
- package/lib/routes/cgtn/pick.js +0 -45
- package/lib/routes/cgtn/top.js +0 -45
- package/lib/routes/chinadialogue/column.js +0 -58
- package/lib/routes/chinadialogue/topics.js +0 -55
- package/lib/routes/chinalaborwatch/reports.js +0 -53
- package/lib/routes/chinatimes/index.js +0 -115
- package/lib/routes/cmes/news.js +0 -64
- package/lib/routes/commonapp/blog.js +0 -42
- package/lib/routes/cria/news.js +0 -57
- package/lib/routes/dayone/blog.js +0 -56
- package/lib/routes/deeplearningai/thebatch.js +0 -29
- package/lib/routes/dianping/user.js +0 -98
- package/lib/routes/donews/index.js +0 -59
- package/lib/routes/donews/utils.js +0 -19
- package/lib/routes/dsb/area.js +0 -33
- package/lib/routes/dxy/vaccine.js +0 -109
- package/lib/routes/egsea/flash.js +0 -40
- package/lib/routes/esquirehk/tag.js +0 -71
- package/lib/routes/facebook/page.js +0 -128
- package/lib/routes/feixuew/index.js +0 -63
- package/lib/routes/fjnews/fznews.js +0 -55
- package/lib/routes/fjnews/jjnews.js +0 -43
- package/lib/routes/fulinian/index.js +0 -50
- package/lib/routes/gab/explore.js +0 -31
- package/lib/routes/gamegrape/index.js +0 -73
- package/lib/routes/gov/moa/sjzxfb.js +0 -20
- package/lib/routes/gvm/index.js +0 -94
- package/lib/routes/hkcd/pdf.js +0 -30
- package/lib/routes/hkcnews/news.js +0 -63
- package/lib/routes/hkgolden/index.js +0 -110
- package/lib/routes/huawei/xinsheng/index.js +0 -61
- package/lib/routes/iea/index.js +0 -53
- package/lib/routes/iie/blog.js +0 -47
- package/lib/routes/imaijia/category.js +0 -63
- package/lib/routes/itjuzi/invest.js +0 -32
- package/lib/routes/itjuzi/merge.js +0 -32
- package/lib/routes/iyiou/index.js +0 -41
- package/lib/routes/jianshu/trending.js +0 -28
- package/lib/routes/jiazhen108/index.js +0 -47
- package/lib/routes/jinritoutiao/keyword.js +0 -27
- package/lib/routes/juesheng/index.js +0 -49
- package/lib/routes/krankenkassen/index.js +0 -54
- package/lib/routes/kzfeed/topic.js +0 -122
- package/lib/routes/lingyi/index.js +0 -64
- package/lib/routes/liquipedia/dota2_matches.js +0 -50
- package/lib/routes/lowendtalk/discussion.js +0 -43
- package/lib/routes/makeuseof/index.js +0 -59
- package/lib/routes/matataki/site/posts/author.js +0 -17
- package/lib/routes/matataki/site/posts/favorite.js +0 -42
- package/lib/routes/matataki/site/posts/scoreranking.js +0 -15
- package/lib/routes/matataki/site/posts/tag.js +0 -16
- package/lib/routes/matataki/site/posts/timeranking.js +0 -15
- package/lib/routes/matataki/site/posts/token.js +0 -18
- package/lib/routes/matataki/utils/matataki-utils.js +0 -125
- package/lib/routes/mi/board.js +0 -36
- package/lib/routes/mitbbs/index.js +0 -54
- package/lib/routes/nba/app_news.js +0 -40
- package/lib/routes/newsmth/account.js +0 -39
- package/lib/routes/newsmth/section.js +0 -99
- package/lib/routes/northhouse/index.js +0 -54
- package/lib/routes/or/index.js +0 -54
- package/lib/routes/partnershiponai/resources.js +0 -49
- package/lib/routes/pintu360/index.js +0 -54
- package/lib/routes/plainlaw/archives.js +0 -42
- package/lib/routes/pmcaff/user.js +0 -56
- package/lib/routes/polar/blog.js +0 -47
- package/lib/routes/popiask/questions.js +0 -41
- package/lib/routes/popiask/tapechat_questions.js +0 -43
- package/lib/routes/popyard/index.js +0 -93
- package/lib/routes/qlwb/city.js +0 -54
- package/lib/routes/qlwb/news.js +0 -37
- package/lib/routes/questmobile/report.js +0 -121
- package/lib/routes/sbs/chinese.js +0 -70
- package/lib/routes/sixthtone/news.js +0 -52
- package/lib/routes/socialbeta/hunt.js +0 -29
- package/lib/routes/soomal/topics.js +0 -130
- package/lib/routes/tam/forecast.js +0 -53
- package/lib/routes/tanwu/products.js +0 -27
- package/lib/routes/tencent/guyu/channel.js +0 -64
- package/lib/routes/thrillist/index.js +0 -67
- package/lib/routes/tianya/comments.js +0 -41
- package/lib/routes/tianya/index.js +0 -32
- package/lib/routes/tianya/user.js +0 -34
- package/lib/routes/tuicool/mags.js +0 -41
- package/lib/routes/uniqlo/stylingbook.js +0 -24
- package/lib/routes/universities/buaa/news/index.js +0 -66
- package/lib/routes/universities/buaa/utils.js +0 -57
- package/lib/routes/voa/day-photos.js +0 -54
- package/lib/routes/vuevideo/user.js +0 -60
- package/lib/routes/weseepro/circle.js +0 -38
- package/lib/routes/weseepro/newest-direct.js +0 -69
- package/lib/routes/weseepro/newest.js +0 -69
- package/lib/routes/whalegogo/home.js +0 -43
- package/lib/routes/whalegogo/portal.js +0 -57
- package/lib/routes/wired/tag.js +0 -31
- package/lib/routes/wukong/user.js +0 -93
- package/lib/routes/xici/index.js +0 -33
- package/lib/routes/yicas/blog.js +0 -52
- package/lib/routes/yidoutang/index.js +0 -33
- package/lib/routes/zfrontier/board_postlist.js +0 -36
- package/lib/routes/zfrontier/postlist.js +0 -33
- package/lib/routes/zzz/index.js +0 -59
- package/lib/v2/2047/index.js +0 -55
- package/lib/v2/2047/maintainer.js +0 -3
- package/lib/v2/2047/radar.js +0 -13
- package/lib/v2/2047/router.js +0 -3
- package/lib/v2/agirls/topic.js +0 -44
- package/lib/v2/allrecode/index.js +0 -65
- package/lib/v2/allrecode/maintainer.js +0 -5
- package/lib/v2/allrecode/news.js +0 -35
- package/lib/v2/allrecode/radar.js +0 -25
- package/lib/v2/allrecode/router.js +0 -4
- package/lib/v2/appledaily/index.js +0 -65
- package/lib/v2/appledaily/maintainer.js +0 -3
- package/lib/v2/appledaily/radar.js +0 -157
- package/lib/v2/appledaily/router.js +0 -3
- package/lib/v2/audiobar/latest.js +0 -53
- package/lib/v2/audiobar/maintainer.js +0 -3
- package/lib/v2/audiobar/radar.js +0 -13
- package/lib/v2/audiobar/router.js +0 -3
- package/lib/v2/baijing/index.js +0 -54
- package/lib/v2/baijing/maintainer.js +0 -3
- package/lib/v2/baijing/radar.js +0 -22
- package/lib/v2/baijing/router.js +0 -3
- package/lib/v2/bilibili/blackboard.js +0 -31
- package/lib/v2/bilibili/channel.js +0 -31
- package/lib/v2/bilibili/online.js +0 -25
- package/lib/v2/bilibili/topic.js +0 -50
- package/lib/v2/bilibili/video-all.js +0 -74
- package/lib/v2/cctv/special.js +0 -110
- package/lib/v2/cntheory/maintainer.js +0 -3
- package/lib/v2/cntheory/paper.js +0 -89
- package/lib/v2/cntheory/radar.js +0 -13
- package/lib/v2/cntheory/router.js +0 -3
- package/lib/v2/cntheory/templates/description.art +0 -2
- package/lib/v2/diandong/ddh.js +0 -51
- package/lib/v2/disinformationindex/blog.js +0 -48
- package/lib/v2/disinformationindex/maintainer.js +0 -4
- package/lib/v2/disinformationindex/radar.js +0 -19
- package/lib/v2/disinformationindex/research.js +0 -45
- package/lib/v2/disinformationindex/router.js +0 -4
- package/lib/v2/disinformationindex/templates/description.art +0 -7
- package/lib/v2/eastday/find.js +0 -49
- package/lib/v2/economist/download.js +0 -30
- package/lib/v2/economist/gre-vocabulary.js +0 -19
- package/lib/v2/eet-china/maintainer.js +0 -4
- package/lib/v2/eet-china/mp/index.js +0 -10
- package/lib/v2/eet-china/mp/tags.js +0 -10
- package/lib/v2/eet-china/mp/util.js +0 -67
- package/lib/v2/eet-china/radar.js +0 -24
- package/lib/v2/eet-china/router.js +0 -4
- package/lib/v2/ezone/index.js +0 -70
- package/lib/v2/ezone/maintainer.js +0 -3
- package/lib/v2/ezone/radar.js +0 -13
- package/lib/v2/ezone/router.js +0 -3
- package/lib/v2/filmdeepfocus/index.js +0 -58
- package/lib/v2/filmdeepfocus/maintainer.js +0 -3
- package/lib/v2/filmdeepfocus/radar.js +0 -13
- package/lib/v2/filmdeepfocus/router.js +0 -3
- package/lib/v2/ft/myft.js +0 -51
- package/lib/v2/good/index.js +0 -53
- package/lib/v2/good/maintainer.js +0 -3
- package/lib/v2/good/radar.js +0 -13
- package/lib/v2/good/router.js +0 -3
- package/lib/v2/gov/zhengce/zuixin.js +0 -39
- package/lib/v2/gq/maintainer.js +0 -3
- package/lib/v2/gq/radar.js +0 -13
- package/lib/v2/gq/router.js +0 -3
- package/lib/v2/gq/templates/embed-article.art +0 -1
- package/lib/v2/gq/templates/embed-product.art +0 -4
- package/lib/v2/gq/templates/img.art +0 -6
- package/lib/v2/gq/templates/tw.art +0 -3
- package/lib/v2/gq/templates/videoObject.art +0 -6
- package/lib/v2/gq/templates/youtube.art +0 -3
- package/lib/v2/gq/tw/index.js +0 -165
- package/lib/v2/guandian/index.js +0 -37
- package/lib/v2/guandian/maintainer.js +0 -3
- package/lib/v2/guandian/radar.js +0 -13
- package/lib/v2/guandian/router.js +0 -3
- package/lib/v2/gz-cmc/index.js +0 -137
- package/lib/v2/gz-cmc/maintainer.js +0 -3
- package/lib/v2/gz-cmc/radar.js +0 -12
- package/lib/v2/gz-cmc/router.js +0 -3
- package/lib/v2/gz-cmc/templates/description.art +0 -3
- package/lib/v2/gzh360/_README +0 -1
- package/lib/v2/gzh360/category.js +0 -8
- package/lib/v2/gzh360/gzh.js +0 -18
- package/lib/v2/gzh360/maintainer.js +0 -4
- package/lib/v2/gzh360/radar.js +0 -19
- package/lib/v2/gzh360/router.js +0 -4
- package/lib/v2/gzh360/universal.js +0 -53
- package/lib/v2/gzh360/utils.js +0 -62
- package/lib/v2/hellobtc/topic.js +0 -43
- package/lib/v2/hjedd/article.js +0 -27
- package/lib/v2/hjedd/hot.js +0 -14
- package/lib/v2/hjedd/latest.js +0 -14
- package/lib/v2/hjedd/maintainer.js +0 -10
- package/lib/v2/hjedd/news.js +0 -14
- package/lib/v2/hjedd/notice.js +0 -14
- package/lib/v2/hjedd/original.js +0 -14
- package/lib/v2/hjedd/radar.js +0 -55
- package/lib/v2/hjedd/router.js +0 -10
- package/lib/v2/hjedd/templates/attachment.art +0 -7
- package/lib/v2/hjedd/top.js +0 -14
- package/lib/v2/hjedd/utils.js +0 -111
- package/lib/v2/hket/index.js +0 -122
- package/lib/v2/hket/radar.js +0 -45
- package/lib/v2/hket/router.js +0 -3
- package/lib/v2/hket/templates/description.art +0 -1
- package/lib/v2/hket/templates/image.art +0 -1
- package/lib/v2/hotchina/index.js +0 -55
- package/lib/v2/hotchina/maintainer.js +0 -5
- package/lib/v2/hotchina/radar.js +0 -25
- package/lib/v2/hotchina/router.js +0 -3
- package/lib/v2/huxiu/article.js +0 -33
- package/lib/v2/huxiu/author.js +0 -36
- package/lib/v2/huxiu/templates/brief.art +0 -22
- package/lib/v2/huxiu/templates/img.art +0 -3
- package/lib/v2/huxiu/templates/moment.art +0 -16
- package/lib/v2/huxiu/templates/video.art +0 -7
- package/lib/v2/huxiu/utils.js +0 -154
- package/lib/v2/hyqss/index.js +0 -89
- package/lib/v2/hyqss/maintainer.js +0 -4
- package/lib/v2/hyqss/radar.js +0 -22
- package/lib/v2/hyqss/router.js +0 -3
- package/lib/v2/i-cable/category.js +0 -74
- package/lib/v2/i-cable/maintainer.js +0 -3
- package/lib/v2/i-cable/radar.js +0 -13
- package/lib/v2/i-cable/router.js +0 -3
- package/lib/v2/i-cable/templates/desc.art +0 -8
- package/lib/v2/islander/maintainer.js +0 -4
- package/lib/v2/islander/radar.js +0 -19
- package/lib/v2/islander/router.js +0 -4
- package/lib/v2/islander/search.js +0 -33
- package/lib/v2/islander/top30event.js +0 -28
- package/lib/v2/knowmedia/index.js +0 -38
- package/lib/v2/knowmedia/maintainer.js +0 -3
- package/lib/v2/knowmedia/radar.js +0 -31
- package/lib/v2/knowmedia/router.js +0 -3
- package/lib/v2/knowmedia/templates/desc.art +0 -3
- package/lib/v2/kuwaitlocal/index.js +0 -47
- package/lib/v2/kuwaitlocal/maintainer.js +0 -4
- package/lib/v2/kuwaitlocal/radar.js +0 -19
- package/lib/v2/mclaren/index.js +0 -96
- package/lib/v2/mclaren/maintainer.js +0 -3
- package/lib/v2/mclaren/radar.js +0 -29
- package/lib/v2/mclaren/router.js +0 -3
- package/lib/v2/mclaren/templates/desc.art +0 -6
- package/lib/v2/mobilism/forums.js +0 -75
- package/lib/v2/mobilism/maintainer.js +0 -4
- package/lib/v2/mobilism/portal.js +0 -54
- package/lib/v2/mobilism/radar.js +0 -23
- package/lib/v2/mobilism/router.js +0 -4
- package/lib/v2/nmbxd1/forum.js +0 -58
- package/lib/v2/nmbxd1/maintainer.js +0 -3
- package/lib/v2/nmbxd1/radar.js +0 -13
- package/lib/v2/nmbxd1/router.js +0 -3
- package/lib/v2/nmbxd1/templates/description.art +0 -65
- package/lib/v2/nytimes/author.js +0 -43
- package/lib/v2/pmthinking/index.js +0 -61
- package/lib/v2/pmthinking/maintainer.js +0 -3
- package/lib/v2/pmthinking/radar.js +0 -13
- package/lib/v2/pmthinking/router.js +0 -3
- package/lib/v2/pmthinking/templates/description.art +0 -4
- package/lib/v2/qdaily/index.js +0 -87
- package/lib/v2/qdaily/maintainer.js +0 -3
- package/lib/v2/qdaily/radar.js +0 -25
- package/lib/v2/qdaily/router.js +0 -3
- package/lib/v2/qianp/maintainer.js +0 -3
- package/lib/v2/qianp/news.js +0 -48
- package/lib/v2/qianp/radar.js +0 -13
- package/lib/v2/qianp/router.js +0 -3
- package/lib/v2/radiofrance/geopolitique.js +0 -33
- package/lib/v2/radiofrance/maintainer.js +0 -3
- package/lib/v2/radiofrance/radar.js +0 -13
- package/lib/v2/radiofrance/router.js +0 -3
- package/lib/v2/radiofrance/templates/article.art +0 -6
- package/lib/v2/shuiguopai/index.js +0 -80
- package/lib/v2/shuiguopai/maintainer.js +0 -3
- package/lib/v2/shuiguopai/radar.js +0 -13
- package/lib/v2/shuiguopai/router.js +0 -3
- package/lib/v2/shuiguopai/templates/description.art +0 -8
- package/lib/v2/taiwannews/hot.js +0 -52
- package/lib/v2/taiwannews/maintainer.js +0 -3
- package/lib/v2/taiwannews/radar.js +0 -13
- package/lib/v2/taiwannews/router.js +0 -3
- package/lib/v2/twitter/web-api/twitter-got.js +0 -113
- package/lib/v2/twreporter/category.js +0 -40
- package/lib/v2/twreporter/photography.js +0 -46
- package/lib/v2/verse/articles.js +0 -42
- package/lib/v2/verse/maintainer.js +0 -3
- package/lib/v2/verse/radar.js +0 -13
- package/lib/v2/verse/router.js +0 -3
- package/lib/v2/watchout/index.js +0 -51
- package/lib/v2/watchout/maintainer.js +0 -3
- package/lib/v2/watchout/radar.js +0 -13
- package/lib/v2/watchout/router.js +0 -3
- package/lib/v2/woshipm/bookmarks.js +0 -34
- package/lib/v2/woshipm/latest.js +0 -27
- package/lib/v2/wp-china/maintainer.js +0 -3
- package/lib/v2/wp-china/news.js +0 -56
- package/lib/v2/wp-china/radar.js +0 -13
- package/lib/v2/wp-china/router.js +0 -3
- package/lib/v2/wxkol/maintainer.js +0 -3
- package/lib/v2/wxkol/radar.js +0 -13
- package/lib/v2/wxkol/router.js +0 -3
- package/lib/v2/wxkol/show.js +0 -81
- package/lib/v2/xwlb/index.js +0 -40
- package/lib/v2/xwlb/maintainer.js +0 -4
- package/lib/v2/xwlb/radar.js +0 -13
- package/lib/v2/xwlb/router.js +0 -4
- package/lib/v2/yaohuo/index.js +0 -30
- package/lib/v2/yaohuo/maintainer.js +0 -3
- package/lib/v2/yaohuo/radar.js +0 -13
- package/lib/v2/yaohuo/router.js +0 -3
- package/lib/v2/yunspe/maintainer.js +0 -3
- package/lib/v2/yunspe/newsflash.js +0 -42
- package/lib/v2/yunspe/radar.js +0 -13
- package/lib/v2/yunspe/router.js +0 -3
- package/lib/v2/zuzhirenshi/index.js +0 -87
- package/lib/v2/zuzhirenshi/maintainer.js +0 -3
- package/lib/v2/zuzhirenshi/radar.js +0 -13
- package/lib/v2/zuzhirenshi/router.js +0 -3
- /package/lib/v2/{hket → bossdesign}/maintainer.js +0 -0
- /package/lib/v2/{kuwaitlocal → bossdesign}/router.js +0 -0
- /package/lib/{routes → v2}/gov/moa/moa.js +0 -0
- /package/lib/{routes → v2}/jianshu/collection.js +0 -0
- /package/lib/{routes → v2}/jianshu/home.js +0 -0
- /package/lib/{routes → v2}/jianshu/user.js +0 -0
- /package/lib/v2/yahoo/news/{index.js → us/index.js} +0 -0
package/README.md
CHANGED
|
@@ -5,14 +5,16 @@
|
|
|
5
5
|
|
|
6
6
|
> 🍰 Everything is RSSible
|
|
7
7
|
|
|
8
|
-
[](https://rsshub.app)
|
|
9
|
+
[](https://hub.docker.com/r/diygod/rsshub)
|
|
10
|
+
[](https://www.npmjs.com/package/rsshub)
|
|
11
11
|
[](https://github.com/DIYgod/RSSHub/actions/workflows/test.yml?query=event%3Apush+branch%3Amaster)
|
|
12
12
|
[](https://app.codecov.io/gh/DIYgod/RSSHub/branch/master)
|
|
13
13
|
[](https://www.codefactor.io/repository/github/diygod/rsshub)
|
|
14
14
|
[](https://deepscan.io/dashboard#view=project&tid=6244&pid=8135&bid=92448)
|
|
15
15
|
|
|
16
|
+
[](https://t.me/rsshub) [](https://t.me/awesomeRSSHub)
|
|
17
|
+
|
|
16
18
|
## Introduction
|
|
17
19
|
|
|
18
20
|
RSSHub is an open source, easy to use, and extensible RSS feed generator. It's capable of generating RSS feeds from pretty much everything.
|
|
@@ -30,7 +32,7 @@ RSSHub can be used with browser extension [RSSHub Radar](https://github.com/DIYg
|
|
|
30
32
|
### Special Sponsors
|
|
31
33
|
|
|
32
34
|
<p>
|
|
33
|
-
<a href="https://xlog.app/" target="_blank"><img height="
|
|
35
|
+
<a href="https://rss3.io" target="_blank"><img height="50px" src="https://i.imgur.com/lb1dDGK.png"></a> <a href="https://xlog.app/" target="_blank"><img height="50px" src="https://i.imgur.com/JuhHTKD.png"></a>
|
|
34
36
|
</p>
|
|
35
37
|
|
|
36
38
|
[](https://docs.rsshub.app/support/)
|
|
@@ -43,12 +45,12 @@ Logo designer [sheldonrrr](https://dribbble.com/sheldonrrr)
|
|
|
43
45
|
|
|
44
46
|
### Backers
|
|
45
47
|
|
|
46
|
-
<a href="https://www.cloudflare.com" target="_blank"><img height="50px" src="https://i.imgur.com/7Ph27Fq.png"></a> <a href="https://www.netlify.com" target="_blank"><img height="40px" src="https://i.imgur.com/cU01915.png"></a>
|
|
48
|
+
<a href="https://www.cloudflare.com" target="_blank"><img height="50px" src="https://i.imgur.com/7Ph27Fq.png"></a> <a href="https://www.netlify.com" target="_blank"><img height="40px" src="https://i.imgur.com/cU01915.png"></a> <a href="https://1password.com" target="_blank"><img height="40px" src="https://i.imgur.com/a2XjflO.png"></a>
|
|
47
49
|
|
|
48
50
|
## Related Projects
|
|
49
51
|
|
|
50
52
|
- [RSSHub Radar](https://github.com/DIYgod/RSSHub-Radar) | A browser extension that can help you quickly discover and subscribe to the RSS and RSSHub of current websites.
|
|
51
|
-
- [RSSBud](https://github.com/Cay-Zhang/RSSBud)
|
|
53
|
+
- [RSSBud](https://github.com/Cay-Zhang/RSSBud) | RSSHub Radar for iOS platform, designed specifically for mobile ecosystem optimization.
|
|
52
54
|
- [RSSAid](https://github.com/LeetaoGoooo/RSSAid) | RSSHub Radar for Android platform built with Flutter.
|
|
53
55
|
- [DocSearch](https://github.com/Fatpandac/DocSearch) | Link RSSHub DocSearch into Raycast
|
|
54
56
|
|
|
@@ -78,7 +80,7 @@ Recurring donors will be rewarded via express issue response, or even have your
|
|
|
78
80
|
- Become a Sponser on [Patreon](https://www.patreon.com/DIYgod)
|
|
79
81
|
- Become a Sponser on [Open Collective](https://opencollective.com/RSSHub)
|
|
80
82
|
- Become a Sponser on [爱发电](https://afdian.net/@diygod)
|
|
81
|
-
- Contact us directly: i@diygod.me
|
|
83
|
+
- Contact us directly: <i@diygod.me>
|
|
82
84
|
|
|
83
85
|
### One-time Donation
|
|
84
86
|
|
package/lib/config.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
require('dotenv').config();
|
|
2
2
|
const randUserAgent = require('./utils/rand-user-agent');
|
|
3
|
+
const got = require('got');
|
|
3
4
|
let envs = process.env;
|
|
4
5
|
let value;
|
|
5
6
|
const TRUE_UA = 'RSSHub/1.0 (+http://github.com/DIYgod/RSSHub; like FeedFetcher-Google)';
|
|
6
7
|
|
|
7
8
|
const calculateValue = () => {
|
|
8
9
|
const bilibili_cookies = {};
|
|
9
|
-
const twitter_tokens = {};
|
|
10
10
|
const email_config = {};
|
|
11
11
|
const discuz_cookies = {};
|
|
12
12
|
const medium_cookies = {};
|
|
@@ -16,9 +16,6 @@ const calculateValue = () => {
|
|
|
16
16
|
if (name.startsWith('BILIBILI_COOKIE_')) {
|
|
17
17
|
const uid = name.slice(16);
|
|
18
18
|
bilibili_cookies[uid] = envs[name];
|
|
19
|
-
} else if (name.startsWith('TWITTER_TOKEN_')) {
|
|
20
|
-
const id = name.slice(14);
|
|
21
|
-
twitter_tokens[id] = envs[name];
|
|
22
19
|
} else if (name.startsWith('EMAIL_CONFIG_')) {
|
|
23
20
|
const id = name.slice(13);
|
|
24
21
|
email_config[id] = envs[name];
|
|
@@ -222,6 +219,9 @@ const calculateValue = () => {
|
|
|
222
219
|
lastfm: {
|
|
223
220
|
api_key: envs.LASTFM_API_KEY,
|
|
224
221
|
},
|
|
222
|
+
lightnovel: {
|
|
223
|
+
cookie: envs.SECURITY_KEY,
|
|
224
|
+
},
|
|
225
225
|
manhuagui: {
|
|
226
226
|
cookie: envs.MHGUI_COOKIE,
|
|
227
227
|
},
|
|
@@ -295,10 +295,8 @@ const calculateValue = () => {
|
|
|
295
295
|
cookie: envs.TOPHUB_COOKIE,
|
|
296
296
|
},
|
|
297
297
|
twitter: {
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
tokens: twitter_tokens,
|
|
301
|
-
authorization: envs.TWITTER_WEBAPI_AUTHORIZAION && envs.TWITTER_WEBAPI_AUTHORIZAION.split(','),
|
|
298
|
+
oauthTokens: envs.TWITTER_OAUTH_TOKEN?.split(','),
|
|
299
|
+
oauthTokenSecrets: envs.TWITTER_OAUTH_TOKEN_SECRET?.split(','),
|
|
302
300
|
},
|
|
303
301
|
weibo: {
|
|
304
302
|
app_key: envs.WEIBO_APP_KEY,
|
|
@@ -335,6 +333,21 @@ const calculateValue = () => {
|
|
|
335
333
|
};
|
|
336
334
|
calculateValue();
|
|
337
335
|
|
|
336
|
+
if (envs.REMOTE_CONFIG) {
|
|
337
|
+
got.get(envs.REMOTE_CONFIG)
|
|
338
|
+
.then((response) => {
|
|
339
|
+
const data = JSON.parse(response.body);
|
|
340
|
+
if (data) {
|
|
341
|
+
envs = Object.assign(envs, data);
|
|
342
|
+
calculateValue();
|
|
343
|
+
require('@/utils/logger').info('Remote config loaded.');
|
|
344
|
+
}
|
|
345
|
+
})
|
|
346
|
+
.catch((error) => {
|
|
347
|
+
require('@/utils/logger').error('Remote config load failed.', error);
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
|
|
338
351
|
module.exports = {
|
|
339
352
|
set: (env) => {
|
|
340
353
|
envs = Object.assign(process.env, env);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const xxhash = require('xxhash-wasm');
|
|
2
2
|
const config = require('@/config').value;
|
|
3
3
|
const logger = require('@/utils/logger');
|
|
4
4
|
const { RequestInProgressError } = require('@/errors');
|
|
@@ -81,8 +81,9 @@ module.exports = function (app) {
|
|
|
81
81
|
};
|
|
82
82
|
|
|
83
83
|
return async (ctx, next) => {
|
|
84
|
-
const
|
|
85
|
-
const
|
|
84
|
+
const { h64ToString } = await xxhash();
|
|
85
|
+
const key = 'rsshub:koa-redis-cache:' + h64ToString(ctx.request.path);
|
|
86
|
+
const controlKey = 'rsshub:path-requested:' + h64ToString(ctx.request.path);
|
|
86
87
|
|
|
87
88
|
if (!status.available) {
|
|
88
89
|
return next();
|
|
@@ -19,10 +19,10 @@ redisClient.on('connect', () => {
|
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
const getCacheTtlKey = (key) => {
|
|
22
|
-
if (key.startsWith('cacheTtl:')) {
|
|
23
|
-
throw Error('"cacheTtl:" prefix is reserved for the internal usage, please change your cache key'); // blocking any attempt to get/set the cacheTtl
|
|
22
|
+
if (key.startsWith('rsshub:cacheTtl:')) {
|
|
23
|
+
throw Error('"rsshub:cacheTtl:" prefix is reserved for the internal usage, please change your cache key'); // blocking any attempt to get/set the cacheTtl
|
|
24
24
|
}
|
|
25
|
-
return `cacheTtl:${key}`;
|
|
25
|
+
return `rsshub:cacheTtl:${key}`;
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
module.exports = {
|
|
@@ -39,6 +39,14 @@ module.exports = async (ctx, next) => {
|
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
} catch (err) {
|
|
42
|
+
if (err instanceof Error && !err.stack.split('\n')[1].includes('lib/middleware/parameter.js')) {
|
|
43
|
+
// Append v2 route path if a route throws an error
|
|
44
|
+
// since koa-mount will remove the mount path from ctx.request.path
|
|
45
|
+
// https://github.com/koajs/mount/issues/62
|
|
46
|
+
ctx.request.path = (ctx.mountPath ?? '') + ctx.request.path;
|
|
47
|
+
ctx._matchedRoute = ctx._matchedRoute ? (ctx.mountPath ?? '') + ctx._matchedRoute : ctx._matchedRoute;
|
|
48
|
+
}
|
|
49
|
+
|
|
42
50
|
let message = err;
|
|
43
51
|
if (err.name && (err.name === 'HTTPError' || err.name === 'RequestError')) {
|
|
44
52
|
message = `${err.message}: target website might be blocking our access, you can <a href="https://docs.rsshub.app/install/">host your own RSSHub instance</a> for a better usability.`;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
const { art, json } = require('@/utils/render');
|
|
1
|
+
const { art, json, rss3Ums } = require('@/utils/render');
|
|
2
2
|
const path = require('path');
|
|
3
3
|
const config = require('@/config').value;
|
|
4
|
-
const typeRegex = /\.(atom|rss|debug\.json|json|\d+\.debug\.html)$/;
|
|
4
|
+
const typeRegex = /\.(atom|rss|ums|debug\.json|json|\d+\.debug\.html)$/;
|
|
5
5
|
const { collapseWhitespace, convertDateToISO8601 } = require('@/utils/common-utils');
|
|
6
6
|
|
|
7
7
|
module.exports = async (ctx, next) => {
|
|
@@ -16,111 +16,105 @@ module.exports = async (ctx, next) => {
|
|
|
16
16
|
|
|
17
17
|
const outputType = ctx.state.type[1] || 'rss';
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
ctx.set({
|
|
31
|
-
'Content-Type': 'text/html; charset=UTF-8',
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
const index = parseInt(outputType.match(/(\d+)\.debug\.html$/)[1]);
|
|
35
|
-
if (!(ctx.state.data && ctx.state.data.item && ctx.state.data.item[index])) {
|
|
36
|
-
ctx.body = `ctx.state.data.item[${index}] not found`;
|
|
37
|
-
} else {
|
|
38
|
-
ctx.body = ctx.state.data.item[index].description;
|
|
19
|
+
// only enable when debugInfo=true
|
|
20
|
+
if (config.debugInfo) {
|
|
21
|
+
if (outputType === 'debug.json') {
|
|
22
|
+
ctx.set({
|
|
23
|
+
'Content-Type': 'application/json; charset=UTF-8',
|
|
24
|
+
});
|
|
25
|
+
if (ctx.state.json) {
|
|
26
|
+
ctx.body = JSON.stringify(ctx.state.json, null, 4);
|
|
27
|
+
} else {
|
|
28
|
+
ctx.body = JSON.stringify({ message: 'plugin does not set debug json' });
|
|
29
|
+
}
|
|
39
30
|
}
|
|
40
|
-
}
|
|
41
31
|
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
if (outputType.endsWith('.debug.html')) {
|
|
33
|
+
ctx.set({
|
|
34
|
+
'Content-Type': 'text/html; charset=UTF-8',
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
const index = parseInt(outputType.match(/(\d+)\.debug\.html$/)[1]);
|
|
38
|
+
if (!(ctx.state.data && ctx.state.data.item && ctx.state.data.item[index])) {
|
|
39
|
+
ctx.body = `ctx.state.data.item[${index}] not found`;
|
|
40
|
+
} else {
|
|
41
|
+
ctx.body = ctx.state.data.item[index].description;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
if (!ctx.body) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
switch (outputType) {
|
|
50
|
-
case 'atom':
|
|
51
|
-
template = path.resolve(__dirname, '../views/atom.art');
|
|
52
|
-
break;
|
|
53
|
-
case 'rss':
|
|
54
|
-
template = path.resolve(__dirname, '../views/rss.art');
|
|
55
|
-
break;
|
|
56
|
-
default:
|
|
57
|
-
template = path.resolve(__dirname, '../views/rss.art');
|
|
58
|
-
break;
|
|
59
|
-
}
|
|
47
|
+
const templateName = outputType === 'atom' ? 'atom.art' : 'rss.art';
|
|
48
|
+
const template = path.resolve(__dirname, `../views/${templateName}`);
|
|
60
49
|
|
|
61
50
|
if (ctx.state.data) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
ctx.state.data.item &&
|
|
67
|
-
ctx.state.data.item.forEach((item) => {
|
|
68
|
-
if (item.title) {
|
|
69
|
-
item.title = collapseWhitespace(item.title);
|
|
70
|
-
// trim title length
|
|
71
|
-
for (let length = 0, i = 0; i < item.title.length; i++) {
|
|
72
|
-
length += Buffer.from(item.title[i]).length !== 1 ? 2 : 1;
|
|
73
|
-
if (length > config.titleLengthLimit) {
|
|
74
|
-
item.title = `${item.title.slice(0, i)}...`;
|
|
75
|
-
break;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
51
|
+
const collapseWhitespaceForProperties = (properties, obj) => {
|
|
52
|
+
properties.forEach((prop) => {
|
|
53
|
+
if (obj[prop]) {
|
|
54
|
+
obj[prop] = collapseWhitespace(obj[prop]);
|
|
78
55
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
collapseWhitespaceForProperties(['title', 'subtitle', 'author'], ctx.state.data);
|
|
60
|
+
|
|
61
|
+
ctx.state.data.item?.forEach((item) => {
|
|
62
|
+
if (item.title) {
|
|
63
|
+
item.title = collapseWhitespace(item.title);
|
|
64
|
+
// trim title length
|
|
65
|
+
for (let length = 0, i = 0; i < item.title.length; i++) {
|
|
66
|
+
length += Buffer.from(item.title[i]).length !== 1 ? 2 : 1;
|
|
67
|
+
if (length > config.titleLengthLimit) {
|
|
68
|
+
item.title = `${item.title.slice(0, i)}...`;
|
|
69
|
+
break;
|
|
88
70
|
}
|
|
89
71
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
item.pubDate = convertDateToISO8601(item.pubDate);
|
|
99
|
-
item.updated = convertDateToISO8601(item.updated);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (typeof item.author === 'string') {
|
|
75
|
+
item.author = collapseWhitespace(item.author);
|
|
76
|
+
} else if (typeof item.author === 'object' && item.author !== null) {
|
|
77
|
+
item.author.forEach((a) => (a.name = collapseWhitespace(a.name)));
|
|
78
|
+
if (outputType !== 'json') {
|
|
79
|
+
item.author = item.author.map((a) => a.name).join(', ');
|
|
100
80
|
}
|
|
101
|
-
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (item.itunes_duration && ((typeof item.itunes_duration === 'string' && item.itunes_duration.indexOf(':') === -1) || (typeof item.itunes_duration === 'number' && !isNaN(item.itunes_duration)))) {
|
|
84
|
+
item.itunes_duration = +item.itunes_duration;
|
|
85
|
+
item.itunes_duration =
|
|
86
|
+
Math.floor(item.itunes_duration / 3600) + ':' + (Math.floor((item.itunes_duration % 3600) / 60) / 100).toFixed(2).slice(-2) + ':' + (((item.itunes_duration % 3600) % 60) / 100).toFixed(2).slice(-2);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (outputType !== 'rss') {
|
|
90
|
+
item.pubDate = convertDateToISO8601(item.pubDate);
|
|
91
|
+
item.updated = convertDateToISO8601(item.updated);
|
|
92
|
+
}
|
|
93
|
+
});
|
|
102
94
|
}
|
|
103
95
|
|
|
104
|
-
const
|
|
105
|
-
|
|
96
|
+
const currentDate = new Date();
|
|
106
97
|
const data = {
|
|
107
|
-
lastBuildDate:
|
|
108
|
-
updated:
|
|
109
|
-
ttl:
|
|
98
|
+
lastBuildDate: currentDate.toUTCString(),
|
|
99
|
+
updated: currentDate.toISOString(),
|
|
100
|
+
ttl: (config.cache.routeExpire / 60) | 0,
|
|
110
101
|
atomlink: ctx.request.href,
|
|
111
102
|
...ctx.state.data,
|
|
112
103
|
};
|
|
104
|
+
|
|
113
105
|
if (config.isPackage) {
|
|
114
106
|
ctx.body = data;
|
|
115
107
|
return;
|
|
116
108
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
109
|
+
|
|
110
|
+
if (outputType === 'ums') {
|
|
111
|
+
ctx.set({ 'Content-Type': 'application/json; charset=UTF-8' });
|
|
112
|
+
ctx.body = rss3Ums(data);
|
|
113
|
+
} else if (outputType === 'json') {
|
|
114
|
+
ctx.set({ 'Content-Type': 'application/feed+json; charset=UTF-8' });
|
|
115
|
+
ctx.body = json(data);
|
|
116
|
+
} else {
|
|
121
117
|
ctx.body = art(template, data);
|
|
122
|
-
return;
|
|
123
118
|
}
|
|
124
|
-
ctx.body = json(data);
|
|
125
119
|
}
|
|
126
120
|
};
|
package/lib/radar-rules.js
CHANGED
|
@@ -288,18 +288,6 @@ module.exports = {
|
|
|
288
288
|
],
|
|
289
289
|
},
|
|
290
290
|
|
|
291
|
-
'chinatimes.com': {
|
|
292
|
-
_name: '中時電子報',
|
|
293
|
-
www: [
|
|
294
|
-
{
|
|
295
|
-
title: '新聞',
|
|
296
|
-
docs: 'https://docs.rsshub.app/routes/traditional-media#zhong-shi-dian-zi-bao',
|
|
297
|
-
source: '/:caty',
|
|
298
|
-
target: (params) => '/chinatimes/' + params.caty,
|
|
299
|
-
},
|
|
300
|
-
],
|
|
301
|
-
},
|
|
302
|
-
|
|
303
291
|
'govopendata.com': {
|
|
304
292
|
_name: '新闻联播文字版',
|
|
305
293
|
cn: [
|
|
@@ -323,17 +311,6 @@ module.exports = {
|
|
|
323
311
|
},
|
|
324
312
|
],
|
|
325
313
|
},
|
|
326
|
-
'xiaomi.cn': {
|
|
327
|
-
_name: '小米社区',
|
|
328
|
-
www: [
|
|
329
|
-
{
|
|
330
|
-
title: '圈子',
|
|
331
|
-
docs: 'https://docs.rsshub.app/routes/bbs#xiao-mi-she-qu',
|
|
332
|
-
source: '/board/:boardId',
|
|
333
|
-
target: '/mi/bbs/board/:boardId',
|
|
334
|
-
},
|
|
335
|
-
],
|
|
336
|
-
},
|
|
337
314
|
'suzhou.gov.cn': {
|
|
338
315
|
_name: '苏州市政府',
|
|
339
316
|
www: [
|
|
@@ -857,21 +834,6 @@ module.exports = {
|
|
|
857
834
|
},
|
|
858
835
|
],
|
|
859
836
|
},
|
|
860
|
-
'popiapp.cn': {
|
|
861
|
-
_name: 'Popi 提问箱',
|
|
862
|
-
www: [
|
|
863
|
-
{
|
|
864
|
-
title: '提问箱新回答',
|
|
865
|
-
docs: 'https://docs.rsshub.app/routes/social-media#popi-ti-wen-xiang',
|
|
866
|
-
source: '/:id',
|
|
867
|
-
target: (params) => {
|
|
868
|
-
if (params.id) {
|
|
869
|
-
return '/popiask/:id';
|
|
870
|
-
}
|
|
871
|
-
},
|
|
872
|
-
},
|
|
873
|
-
],
|
|
874
|
-
},
|
|
875
837
|
'nppa.gov.cn': {
|
|
876
838
|
_name: '国家新闻出版署',
|
|
877
839
|
www: [
|
|
@@ -940,17 +902,6 @@ module.exports = {
|
|
|
940
902
|
},
|
|
941
903
|
],
|
|
942
904
|
},
|
|
943
|
-
'buaq.net': {
|
|
944
|
-
_name: '不安全资讯',
|
|
945
|
-
'.': [
|
|
946
|
-
{
|
|
947
|
-
title: '不安全资讯',
|
|
948
|
-
docs: 'http://docs.rsshub.app/routes/new-media#bu-an-quan',
|
|
949
|
-
source: '/',
|
|
950
|
-
target: '/buaq',
|
|
951
|
-
},
|
|
952
|
-
],
|
|
953
|
-
},
|
|
954
905
|
'jian-ning.com': {
|
|
955
906
|
_name: '建宁闲谈',
|
|
956
907
|
'.': [
|
|
@@ -962,50 +913,6 @@ module.exports = {
|
|
|
962
913
|
},
|
|
963
914
|
],
|
|
964
915
|
},
|
|
965
|
-
'matataki.io': {
|
|
966
|
-
_name: 'matataki',
|
|
967
|
-
www: [
|
|
968
|
-
{
|
|
969
|
-
title: '最热作品',
|
|
970
|
-
docs: 'https://docs.rsshub.app/routes/new-media#matataki',
|
|
971
|
-
source: '/article/',
|
|
972
|
-
target: '/matataki/posts/hot',
|
|
973
|
-
},
|
|
974
|
-
{
|
|
975
|
-
title: '最新作品',
|
|
976
|
-
docs: 'https://docs.rsshub.app/routes/new-media#matataki',
|
|
977
|
-
source: '/article/latest',
|
|
978
|
-
target: '/matataki/posts/latest',
|
|
979
|
-
},
|
|
980
|
-
{
|
|
981
|
-
title: '作者创作',
|
|
982
|
-
docs: 'https://docs.rsshub.app/routes/new-media#matataki',
|
|
983
|
-
source: '/user/:uid',
|
|
984
|
-
target: (params) => `/matataki/users/${params.uid}/posts`,
|
|
985
|
-
},
|
|
986
|
-
{
|
|
987
|
-
title: 'Fan票关联作品',
|
|
988
|
-
docs: 'https://docs.rsshub.app/routes/new-media#matataki',
|
|
989
|
-
source: ['/token/:tokenId', '/token/:tokenId/circle'],
|
|
990
|
-
target: (params) => `/matataki/tokens/${params.tokenId}/posts`,
|
|
991
|
-
},
|
|
992
|
-
{
|
|
993
|
-
title: '标签关联作品',
|
|
994
|
-
docs: 'https://docs.rsshub.app/routes/new-media#matataki',
|
|
995
|
-
source: ['/tag/:tagId'],
|
|
996
|
-
target: (params, url) => {
|
|
997
|
-
const tagName = new URL(url).searchParams.get('name');
|
|
998
|
-
return `/matataki/tags/${params.tagId}/${tagName}/posts`;
|
|
999
|
-
},
|
|
1000
|
-
},
|
|
1001
|
-
{
|
|
1002
|
-
title: '收藏夹',
|
|
1003
|
-
docs: 'https://docs.rsshub.app/routes/new-media#matataki',
|
|
1004
|
-
source: '/user/:uid/favlist/:fid',
|
|
1005
|
-
target: (params) => `/matataki/users/${params.uid}/favorites/${params.fid}/posts`,
|
|
1006
|
-
},
|
|
1007
|
-
],
|
|
1008
|
-
},
|
|
1009
916
|
'huya.com': {
|
|
1010
917
|
_name: '虎牙直播',
|
|
1011
918
|
'.': [
|