diff --git a/Dockerfile b/Dockerfile index 8f8c30ab1a..df961ca513 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,7 +11,7 @@ ARG PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1; RUN ln -sf /bin/bash /bin/sh -RUN apt-get update && apt-get install -yq libgconf-2-4 apt-transport-https git dumb-init --no-install-recommends && apt-get clean \ +RUN apt-get update && apt-get install -yq libgconf-2-4 apt-transport-https git dumb-init python make g++ build-essential --no-install-recommends && apt-get clean \ && rm -rf /var/lib/apt/lists/* WORKDIR /app diff --git a/docs/design.md b/docs/design.md index 7be30d95a5..5b35b64762 100644 --- a/docs/design.md +++ b/docs/design.md @@ -83,6 +83,29 @@ Behance 用户主页 URL 获取用户名,如 +## Notefolio + +### Works + + + +| 分类 | 韩文分类名 | 中文分类名 | +| ---- | --------------- | --------------- | +| all | 전체 | 全部 | +| A7 | 공예 | 工艺品 | +| J7 | 그래픽 디자인 | 平面设计 | +| B7 | 디지털 아트 | 数字艺术 | +| C7 | 영상/모션그래픽 | 视频 / 图形动画 | +| D7 | 브랜딩/편집 | 品牌创建 / 编辑 | +| E7 | 산업 디자인 | 工业设计 | +| F7 | UI/UX | UI/UX | +| G7 | 일러스트레이션 | 插画 | +| K7 | 타이포그래피 | 字体 | +| H7 | 파인아트 | 纯艺术 | +| I7 | 포토그래피 | 摄影 | + + + ## UI 中国 ### 推荐文章 diff --git a/docs/en/design.md b/docs/en/design.md index e945105cb0..7f96898568 100644 --- a/docs/en/design.md +++ b/docs/en/design.md @@ -77,6 +77,29 @@ Default is under 'https://www.methodstudios.com/en/features'. +## Notefolio + +### Works + + + +| Category | Name in Korean | Name in English | +| -------- | -------------- | --------------- | +| all | 전체 | All | +| A7 | 공예 | Crafts | +| J7 | 그래픽 디자인 | Graphic Design | +| B7 | 디지털 아트 | Digital Art | +| C7 | 영상/모션그래픽 | Video / Motion Graphics | +| D7 | 브랜딩/편집 | Branding / Editing | +| E7 | 산업 디자인 | Industrial Design | +| F7 | UI/UX | UI/UX | +| G7 | 일러스트레이션 | Illustration | +| K7 | 타이포그래피 | Typography | +| H7 | 파인아트 | Fine Art | +| I7 | 포토그래피 | Photography | + + + ## Unit Image ### Films diff --git a/docs/en/finance.md b/docs/en/finance.md index c8e7a8938b..935b14710b 100644 --- a/docs/en/finance.md +++ b/docs/en/finance.md @@ -15,3 +15,19 @@ pageClass: routes ### US Stock News + +## World Economic Forum + +### Report + + + +Languages + +| English | Español | Français | 中文 | 日本語 | +| ------- | ------- | -------- | ---- | ------ | +| en | es | fr | cn | jp | + +See filters in [Report](https://www.weforum.org/reports) for Year and Platform these two parameters. + + diff --git a/docs/en/other.md b/docs/en/other.md index 5fd2fa50e5..5bc5e6a04e 100644 --- a/docs/en/other.md +++ b/docs/en/other.md @@ -117,6 +117,18 @@ Official Website: [https://www.ssm.gov.mo/apps1/PreventWuhanInfection/en.aspx](h +## Nobel Prize + +### List + + + +| Physics | Chemistry | Physiology or Medicine | Literature | Peace | Economic Science | +| ------- | --------- | ---------------------- | ---------- | ----- | ----------------- | +| physics | chemistry | physiology-or-medicine | literature | peace | economic-sciences | + + + ## Parcel Tracking ### Hermes UK diff --git a/docs/en/parameter.md b/docs/en/parameter.md index 2407c06362..24d629963b 100644 --- a/docs/en/parameter.md +++ b/docs/en/parameter.md @@ -74,7 +74,13 @@ Output Sci-hub link in scientific journal routes, this supports major journals o - scihub: set to any value -举例: +Eg: + +## Conversion between Traditional and Simplified Chinese + +- opencc: s2t (Simplified Chinese to Traditional Chinese)、t2s (Traditional Chinese to Simplified Chinese), other optional values refer to [OpenCC - Configurations](https://github.com/BYVoid/OpenCC#configurations-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6) + +Eg: ## Output Formats diff --git a/docs/finance.md b/docs/finance.md index c6b8cebb3b..49653029eb 100644 --- a/docs/finance.md +++ b/docs/finance.md @@ -62,6 +62,22 @@ pageClass: routes <Route author="nczitzk" example="/gelonghui/keyword/ 早报" path="/gelonghui/keyword/:keyword" :paramsDesc="[' 搜索关键字']/> +## 世界经济论坛 + +### 报告 + + + +语言 + +| English | Español | Français | 中文 | 日本語 | +| ------- | ------- | -------- | ---- | ------ | +| en | es | fr | cn | jp | + +年份 和 平台 这两个参数请参见 [报告页](https://www.weforum.org/reports) 过滤条件处。 + + + ## 淘股吧股票论坛 ### 论坛总版 diff --git a/docs/game.md b/docs/game.md deleted file mode 100644 index f57268ddde..0000000000 --- a/docs/game.md +++ /dev/null @@ -1,485 +0,0 @@ ---- -pageClass: routes ---- - -# 游戏 - -## 3DMGame - -### 新闻中心 - - - -### 游戏资讯 - - - -| 新闻 | 攻略 | 下载资源 | 区块链快讯 | -| ---- | ---- | -------- | ---------- | -| news | gl | resource | blockchain | - - - -## 4Gamers 新闻 - -### 分类 - - - -### 标签 - - - -### 主題 - - - -## a9vgNews 游戏新闻 - -### a9vgNews 游戏新闻 - - - -## dekudeals - -### 分类 - - - -## Epic Games Store - -### 免费游戏 - - - -## Fate Grand Order - -### News - - - -## GNN.tw 游戏新闻 - -### GNN.tw 游戏新闻 - - - -## Indienova - -### indienova 文章 - - - -## Maxjia News - -### Dota 2 - - - -## Metacritic - -### 新游发行 - - - -支持的主机平台: - -| PS 4 | Xbox One | Switch | PC | Wii U | 3DS | PS Vita | iOS | -| ---- | -------- | ------ | -- | ----- | --- | ------- | --- | -| ps4 | xboxone | switch | pc | wii-u | 3ds | vita | ios | - -发行类型,默认为 `new`: - -| 新游发行 | 即将发行 | 全部 | -| -------- | -------- | ---- | -| new | coming | all | - -排序类型,默认为`date`: - -| 日期 | Metacritic 评分 | 用户评分 | -| ---- | --------------- | --------- | -| date | metascore | userscore | - - - -## Minecraft - -### Java 版游戏更新 - - - -### CurseForge Mod 更新 - - - -## Nintendo - -### eShop 新发售游戏 - - - -### 首页资讯(香港) - - - -### 首页资讯(中国) - - - -### 直面会 - - - -### Switch 本体更新情报(日本) - - - -## PlayStation - -### PlayStation Store 游戏列表 - - - -适用于 URL 如 的列表页,比如 [PSN 每月免费游戏](https://store.playstation.com/zh-hans-hk/grid/STORE-MSF86012-PLUS_FTT_CONTENT) 的 gridName 为 STORE-MSF86012-PLUS_FTT_CONTENT - - - -### PlayStation Store 游戏折扣 | 价格 - - - -地区语言如 `zh-hans-hk` 代表香港区简体中文, `zh-hant-tw` 为台湾繁体中文。不同地区游戏 gridName 不同,非中文地区使用英文提示。 - -适用于 URL 如 的游戏。 - -比如 PlayStation Store 香港简体中文区的 [《赛博朋克 2077》](https://store.playstation.com/zh-hans-hk/product/HP4497-CUSA16570_00-ASIAFULLGAME0000) 的 lang 为 `zh-hans-hk`, gridName 为 `HP4497-CUSA16570_00-ASIAFULLGAME0000` - - - -### PlayStation Network 用户奖杯 - - - -### PlayStation 4 系统更新纪录 - - - -## psnine - -### 首页 - 白金攻略 / 游戏开箱 - - - -### 新闻 - 游戏资讯 - - -### 数折-折扣信息推送 - - -### 闲游-二手盘信息 - - -### 游戏-新游戏奖杯信息 - - - -## Rockstar Games Social Club - -### 在线活动 - - - -| 游戏代码 | 游戏名称 | -| -------- | ------------ | -| GTAV | 侠盗猎车手 5 | -| RDR2 | 荒野大镖客 2 | - - - -## ScoreSaber - -### 用户动态 - - - -## Steam - -### Steam search - - - -参数 params 请从 Steam 的 URL 取得 - -Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的 params 是 `specials=1&term=atelier`,将它填入 RSSHub 的路由就好 - - - -### Steam news - - - -## SteamGifts - -### Discussions - - - -## TapTap - -::: warning 注意 - -由于区域限制,需要在有国内 IP 的机器上自建才能正常获取 RSS - -::: - -### 游戏论坛 - - - -| 全部 | 精华 | 官方 | -| ---- | ----- | -------- | -| all | elite | official | - -### 游戏更新 - - - -### 游戏评价 - - - -| 最新 | 最热 | 游戏时长 | -| ------ | ---- | -------- | -| update | hot | spent | - -## 二柄 APP - -### 新闻 - - - -## 公主链接 - -### 日服公告 - - - -### 台服公告 - - - -### 国服公告 - - - -## 篝火营地 - -### 游戏资讯 - - - -| 精选 | 海外 | 原创 | PS4 | Xboxone | PC | Switch | 掌机 | 手游 | 新闻 | 评测 | 文化 | 视频 | 音频 | 折扣 | -| ---------- | -------- | ------- | --- | ------- | -- | ------ | -------- | ---------- | ---- | ------ | ------- | ----- | ----- | -------- | -| choiceness | overseas | orignal | ps4 | xboxone | pc | switch | handheld | mobilegame | news | review | culture | video | audio | discount | - - - -### 游戏攻略 - - - -## 怪物猎人世界 - -### 更新情报 - - - -### 最新消息 - - - -## 旅法师营地 - -### 旅法师营地 - - - -| 主页资讯 | 炉石传说 | 万智牌 | 昆特牌 | 游戏王 | 电子游戏 | 手机游戏 | 桌面游戏 | -| -------- | -------- | ------ | ------ | ------ | -------- | -------- | -------- | -| 1 | 2 | 3 | 14 | 16 | 4 | 22 | 9 | - -| 影之诗 | Artifact | 玩家杂谈 | 营地电台 | 2047 | 魂武 | -| ------ | -------- | -------- | -------- | ---- | ---- | -| 17 | 67 | 21 | 5 | 62 | 68 | - - - -## 米哈游 - -### 崩坏 2 - 游戏公告 - - - -| 最新公告 | 版本信息 | 祈愿信息 | 活动介绍 | -| -------- | -------- | -------- | -------- | -| new | version | gach | event | - - - -### 崩坏 3 - 游戏公告 - - - -| 最新 | 动态 | 公告 | 活动 | 补给 | -| ------ | ---- | ------ | -------- | -------- | -| latest | news | notice | activity | strategy | - - - -## 明日方舟 - -### 游戏公告与新闻 - - - -## 奶牛关 - -### 元素文章 - - - -## 网易大神 - -### 用户发帖 - - - -## 王者荣耀 - -### 新闻中心 - - - -## 小黑盒 - -### 用户动态 - - - -### 游戏新闻 - - - -### 游戏折扣信息 - - - -| Steam | PlatStation4 | Switch | -| ----- | ------------ | ------ | -| pc | ps4 | switch | - - - -## 英雄联盟 - -### 新闻中心 - - - -## 游民星空 - -### 游民星空今日推荐 - - - -### 游民娱乐 - - - -| 趣囧时间 | 游民影院 | 游观天下 | 壁纸图库 | 游民盘点 | 游民福利 | -| -------- | -------- | -------- | -------- | -------- | -------- | -| qysj | ymyy | ygtx | bztk | ympd | ymfl | - - - -## 游戏打折情报 - -### 游戏折扣 - - - -| Steam 最新折扣 | Steam 热门游戏折扣 | Steam 热门中文游戏折扣 | Steam 历史低价 | Steam 中文游戏历史低价 | -| -------------- | ------------------ | ---------------------- | -------------- | ---------------------- | -| new | hot | hot_chinese | low | low_chinese | - - - -## 游戏时光 - -### 游戏时光新闻 - - - -### 游戏时光游戏发售表 - - - -### 关键词资讯 - - - -## 游研社 - -### 游研社 - - - -| 推游 | 游戏史 | 大事件 | 文化 | 趣闻 | 经典回顾 | -| --------- | ------- | ------ | ------- | ---- | -------- | -| recommend | history | big | culture | news | retro | - - - -## 掌上英雄联盟 - -### 推荐 - - - -## 最终幻想 14 - -### 最终幻想 14 国服 - - - -| 新闻 | 公告 | 活动 | 广告 | 所有 | -| ---- | -------- | ------ | --------- | ---- | -| news | announce | events | advertise | all | - -## きららファンタジア|奇拉拉幻想曲 - -### 公告 - - - -## マギアレコード(Magia Record, 魔法纪录) - -### 游戏公告 - - - -### 游戏横幅 - - - -## 巴哈姆特 - -### GNN新闻 - - - -暂无图片 - -| 首页 | PC | TV 掌機 | 手機遊戲 | 動漫畫 | 主題報導 | 活動展覽 | 電競 | -| ---- | -- | ------ | -------- | ----- | ------- | -------- | ------ | -| 缺省 | 1 | 3 | 4 | 5 | 9 | 11 | 13 | diff --git a/docs/government.md b/docs/government.md index 206cd3aadd..fdf5ca977b 100644 --- a/docs/government.md +++ b/docs/government.md @@ -380,6 +380,12 @@ pageClass: routes * * * +#### 马来西亚 `MY` + +- 大使馆: `/embassy/my` + +* * * + #### 新加坡 `SG` - 大使馆: `/embassy/sg` @@ -412,6 +418,12 @@ pageClass: routes | 贝尔法斯特 | `/embassy/uk/belfast` | | 曼彻斯特 | `/embassy/uk/manchester` | +## 中華民國國防部 + +### 即時軍事動態 + + + ## 中华人民共和国海关总署 ### 拍卖信息 / 海关法规 diff --git a/docs/multimedia.md b/docs/multimedia.md index 50cb939d5a..f2d128e227 100644 --- a/docs/multimedia.md +++ b/docs/multimedia.md @@ -131,6 +131,116 @@ pageClass: routes +## JavDB + +### 主页 + + + +分类 + +| 有碼 | 無碼 | 歐美 | FC2 | +| -------- | ---------- | ------- | --- | +| censored | uncensored | western | fc2 | + +排序 + +| 发布日期排序 | 磁鏈更新排序 | +| ------------ | ------------ | +| 1 | 2 | + +过滤 + +| 全部 | 可下载 | 含字幕 | 含短評 | +| ---- | ------ | ------ | ------ | +| 0 | 1 | 2 | 3 | + + + +### 分類 + + + +::: tip 提示 + +在 [分類](https://javdb.com/tags) 中选定分类后,URL 中 `tags?` 后的字段即为筛选参数。 + +如 中 `c2=5&c10=1` 为筛选参数。 + +::: + +分类 + +| 有碼 | 無碼 | 歐美 | FC2 | +| -------- | ---------- | ------- | --- | +| censored | uncensored | western | fc2 | + + + +### 排行榜 + + + +分类 + +| 有碼 | 無碼 | 歐美 | FC2 | +| -------- | ---------- | ------- | --- | +| censored | uncensored | western | fc2 | + +时间 + +| 日榜 | 週榜 | 月榜 | +| ----- | ------ | ------- | +| daily | weekly | monthly | + + + +### 搜索 + + + +| 全部 | 可播放 | 單體作品 | 演員 | 片商 | 導演 | 系列 | 番號 | 可下載 | 字幕 | 預覽圖 | +| ---- | -------- | -------- | ----- | ----- | -------- | ------ | ---- | -------- | ----- | ------- | +| | playable | single | actor | maker | director | series | code | download | cnsub | preview | + + + +### 演員 + + + +| 全部 | 可播放 | 單體作品 | 可下載 | 含字幕 | +| ---- | ------ | -------- | ------ | ------ | +| | p | s | d | c | + +所有演员编号参见 [演員庫](https://javdb.com/actors) + + + +### 系列 + + + +| 全部 | 可播放 | 單體作品 | 可下載 | 字幕 | 預覽圖 | +| ---- | -------- | -------- | -------- | ----- | ------- | +| | playable | single | download | cnsub | preview | + +所有系列编号参见 [系列庫](https://javdb.com/series) + + + +### 片商 + + + +| 全部 | 可播放 | 單體作品 | 可下載 | 字幕 | 預覽圖 | +| ---- | -------- | -------- | -------- | ----- | ------- | +| | playable | single | download | cnsub | preview | + +所有片商编号参见 [片商庫](https://javdb.com/makers) + + + ## JavLibrary ### 影片 diff --git a/docs/other.md b/docs/other.md index 6822829170..36f6b48ad4 100644 --- a/docs/other.md +++ b/docs/other.md @@ -521,6 +521,18 @@ type 为 all 时,category 参数不支持 cost 和 free +## 诺贝尔奖 + +### 获奖名单 + + + +| 物理学 | 化学 | 生理学或医学 | 文学 | 和平 | 经济学 | +| ------- | --------- | ---------------------- | ---------- | ----- | ----------------- | +| physics | chemistry | physiology-or-medicine | literature | peace | economic-sciences | + + + ## 且听风吟福利 ### 分类 diff --git a/docs/parameter.md b/docs/parameter.md index 0288126e17..6fb7dc407b 100644 --- a/docs/parameter.md +++ b/docs/parameter.md @@ -77,6 +77,12 @@ Telegram 即时预览模式需要在官网制作页面处理模板,请前往[ 举例: +## 中文简繁体转换 + +- opencc: s2t 简体转繁体、t2s 繁体转简体,其它可选值见 [OpenCC - Configurations](https://github.com/BYVoid/OpenCC#configurations-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6) + +举例: + ## 输出格式 RSSHub 同时支持 RSS 2.0 和 Atom 输出格式,在路由末尾添加 `.rss` 或 `.atom` 即可请求对应输出格式,缺省为 RSS 2.0 diff --git a/docs/traditional-media.md b/docs/traditional-media.md deleted file mode 100644 index 197fed109e..0000000000 --- a/docs/traditional-media.md +++ /dev/null @@ -1,770 +0,0 @@ ---- -pageClass: routes ---- - -# 传统媒体 - -## 21 财经 - -### 频道 - - - -## AP News - -### 话题 - - - -## BBC - -### BBC 英文 - - - -通过提取文章全文,以提供比官方源更佳的阅读体验. - -支持大部分频道,频道名称见[BBC 官方 RSS](https://www.bbc.co.uk/news/10628494)。 - -- 频道为单一路径,如 `https://feeds.bbci.co.uk/news/business/rss.xml` 则为 `/bbc/business`. -- 频道包含多重路径,如 `https://feeds.bbci.co.uk/news/world/asia/rss.xml` 则替换 `/` 为 `-` `/bbc/world-asia`. - - - -### BBC 中文网 - - - -通过提取文章全文,以提供比官方源更佳的阅读体验. - -支持大部分频道,频道名称见[BBC 中文网官方 RSS](https://www.bbc.com/zhongwen/simp/services/2009/09/000000_rss)。 - -简体版: - -- 频道,如金融财经 `http://www.bbc.co.uk/zhongwen/simp/business/index.xml` 则为 `/bbc/chinese/business`. - -繁体版: - -- 频道,如金融财经 `http://www.bbc.co.uk/zhongwen/trad/business/index.xml` 则为 `/bbc/traditionalchinese/business`. - - - -## Boston.com - -### 新闻 - - - -生成官方未提供的全文订阅点。 -有哪些 tag 请参考 [Boston.com 官网上的订阅页面](https://www.boston.com/rss-feeds)。例如,`https://www.boston.com/tag/local-news/?feed=rss` 对应 RSSHub 路由 `/boston/local-news`。 - - - -## CBC - -通过提取文章全文,以提供比官方源更佳的阅读体验。 - - - -## Chicago Tribune - -### 新闻 - - - -相比官方 RSS,多提供全文。 -目录分类[见其网站](https://www.chicagotribune.com/about/ct-chicago-tribune-rss-feeds-htmlstory.html)。例如,`https://www.chicagotribune.com/arcio/rss/category/nation-world/` 对应的 RSSHub 路由是 `/chicagotribune/nation-world`。由于官方源的部分路由有两级,因此这里也相应需要填写子分类。 - - - -## e 公司 - -### 快讯 - - - -## FT 中文网 - -### FT 中文网 - - - -::: tip 提示 - -- 不支持付费文章. -- 由于未知原因 FT 中文网的 SSL 证书不被信任 (参见[SSL Labs 报告](https://www.ssllabs.com/ssltest/analyze.html?d=www.ftchinese.com&latest)), 所有文章通过 http 协议获取. - -::: - -通过提取文章全文,以提供比官方源更佳的阅读体验. - -支持所有频道,频道名称见[官方频道 RSS](http://www.ftchinese.com/channel/rss.html). - -- 频道为单一路径,如 `http://www.ftchinese.com/rss/news` 则为 `/ft/chinese/news`. -- 频道包含多重路径,如 `http://www.ftchinese.com/rss/column/007000002` 则替换 `/` 为 `-` `/ft/chinese/column-007000002`. - - - -## NHK - -### News Web Easy - - - -## Solidot - -### 最新消息 - - - -::: tip 提示 - -Solidot 提供的 feed: - -- - -::: - -| 全部 | 创业 | Linux | 科学 | 科技 | 移动 | 苹果 | 硬件 | 软件 | 安全 | 游戏 | 书籍 | ask | idle | 博客 | 云计算 | -| ---- | ------- | ----- | ------- | ---------- | ------ | ----- | -------- | -------- | -------- | ----- | ----- | --- | ---- | ---- | ------ | -| www | startup | linux | science | technology | mobile | apple | hardware | software | security | games | books | ask | idle | blog | cloud | - - - -## Telecompaper - -### News - - - -可选分类如下 - -| WIRELESS | BROADBAND | VIDEO | GENERAL | IT | INDUSTRY RESOURCES | -| -------- | --------- | --------- | ------- | -- | ------------------ | -| mobile | internet | boardcast | general | it | industry-resources | - -::: tip 提示 - -若 `country` 或 `type` 参数包含空格,则用 `-` 替代。如 `United States` 更换为 `United-States`,`White paper` 更换为 `White-paper` - -[INDUSTRY RESOURCES](https://www.telecompaper.com/industry-resources) 分类页的 Filter 仅提供了 `Content Type` 选择器,对应路由中 `type` 参数。`year` 和 `country` 参数则对该分类无效。 - -::: - - - -## The Economist - -### 分类 - - - -### GRE Vocabulary - - - -## Yahoo - -### 新聞 - - - -`地区` - -| 香港 | 台灣 | 美國 | -| ---- | ---- | ---- | -| hk | tw | en | - -`类別` - -| 新聞總集 | 兩岸國際 | 財經 | 娛樂 | 體育 | 健康 | -| -------- | -------- | -------- | ------------- | ------ | ------ | -| (空) | world | business | entertainment | sports | health | - - - -## 半月谈 - -### 板块 - - - -## 北极星电力网 - -### 北极星环保 - - - -## 财新网 - -> 网站部分内容需要付费订阅,RSS 仅做更新提醒,不含付费内容. - -### 新闻分类 - - - -Column 列表: - -| 经济 | 金融 | 政经 | 环科 | 世界 | 观点网 | 文化 | 周刊 | -| ------- | ------- | ----- | ------- | ------------- | ------- | ------- | ------ | -| economy | finance | china | science | international | opinion | culture | weekly | - -以金融板块为例的 category 列表: (其余 column 以类似方式寻找) - -| 监管 | 银行 | 证券基金 | 信托保险 | 投资 | 创新 | 市场 | -| ---------- | ---- | -------- | --------------- | ---------- | ---------- | ------ | -| regulation | bank | stock | insurance_trust | investment | innovation | market | - -Category 列表: - -| 封面报道 | 开卷 | 社论 | 时事 | 编辑寄语 | 经济 | 金融 | 商业 | 环境与科技 | 民生 | 副刊 | -| ---------- | ----- | --------- | --------------- | ----------- | ------- | ------- | -------- | ---------------------- | ------- | ------ | -| coverstory | first | editorial | current_affairs | editor_desk | economy | finance | business | environment_technology | cwcivil | column | - - - -### 首页新闻 - - - -## 第一财经 - -### 直播区 - - - -## 东方网 - -### 上海新闻 - - - -## 端传媒 - -### 端传媒 - - - -::: warning 注意 - -付费内容全文需要登陆获取,详情见部署页面的配置模块。 - -::: - -Type 栏目: - -| 深度 | What’s New | 广场 | Pick-Up | -| ------- | ---------- | ----------------- | ------- | -| feature | news-brief | notes-and-letters | pick_up | - -通过提取文章全文,以提供比官方源更佳的阅读体验. - - - -## 多维新闻网 - -### 要闻 - - - -| 全部 | 国际 | 中国 | 香港 | 台湾 | 经济 | 视觉 | -| ------ | ------ | ----- | -------- | ------ | ------ | ------ | -| yaowen | global | china | hongkong | taiwan | jingji | shijue | - - - -### 24 小时新闻排行榜 - - - -## 华尔街见闻 - -### 华尔街见闻 - - - -## 极客公园 - -### 全球快讯 - - - -## 界面新闻 - -### 栏目 - - - -## 经济观察网 - -### 分类资讯 - - - -category 对应的关键词有 - -| 时事 | 政策 | 证券 | 资本 | 理财 | 新科技 | 大健康 | 房产 | 汽车 | 消费 | 影视 | 娱乐 | 体育 | 教育 | 观察家 | 专栏 | 书评 | 个人历史 | 宏观 | -| ---- | ---- | ---- | ---- | ---- | ------ | ------ | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ------ | ---- | ---- | -------- | ---- | -| 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | - - - -## 靠谱新闻 - -### 新闻聚合 - - - -## 联合早报 - -### 即时新闻 - - - -| 中国 | 新加坡 | 国际 | 财经 | -| ----- | --------- | ----- | -------- | -| china | singapore | world | zfinance | - - - -### 新闻 - - - -| 中国 | 新加坡 | 东南亚 | 国际 | 体育 | 早报现在 | -| ----- | --------- | ------ | ----- | ------ | -------- | -| china | singapore | sea | world | sports | fukan | - - - -### 其他栏目 - -除了上面两个兼容规则之外,联合早报网站里所有页面形如 这样的栏目都能被这个规则解析到,早报的大部分栏目都是这个样式的。你可以测试之后再订阅。 - - - -## 连线 Wired - -非订阅用户每月有阅读全文次数限制。 - -### 标签 - - - -## 路透社 - -### 实时资讯 - - - -### 频道 - - - -支持语言列表 - -- 中国分站 `cn`: - - - 主频道: - - | 深度分析 | 时事要闻 | 生活 | 投资 | - | -------- | ----------- | ---- | --------- | - | analyses | generalnews | life | investing | - - - 资讯子频道: - - | 中国财经 | 国际财经 | 新闻人物 | 财经视点 | - | -------- | --------------------- | --------- | -------- | - | china | internationalbusiness | newsmaker | opinions | - - - 专栏子频道: - - | 中国财经专栏 | 国际财经专栏 | 大宗商品专栏 | - | ------------ | ------------ | ------------ | - | CnColumn | IntColumn | ComColumn | - -- 美国分站 `us`: - - - 主频道: - - | Business | Markets | World | Politics | Tech | Breakingviews | Wealth | Life | - | -------- | ------- | ----- | -------- | ---------- | ------------- | ------ | --------- | - | business | markets | world | politics | technology | breakingviews | wealth | lifestyle | - -- 英国分站 `uk`: - - - 主频道: - - | Business | Markets | World | UK | Tech | Money | Breakingviews | Sport | Life | - | -------- | ------- | ----- | -- | ---------- | --------------- | ------------- | ------ | --------- | - | business | markets | world | uk | technology | personalFinance | breakingviews | sports | lifestyle | - - - -## 每经网 - -### 重磅原创 - - - -## 南方周末 - -### 新闻分类 - - - -下面给出部分参考: - -| 推荐 | 新闻 | 观点 | 文化 | 人物 | 影像 | 专题 | 生活 | 视频 | -| ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -| 1 | 2 | 3 | 4 | 7 | 8 | 6 | 5 | 131 | - - - -## 南华早报 SCMP - -### 新闻 - - - -栏目分类对应的数字编号见[官方 RSS](https://www.scmp.com/rss)。相比官方提供的 RSS,多提供了全文输出。 - - - -## 纽约时报 - -### 新闻 - - - -通过提取文章全文,以提供比官方源更佳的阅读体验。 - -| 默认中文 | 中英对照 | 英文 | 中英对照 (繁体中文) | 繁体中文 | -| -------- | -------- | ---- | ----------------------- | ------------------ | -| (空) | dual | en | dual-traditionalchinese | traditionalchinese | - - - -### 每日简报 - - - -## 澎湃新闻 - -### 首页头条 - - - -### 频道 - - - -### 澎湃美数组作品集 - - - -| 视频 | 交互 | 信息图 | 数据故事 | -| ---- | ---- | ------ | -------- | -| 2 | 4 | 3 | 453 | - - - -## 齐鲁晚报 - -### 新闻 - - - -### 今日城市 - - - -| 今日临沂 | 今日德州 | 今日威海 | 今日枣庄 | 今日淄博 | 今日烟台 | 今日潍坊 | 今日菏泽 | 今日日照 | 今日泰山 | 今日聊城 | 今日济宁 | -| -------- | -------- | -------- | --------- | -------- | -------- | -------- | -------- | -------- | -------- | --------- | -------- | -| linyi | dezhou | weihai | zaozhuang | zibo | yantai | weifang | heze | rizhao | taishan | liaocheng | jining | - - - -## 人民日报 - -### 观点 - - - -### 环保频道 - - - -### 习近平系列重要讲话 - - - -## 人民日报社 国际金融报 - -### 栏目 - - - -`cid`可在对应栏目的 url 后的参数中获取,如`热点快报`的栏目 url 为`http://www.ifnews.com/column.html?cid=48`, `cid`即为`48`. - - - -## 日本経済新聞 - -### ホームページ - - - -日文版首页 - - - -## 网易新闻专栏 - -### 栏目 - - - -| 轻松一刻 | 槽值 | 人间 | 大国小民 | 三三有梗 | 数读 | 看客 | 下划线 | 谈心社 | 哒哒 | 胖编怪聊 | 曲一刀 | 今日之声 | 浪潮 | 沸点 | -| -------- | ---- | ---- | -------- | -------- | ---- | ---- | ------ | ------ | ---- | -------- | ------ | -------- | ---- | ---- | -| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | - - - -## 卫报 The Guardian - -通过提取文章全文,以提供比官方源更佳的阅读体验。 - -### Editorial - - - -### China - - - -## 文汇报 - -### 分类 - - - -## 香港 01 - -### 热门 - - - -### 栏目 - - - -### 子栏目 - - - -### 专题 - - - -### 标签 - - - -## 香港電台 - -### 新聞 - -香港電台官方已有提供全文 RSS,詳細可前往官方網站: - -此路由主要補回官方 RSS 缺少的圖片以及 Link 元素。(官方 RSS 沒有 Link 元素可能導致某些 RSS 客戶端出現問題) - - - -| local | greaterchina | international | finance | sport | -| -------- | ------------ | ------------- | -------- | -------- | -| 本地新聞 | 大中華新聞 | 國際新聞 | 財經新聞 | 體育新聞 | - - - -## 新京报 - -### 栏目 - - - -### 电子报 - - - -## 新浪科技 - -### 科学探索 - - - -分类: - -| zx | twhk | dwzw | zrdl | lskg | smyx | shbk | kjqy | -| ---- | -------- | -------- | -------- | -------- | -------- | -------- | -------- | -| 最新 | 天文航空 | 动物植物 | 自然地理 | 历史考古 | 生命医学 | 生活百科 | 科技前沿 | - - - -### 滚动新闻 - - - -## 央视新闻 - -### 新闻联播 - - - -新闻联播内容摘要。 - - - -### 专题 - - - -| 新闻 | 国内 | 国际 | 社会 | 法治 | 文娱 | 科技 | 生活 | 教育 | 每周质量报告 | -| ---- | ----- | ----- | ------- | ---- | ---- | ---- | ---- | ---- | ------------ | -| news | china | world | society | law | ent | tech | life | edu | mzzlbg | - - - -### 新闻联播文字版 - - - -### 新闻联播文字版全文 - - - -## 朝日新聞中文網(繁體中文版) - -### 新聞分類 - - - -版块: - -| society | politics_economy | cool_japan | travel | sports | business | technology | world | opinion | whatsnew | -| -------- | ---------------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | -------- | -| 國內綜合 | 政治・經濟 | 文化・生活 | 旅遊・活動 | 體育・奧運 | 商業・商品 | IT ・科技 | 國際・東亞 | 評論・專欄 | 最新消息 | - -版块 `cool_japan` 和 `travel` 包含子版块: - -`cool_japan`: - -| entertainment | anime | life | style_culture | -| ------------- | ----- | ---------- | ------------- | -| 藝能 | 動漫 | 生活・美食 | 時尚・藝文 | - -`travel`: - -| news | scenery | topic | move | -| ---- | ------- | ----- | ---- | -| 資訊 | 風景 | 體驗 | 交通 | - - - -## 朝日新聞中文网(简体中文版) - -### 新闻分类 - - - -版块: - -| society | politics_economy | cool_japan | travel | sports | business | technology | world | opinion | whatsnew | -| -------- | ---------------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | -------- | -| 日本社会 | 政治・经济 | 文娱・生活 | 旅游・活动 | 体育・奥运 | 商务・商品 | IT ・科技 | 国际・东亚 | 观点・专栏 | 最新 | - -版块 `cool_japan` 和 `travel` 包含子版块: - -`cool_japan`: - -| entertainment | anime | life | style_culture | -| ------------- | ----- | ---------- | ------------- | -| 艺能 | 动漫 | 生活・美食 | 时尚・文化 | - -`travel`: - -| news | scenery | topic | move | -| ---- | ------- | ----- | ---- | -| 资讯 | 风景 | 体验 | 交通 | - - - -## 中国日报 - -### 英语点津 - - - -目录分类 - -| 最新 | 双语 | 热词 | 口语 | 译词 | 视频 | 听力 | 专栏 | 文件 | 考试 | -| --------- | -------------- | ------------- | --------------- | ------------- | ----------- | -------- | --------- | ------------------------ | ------------ | -| thelatest | news_bilingual | news_hotwords | practice_tongue | trans_collect | video_links | audio_cd | columnist | 5af95d44a3103f6866ee845c | englishexams | - - - -## 中時電子報 - -### 新聞 - - - -| realtimenews | politic | opinion | life | star | money | society | hottopic | tube | world | armament | chinese | fashion | sports | technologynews | travel | album | -| ------------ | ------- | ------- | ---- | ---- | ----- | ------- | -------- | ------- | ----- | -------- | ------- | ------- | ------ | -------------- | ------ | ----- | -| 即時 | 政治 | 言論 | 生活 | 娛樂 | 財經 | 社會 | 話題 | 快點 TV | 國際 | 軍事 | 兩岸 | 時尚 | 體育 | 科技 | 玩食 | 專輯 | - - - -## 中外对话 - -### 主题 - - - -| 商业 | 城市化 | 气候变化与能源 | 自然保护 | 管制与法律 | 健康与食品 | 自然灾害 | 污染 | 科学与技术 | 安全 | 水 | -| -------- | ------ | ------------------------- | ------------ | ------------------ | --------------- | ----------------- | --------- | ---------------- | -------- | ----- | -| business | cities | climate-change-and-energy | conservation | governance-and-law | health-and-food | natural-disasters | pollution | science-and-tech | security | water | - - - -### 栏目 - - - -| 文章 | 博客 | 文化 | 报告 | -| ------- | ---- | ------- | ------- | -| article | blog | culture | reports | - - - -### 福建新闻 - - - -### 福州新闻 - - - -### 九江新闻 - - - -## 読売新聞 - -### 新聞 - - - -| 総合 | 社会 | 政治 | 経済 | スポーツ | 国際 | 科学・IT | 選挙・世論調査 | エンタメ・文化 | 囲碁・将棋 | ライフ | 地域 | 社説 | -| ---- |--------- | -------- | ------- | ------- | ----- | -------- | ------------- | ------------- | ---------- | ------ | ----- | --------- | -| news | national | politics | economy | sports | world | science | election | culture | igoshougi | life | local | editorial | \ No newline at end of file diff --git a/docs/university.md b/docs/university.md index 193aafc34b..3676fe8168 100644 --- a/docs/university.md +++ b/docs/university.md @@ -1547,9 +1547,9 @@ type 列表: 全文内容需使用校园网或 VPN 获取 ::: -| 全部 | 信息发布 | 通知公告 | 教务信息 | 教学研究 | 教学实践 | 招生信息 | 质量监控 | -| :--: | :------: | :------: | :------: | :------: | :------: | :------: | :------: | -| all | xxfb | tzgg | jwxx | jxyj | jxsj | zsxx | zljk | +| 全部 | 教学信息 | 教学研究 | 实践教学 | 质量监控 | 通知公告 | +| :--: | :------: | :------: | :------: | :------: | :------: | +| all | jxxx | jxyj | sjjx | zljk | tzgg | diff --git a/lib/app.js b/lib/app.js index 904adf3001..61ad7129e6 100644 --- a/lib/app.js +++ b/lib/app.js @@ -39,15 +39,13 @@ app.use(favicon(__dirname + '/favicon.png')); // global error handing app.use(onerror); -// 1 set header -app.use(header); - app.use(accessControl); -// 6 debug +// 7 debug app.context.debug = { hitCache: 0, request: 0, + etag: 0, paths: [], routes: [], ips: [], @@ -56,6 +54,9 @@ app.context.debug = { }; app.use(debug); +// 6 set header +app.use(header); + // 5 fix incorrect `utf-8` characters app.use(utf8); diff --git a/lib/middleware/debug.js b/lib/middleware/debug.js index e30854fe8f..d3c41ae9dc 100644 --- a/lib/middleware/debug.js +++ b/lib/middleware/debug.js @@ -23,4 +23,8 @@ module.exports = async (ctx, next) => { } ctx.state.debuged = true; + + if (ctx.status === 304) { + ctx.debug.etag++; + } }; diff --git a/lib/middleware/header.js b/lib/middleware/header.js index e1118af539..ff4272cbf4 100644 --- a/lib/middleware/header.js +++ b/lib/middleware/header.js @@ -19,8 +19,7 @@ module.exports = async (ctx, next) => { await next(); - let body = ctx.body; - if (!body || typeof body !== 'string' || ctx.response.get('ETag')) { + if (!ctx.body || typeof ctx.body !== 'string' || ctx.response.get('ETag')) { return; } @@ -29,14 +28,17 @@ module.exports = async (ctx, next) => { return; } - const match = body.match(/(.*)<\/lastBuildDate>/); - if (match) { - ctx.set({ - 'Last-Modified': body.match(/(.*)<\/lastBuildDate>/)[1], - }); + ctx.set('ETag', etagCalculate(ctx.body.replace(/(.*)<\/lastBuildDate>/, '').replace(//, ''))); + + if (ctx.fresh) { + ctx.status = 304; + ctx.body = null; + } else { + const match = ctx.body.match(/(.*)<\/lastBuildDate>/); + if (match) { + ctx.set({ + 'Last-Modified': match[1], + }); + } } - - body = body.replace(/(.*)<\/lastBuildDate>/, ''); - - ctx.response.etag = etagCalculate(body); }; diff --git a/lib/middleware/parameter.js b/lib/middleware/parameter.js index c37037f045..3d3be62615 100644 --- a/lib/middleware/parameter.js +++ b/lib/middleware/parameter.js @@ -1,6 +1,7 @@ const he = require('he'); const mercury_parser = require('@postlight/mercury-parser'); const cheerio = require('cheerio'); +const OpenCC = require('opencc'); const got = require('@/utils/got'); const config = require('@/config').value; @@ -224,6 +225,16 @@ module.exports = async (ctx, next) => { return item; }); } + + // opencc + if (ctx.query.opencc) { + const converter = new OpenCC(`${ctx.query.opencc}.json`); + const tasks = ctx.state.data.item.map(async (item) => { + item.title = await converter.convertPromise(item.title); + item.description = await converter.convertPromise(item.description); + }); + await Promise.all(tasks); + } } } }; diff --git a/lib/router.js b/lib/router.js deleted file mode 100644 index be56e55dc5..0000000000 --- a/lib/router.js +++ /dev/null @@ -1,3246 +0,0 @@ -const Router = require('@koa/router'); -const config = require('@/config').value; -const router = new Router(); - -// 遍历整个 routes 文件夹,导入模块路由 router.js 和 router-custom.js 文件 -// 格式参考用例:routes/epicgames/router.js -const RouterPath = require('require-all')({ - dirname: __dirname + '/routes', - filter: /^.*router([-_]custom[s]?)?\.js$/, -}); - -// 将收集到的自定义模块路由进行合并 -for (const project in RouterPath) { - for (const routerName in RouterPath[project]) { - const proRouter = RouterPath[project][routerName](); - proRouter.stack.forEach((nestedLayer) => { - router.stack.push(nestedLayer); - }); - } -} - -// index -router.get('/', require('./routes/index')); - -router.get('/robots.txt', async (ctx) => { - if (config.disallowRobot) { - ctx.set('Content-Type', 'text/plain'); - ctx.body = 'User-agent: *\nDisallow: /'; - } else { - ctx.throw(404, 'Not Found'); - } -}); - -// test -router.get('/test/:id', require('./routes/test')); - -// RSSHub -router.get('/rsshub/rss', require('./routes/rsshub/routes')); // 弃用 -router.get('/rsshub/routes', require('./routes/rsshub/routes')); -router.get('/rsshub/sponsors', require('./routes/rsshub/sponsors')); - -// 1draw -router.get('/1draw', require('./routes/1draw/index')); - -// quicker -router.get('/quicker/qa', require('./routes/quicker/qa.js')); -router.get('/quicker/update', require('./routes/quicker/update.js')); -router.get('/quicker/user/action/:uid/:person', require('./routes/quicker/person.js')); -router.get('/quicker/user/:uid/:person', require('./routes/quicker/person.js')); - -// bilibili -router.get('/bilibili/user/video/:uid/:disableEmbed?', require('./routes/bilibili/video')); -router.get('/bilibili/user/article/:uid', require('./routes/bilibili/article')); -router.get('/bilibili/user/fav/:uid/:disableEmbed?', require('./routes/bilibili/userFav')); -router.get('/bilibili/user/coin/:uid/:disableEmbed?', require('./routes/bilibili/coin')); -router.get('/bilibili/user/dynamic/:uid/:disableEmbed?', require('./routes/bilibili/dynamic')); -router.get('/bilibili/user/followers/:uid', require('./routes/bilibili/followers')); -router.get('/bilibili/user/followings/:uid', require('./routes/bilibili/followings')); -router.get('/bilibili/user/bangumi/:uid/:type?', require('./routes/bilibili/user_bangumi')); -router.get('/bilibili/partion/:tid/:disableEmbed?', require('./routes/bilibili/partion')); -router.get('/bilibili/partion/ranking/:tid/:days?/:disableEmbed?', require('./routes/bilibili/partion-ranking')); -router.get('/bilibili/bangumi/:seasonid', require('./routes/bilibili/bangumi')); // 弃用 -router.get('/bilibili/bangumi/media/:mediaid', require('./routes/bilibili/bangumi')); -router.get('/bilibili/video/page/:bvid/:disableEmbed?', require('./routes/bilibili/page')); -router.get('/bilibili/video/reply/:bvid', require('./routes/bilibili/reply')); -router.get('/bilibili/video/danmaku/:bvid/:pid?', require('./routes/bilibili/danmaku')); -router.get('/bilibili/link/news/:product', require('./routes/bilibili/linkNews')); -router.get('/bilibili/live/room/:roomID', require('./routes/bilibili/liveRoom')); -router.get('/bilibili/live/search/:key/:order', require('./routes/bilibili/liveSearch')); -router.get('/bilibili/live/area/:areaID/:order', require('./routes/bilibili/liveArea')); -router.get('/bilibili/fav/:uid/:fid/:disableEmbed?', require('./routes/bilibili/fav')); -router.get('/bilibili/blackboard', require('./routes/bilibili/blackboard')); -router.get('/bilibili/mall/new/:category?', require('./routes/bilibili/mallNew')); -router.get('/bilibili/mall/ip/:id', require('./routes/bilibili/mallIP')); -router.get('/bilibili/ranking/:rid?/:day?/:arc_type?/:disableEmbed?', require('./routes/bilibili/ranking')); -router.get('/bilibili/user/channel/:uid/:cid/:disableEmbed?', require('./routes/bilibili/userChannel')); -router.get('/bilibili/topic/:topic', require('./routes/bilibili/topic')); -router.get('/bilibili/audio/:id', require('./routes/bilibili/audio')); -router.get('/bilibili/vsearch/:kw/:order?/:disableEmbed?', require('./routes/bilibili/vsearch')); -router.get('/bilibili/followings/video/:uid/:disableEmbed?', require('./routes/bilibili/followings_video')); -router.get('/bilibili/followings/article/:uid', require('./routes/bilibili/followings_article')); -router.get('/bilibili/readlist/:listid', require('./routes/bilibili/readlist')); -router.get('/bilibili/weekly', require('./routes/bilibili/weekly_recommend')); -router.get('/bilibili/manga/update/:comicid', require('./routes/bilibili/manga_update')); - -// bangumi -router.get('/bangumi/calendar/today', require('./routes/bangumi/calendar/today')); -router.get('/bangumi/subject/:id/:type', require('./routes/bangumi/subject')); -router.get('/bangumi/person/:id', require('./routes/bangumi/person')); -router.get('/bangumi/topic/:id', require('./routes/bangumi/group/reply')); -router.get('/bangumi/group/:id', require('./routes/bangumi/group/topic')); -router.get('/bangumi/subject/:id', require('./routes/bangumi/subject')); -router.get('/bangumi/user/blog/:id', require('./routes/bangumi/user/blog')); - -// 微博 -router.get('/weibo/user/:uid/:displayVideo?', require('./routes/weibo/user')); -router.get('/weibo/keyword/:keyword', require('./routes/weibo/keyword')); -router.get('/weibo/search/hot', require('./routes/weibo/search/hot')); -router.get('/weibo/super_index/:id', require('./routes/weibo/super_index')); -router.get('/weibo/oasis/user/:userid', require('./routes/weibo/oasis/user')); - -// 贴吧 -router.get('/tieba/forum/:kw', require('./routes/tieba/forum')); -router.get('/tieba/forum/good/:kw/:cid?', require('./routes/tieba/forum')); -router.get('/tieba/post/:id', require('./routes/tieba/post')); -router.get('/tieba/post/lz/:id', require('./routes/tieba/post')); - -// 网易云音乐 -router.get('/ncm/playlist/:id', require('./routes/ncm/playlist')); -router.get('/ncm/user/playlist/:uid', require('./routes/ncm/userplaylist')); -router.get('/ncm/artist/:id', require('./routes/ncm/artist')); -router.get('/ncm/djradio/:id', require('./routes/ncm/djradio')); - -// 掘金 -router.get('/juejin/category/:category', require('./routes/juejin/category')); -router.get('/juejin/tag/:tag', require('./routes/juejin/tag')); -router.get('/juejin/trending/:category/:type', require('./routes/juejin/trending')); -router.get('/juejin/books', require('./routes/juejin/books')); -router.get('/juejin/pins', require('./routes/juejin/pins')); -router.get('/juejin/posts/:id', require('./routes/juejin/posts')); -router.get('/juejin/collections/:userId', require('./routes/juejin/favorites')); -router.get('/juejin/collection/:collectionId', require('./routes/juejin/collection')); -router.get('/juejin/shares/:userId', require('./routes/juejin/shares')); - -// 自如 -router.get('/ziroom/room/:city/:iswhole/:room/:keyword', require('./routes/ziroom/room')); - -// 简书 -router.get('/jianshu/home', require('./routes/jianshu/home')); -router.get('/jianshu/trending/:timeframe', require('./routes/jianshu/trending')); -router.get('/jianshu/collection/:id', require('./routes/jianshu/collection')); -router.get('/jianshu/user/:id', require('./routes/jianshu/user')); - -// 知乎 -router.get('/zhihu/collection/:id', require('./routes/zhihu/collection')); -router.get('/zhihu/people/activities/:id', require('./routes/zhihu/activities')); -router.get('/zhihu/people/answers/:id', require('./routes/zhihu/answers')); -router.get('/zhihu/people/posts/:id', require('./routes/zhihu/posts')); -router.get('/zhihu/zhuanlan/:id', require('./routes/zhihu/zhuanlan')); -router.get('/zhihu/daily', require('./routes/zhihu/daily')); -router.get('/zhihu/daily/section/:sectionId', require('./routes/zhihu/daily_section')); -router.get('/zhihu/hotlist', require('./routes/zhihu/hotlist')); -router.get('/zhihu/pin/hotlist', require('./routes/zhihu/pin/hotlist')); -router.get('/zhihu/question/:questionId', require('./routes/zhihu/question')); -router.get('/zhihu/topic/:topicId', require('./routes/zhihu/topic')); -router.get('/zhihu/people/pins/:id', require('./routes/zhihu/pin/people')); -router.get('/zhihu/bookstore/newest', require('./routes/zhihu/bookstore/newest')); -router.get('/zhihu/pin/daily', require('./routes/zhihu/pin/daily')); -router.get('/zhihu/weekly', require('./routes/zhihu/weekly')); - -// 妹子图 -router.get('/mzitu/home/:type?', require('./routes/mzitu/home')); -router.get('/mzitu/tags', require('./routes/mzitu/tags')); -router.get('/mzitu/category/:category', require('./routes/mzitu/category')); -router.get('/mzitu/post/:id', require('./routes/mzitu/post')); -router.get('/mzitu/tag/:tag', require('./routes/mzitu/tag')); - -// pixiv -router.get('/pixiv/user/bookmarks/:id', require('./routes/pixiv/bookmarks')); -router.get('/pixiv/user/illustfollows', require('./routes/pixiv/illustfollow')); -router.get('/pixiv/user/:id', require('./routes/pixiv/user')); -router.get('/pixiv/ranking/:mode/:date?', require('./routes/pixiv/ranking')); -router.get('/pixiv/search/:keyword/:order?/:r18?', require('./routes/pixiv/search')); - -// pixiv-fanbox -router.get('/fanbox/:user?', require('./routes/fanbox/main')); - -// 豆瓣 -router.get('/douban/movie/playing', require('./routes/douban/playing')); -router.get('/douban/movie/playing/:score', require('./routes/douban/playing')); -router.get('/douban/movie/playing/:score/:city', require('./routes/douban/playing')); -router.get('/douban/movie/later', require('./routes/douban/later')); -router.get('/douban/movie/ustop', require('./routes/douban/ustop')); -router.get('/douban/movie/weekly', require('./routes/douban/weekly_best')); -router.get('/douban/movie/classification/:sort?/:score?/:tags?', require('./routes/douban/classification.js')); -router.get('/douban/group/:groupid', require('./routes/douban/group')); -router.get('/douban/explore', require('./routes/douban/explore')); -router.get('/douban/music/latest/:area?', require('./routes/douban/latest_music')); -router.get('/douban/book/latest', require('./routes/douban/latest_book')); -router.get('/douban/event/hot/:locationId', require('./routes/douban/event/hot')); -router.get('/douban/commercialpress/latest', require('./routes/douban/commercialpress/latest')); -router.get('/douban/bookstore', require('./routes/douban/bookstore')); -router.get('/douban/book/rank/:type?', require('./routes/douban/book/rank')); -router.get('/douban/doulist/:id', require('./routes/douban/doulist')); -router.get('/douban/explore/column/:id', require('./routes/douban/explore_column')); -router.get('/douban/people/:userid/status', require('./routes/douban/people/status.js')); -router.get('/douban/replies/:uid', require('./routes/douban/replies')); -router.get('/douban/topic/:id/:sort?', require('./routes/douban/topic.js')); -router.get('/douban/channel/:id/:nav?', require('./routes/douban/channel/topic.js')); -router.get('/douban/channel/:id/subject/:nav', require('./routes/douban/channel/subject.js')); -router.get('/douban/celebrity/:id/:sort?', require('./routes/douban/celebrity.js')); - -// 法律白話文運動 -router.get('/plainlaw/archives', require('./routes/plainlaw/archives.js')); - -// 煎蛋 -router.get('/jandan/:sub_model', require('./routes/jandan/pic')); - -// 喷嚏 -router.get('/dapenti/tugua', require('./routes/dapenti/tugua')); -router.get('/dapenti/subject/:id', require('./routes/dapenti/subject')); - -// Dockone -router.get('/dockone/weekly', require('./routes/dockone/weekly')); - -// 开发者头条 -router.get('/toutiao/today', require('./routes/toutiao/today')); -router.get('/toutiao/user/:id', require('./routes/toutiao/user')); - -// 众成翻译 -router.get('/zcfy', require('./routes/zcfy/index')); -router.get('/zcfy/index', require('./routes/zcfy/index')); // 废弃 -router.get('/zcfy/hot', require('./routes/zcfy/hot')); - -// 今日头条 -router.get('/jinritoutiao/keyword/:keyword', require('./routes/jinritoutiao/keyword')); - -// Disqus -router.get('/disqus/posts/:forum', require('./routes/disqus/posts')); - -// Twitter -router.get('/twitter/user/:id/:type?', require('./routes/twitter/user')); -router.get('/twitter/list/:id/:name', require('./routes/twitter/list')); -router.get('/twitter/likes/:id', require('./routes/twitter/likes')); -router.get('/twitter/followings/:id', require('./routes/twitter/followings')); -router.get('/twitter/keyword/:keyword', require('./routes/twitter/keyword')); -router.get('/twitter/trends/:woeid?', require('./routes/twitter/trends')); - -// Youtube -router.get('/youtube/user/:username/:embed?', require('./routes/youtube/user')); -router.get('/youtube/channel/:id/:embed?', require('./routes/youtube/channel')); -router.get('/youtube/playlist/:id/:embed?', require('./routes/youtube/playlist')); - -// 极客时间 -router.get('/geektime/column/:cid', require('./routes/geektime/column')); -router.get('/geektime/news', require('./routes/geektime/news')); - -// 界面新闻 -router.get('/jiemian/list/:cid', require('./routes/jiemian/list.js')); - -// 好奇心日报 -router.get('/qdaily/:type/:id', require('./routes/qdaily/index')); - -// 爱奇艺 -router.get('/iqiyi/dongman/:id', require('./routes/iqiyi/dongman')); -router.get('/iqiyi/user/video/:uid', require('./routes/iqiyi/video')); - -// 南方周末 -router.get('/infzm/:id', require('./routes/infzm/news')); - -// Dribbble -router.get('/dribbble/popular/:timeframe?', require('./routes/dribbble/popular')); -router.get('/dribbble/user/:name', require('./routes/dribbble/user')); -router.get('/dribbble/keyword/:keyword', require('./routes/dribbble/keyword')); - -// 斗鱼 -router.get('/douyu/room/:id', require('./routes/douyu/room')); - -// 虎牙 -router.get('/huya/live/:id', require('./routes/huya/live')); - -// 浪Play(原kingkong)直播 -router.get('/kingkong/room/:id', require('./routes/langlive/room')); -router.get('/langlive/room/:id', require('./routes/langlive/room')); - -// SHOWROOM直播 -router.get('/showroom/room/:id', require('./routes/showroom/room')); - -// v2ex -router.get('/v2ex/topics/:type', require('./routes/v2ex/topics')); -router.get('/v2ex/post/:postid', require('./routes/v2ex/post')); -router.get('/v2ex/tab/:tabid', require('./routes/v2ex/tab')); - -// Telegram -router.get('/telegram/channel/:username/:searchQuery?', require('./routes/telegram/channel')); -router.get('/telegram/stickerpack/:name', require('./routes/telegram/stickerpack')); -router.get('/telegram/blog', require('./routes/telegram/blog')); - -// readhub -router.get('/readhub/category/:category', require('./routes/readhub/category')); - -// GitHub -router.get('/github/repos/:user', require('./routes/github/repos')); -router.get('/github/trending/:since/:language?', require('./routes/github/trending')); -router.get('/github/issue/:user/:repo/:state?/:labels?', require('./routes/github/issue')); -router.get('/github/pull/:user/:repo', require('./routes/github/pulls')); -router.get('/github/user/followers/:user', require('./routes/github/follower')); -router.get('/github/stars/:user/:repo', require('./routes/github/star')); -router.get('/github/search/:query/:sort?/:order?', require('./routes/github/search')); -router.get('/github/branches/:user/:repo', require('./routes/github/branches')); -router.get('/github/file/:user/:repo/:branch/:filepath+', require('./routes/github/file')); -router.get('/github/starred_repos/:user', require('./routes/github/starred_repos')); -router.get('/github/contributors/:user/:repo/:order?/:anon?', require('./routes/github/contributors')); - -// f-droid -router.get('/fdroid/apprelease/:app', require('./routes/fdroid/apprelease')); - -// konachan -router.get('/konachan/post/popular_recent', require('./routes/konachan/post_popular_recent')); -router.get('/konachan.com/post/popular_recent', require('./routes/konachan/post_popular_recent')); -router.get('/konachan.net/post/popular_recent', require('./routes/konachan/post_popular_recent')); -router.get('/konachan/post/popular_recent/:period', require('./routes/konachan/post_popular_recent')); -router.get('/konachan.com/post/popular_recent/:period', require('./routes/konachan/post_popular_recent')); -router.get('/konachan.net/post/popular_recent/:period', require('./routes/konachan/post_popular_recent')); - -// PornHub -router.get('/pornhub/category/:caty', require('./routes/pornhub/category')); -router.get('/pornhub/search/:keyword', require('./routes/pornhub/search')); -router.get('/pornhub/category_url/:url?', require('./routes/pornhub/category_url')); -router.get('/pornhub/users/:username', require('./routes/pornhub/users')); -router.get('/pornhub/model/:username/:sort?', require('./routes/pornhub/model')); -router.get('/pornhub/pornstar/:username/:sort?', require('./routes/pornhub/pornstar')); - -// yande.re -router.get('/yande.re/post/popular_recent', require('./routes/yande.re/post_popular_recent')); -router.get('/yande.re/post/popular_recent/:period', require('./routes/yande.re/post_popular_recent')); - -// 纽约时报 -router.get('/nytimes/morning_post', require('./routes/nytimes/morning_post')); -router.get('/nytimes/:lang?', require('./routes/nytimes/index')); - -// 3dm -router.get('/3dm/:name/:type', require('./routes/3dm/game')); -router.get('/3dm/news', require('./routes/3dm/news_center')); - -// 旅法师营地 -router.get('/lfsyd/:typecode', require('./routes/lfsyd/index')); - -// 喜马拉雅 -router.get('/ximalaya/album/:id/:all?', require('./routes/ximalaya/album')); - -// EZTV -router.get('/eztv/torrents/:imdb_id', require('./routes/eztv/imdb')); - -// 什么值得买 -router.get('/smzdm/keyword/:keyword', require('./routes/smzdm/keyword')); -router.get('/smzdm/ranking/:rank_type/:rank_id/:hour', require('./routes/smzdm/ranking')); -router.get('/smzdm/haowen/:day?', require('./routes/smzdm/haowen')); -router.get('/smzdm/haowen/fenlei/:name/:sort?', require('./routes/smzdm/haowen_fenlei')); -router.get('/smzdm/article/:uid', require('./routes/smzdm/article')); -router.get('/smzdm/baoliao/:uid', require('./routes/smzdm/baoliao')); - -// 新京报 -router.get('/bjnews/:cat', require('./routes/bjnews/news')); -router.get('/bjnews/epaper/:cat', require('./routes/bjnews/epaper')); - -// 停水通知 -router.get('/tingshuitz/hangzhou', require('./routes/tingshuitz/hangzhou')); -router.get('/tingshuitz/xiaoshan', require('./routes/tingshuitz/xiaoshan')); -router.get('/tingshuitz/dalian', require('./routes/tingshuitz/dalian')); -router.get('/tingshuitz/guangzhou', require('./routes/tingshuitz/guangzhou')); -router.get('/tingshuitz/dongguan', require('./routes/tingshuitz/dongguan')); -router.get('/tingshuitz/xian', require('./routes/tingshuitz/xian')); -router.get('/tingshuitz/yangjiang', require('./routes/tingshuitz/yangjiang')); -router.get('/tingshuitz/nanjing', require('./routes/tingshuitz/nanjing')); -router.get('/tingshuitz/wuhan', require('./routes/tingshuitz/wuhan')); - -// 米哈游 -router.get('/mihoyo/bh3/:type', require('./routes/mihoyo/bh3')); -router.get('/mihoyo/bh2/:type', require('./routes/mihoyo/bh2')); - -// 新闻联播 -router.get('/cctv/xwlb', require('./routes/cctv/xwlb')); -// 央视新闻 -router.get('/cctv/:category', require('./routes/cctv/category')); - -// 财新博客 -router.get('/caixin/blog/:column', require('./routes/caixin/blog')); -// 财新 -router.get('/caixin/:column/:category', require('./routes/caixin/category')); -// 财新首页 -router.get('/caixin/article', require('./routes/caixin/article')); - -// 草榴社区 -router.get('/t66y/post/:tid', require('./routes/t66y/post')); -router.get('/t66y/:id/:type?', require('./routes/t66y/index')); - -// 色中色 -router.get('/sexinsex/:id/:type?', require('./routes/sexinsex/index')); - -// 机核 -router.get('/gcores/category/:category', require('./routes/gcores/category')); - -// 国家地理 -router.get('/natgeo/dailyphoto', require('./routes/natgeo/dailyphoto')); -router.get('/natgeo/:cat/:type?', require('./routes/natgeo/natgeo')); - -// 一个 -router.get('/one', require('./routes/one/index')); - -// Firefox -router.get('/firefox/release/:platform', require('./routes/firefox/release')); -router.get('/firefox/addons/:id', require('./routes/firefox/addons')); - -// Thunderbird -router.get('/thunderbird/release', require('./routes/thunderbird/release')); - -// tuicool -router.get('/tuicool/mags/:type', require('./routes/tuicool/mags')); - -// Hexo -router.get('/hexo/next/:url', require('./routes/hexo/next')); -router.get('/hexo/yilia/:url', require('./routes/hexo/yilia')); - -// cpython -router.get('/cpython/:pre?', require('./routes/cpython')); - -// 小米 -router.get('/mi/golden', require('./routes/mi/golden')); -router.get('/mi/crowdfunding', require('./routes/mi/crowdfunding')); -router.get('/mi/youpin/crowdfunding', require('./routes/mi/youpin/crowdfunding')); -router.get('/mi/youpin/new', require('./routes/mi/youpin/new')); -router.get('/miui/:device/:type?/:region?', require('./routes/mi/miui/index')); -router.get('/mi/bbs/board/:boardId', require('./routes/mi/board')); - -// Keep -router.get('/keep/user/:id', require('./routes/keep/user')); - -// 起点 -router.get('/qidian/chapter/:id', require('./routes/qidian/chapter')); -router.get('/qidian/forum/:id', require('./routes/qidian/forum')); -router.get('/qidian/free/:type?', require('./routes/qidian/free')); -router.get('/qidian/free-next/:type?', require('./routes/qidian/free-next')); - -// 纵横 -router.get('/zongheng/chapter/:id', require('./routes/zongheng/chapter')); - -// 刺猬猫 -router.get('/ciweimao/chapter/:id', require('./routes/ciweimao/chapter')); - -// 中国美术馆 -router.get('/namoc/announcement', require('./routes/namoc/announcement')); -router.get('/namoc/news', require('./routes/namoc/news')); -router.get('/namoc/media', require('./routes/namoc/media')); -router.get('/namoc/exhibition', require('./routes/namoc/exhibition')); -router.get('/namoc/specials', require('./routes/namoc/specials')); - -// 懂球帝 -router.get('/dongqiudi/daily', require('./routes/dongqiudi/daily')); -router.get('/dongqiudi/result/:team', require('./routes/dongqiudi/result')); -router.get('/dongqiudi/team_news/:team', require('./routes/dongqiudi/team_news')); -router.get('/dongqiudi/player_news/:id', require('./routes/dongqiudi/player_news')); -router.get('/dongqiudi/special/:id', require('./routes/dongqiudi/special')); -router.get('/dongqiudi/top_news/:id?', require('./routes/dongqiudi/top_news')); - -// 维基百科 Wikipedia -router.get('/wikipedia/mainland', require('./routes/wikipedia/mainland')); - -// 联合国 United Nations -router.get('/un/scveto', require('./routes/un/scveto')); - -// e 公司 -router.get('/egsea/flash', require('./routes/egsea/flash')); - -// 选股宝 -router.get('/xuangubao/subject/:subject_id', require('./routes/xuangubao/subject')); - -// 雪球 -router.get('/xueqiu/user/:id/:type?', require('./routes/xueqiu/user')); -router.get('/xueqiu/favorite/:id', require('./routes/xueqiu/favorite')); -router.get('/xueqiu/user_stock/:id', require('./routes/xueqiu/user_stock')); -router.get('/xueqiu/fund/:id', require('./routes/xueqiu/fund')); -router.get('/xueqiu/stock_info/:id/:type?', require('./routes/xueqiu/stock_info')); -router.get('/xueqiu/snb/:id', require('./routes/xueqiu/snb')); -router.get('/xueqiu/hots', require('./routes/xueqiu/hots')); - -// Greasy Fork -router.get('/greasyfork/:language/:domain?', require('./routes/greasyfork/scripts')); - -// LinkedKeeper -router.get('/linkedkeeper/:type/:id?', require('./routes/linkedkeeper/index')); - -// 开源中国 -router.get('/oschina/news/:category?', require('./routes/oschina/news')); -router.get('/oschina/user/:id', require('./routes/oschina/user')); -router.get('/oschina/u/:id', require('./routes/oschina/u')); -router.get('/oschina/topic/:topic', require('./routes/oschina/topic')); - -// 安全客 -router.get('/aqk/vul', require('./routes/aqk/vul')); -router.get('/aqk/:category', require('./routes/aqk/category')); - -// 腾讯游戏开发者社区 -router.get('/gameinstitute/community/:tag?', require('./routes/tencent/gameinstitute/community')); - -// 腾讯视频 SDK -router.get('/qcloud/mlvb/changelog', require('./routes/tencent/qcloud/mlvb/changelog')); - -// 腾讯吐个槽 -router.get('/tucaoqq/post/:project/:key', require('./routes/tencent/tucaoqq/post')); - -// Bugly SDK -router.get('/bugly/changelog/:platform', require('./routes/tencent/bugly/changelog')); - -// wechat -router.get('/wechat/wemp/:id', require('./routes/tencent/wechat/wemp')); -router.get('/wechat/csm/:id', require('./routes/tencent/wechat/csm')); -router.get('/wechat/ce/:id', require('./routes/tencent/wechat/ce')); -router.get('/wechat/announce', require('./routes/tencent/wechat/announce')); -router.get('/wechat/miniprogram/plugins', require('./routes/tencent/wechat/miniprogram/plugins')); -router.get('/wechat/tgchannel/:id', require('./routes/tencent/wechat/tgchannel')); -router.get('/wechat/uread/:userid', require('./routes/tencent/wechat/uread')); -router.get('/wechat/ershicimi/:id', require('./routes/tencent/wechat/ershcimi')); -router.get('/wechat/wjdn/:id', require('./routes/tencent/wechat/wjdn')); -router.get('/wechat/mp/homepage/:biz/:hid/:cid?', require('./routes/tencent/wechat/mp')); -router.get('/wechat/mp/msgalbum/:biz/:aid', require('./routes/tencent/wechat/msgalbum')); - -// All the Flight Deals -router.get('/atfd/:locations/:nearby?', require('./routes/atfd/index')); - -// Fir -router.get('/fir/update/:id', require('./routes/fir/update')); - -// Nvidia Web Driver -router.get('/nvidia/webdriverupdate', require('./routes/nvidia/webdriverupdate')); - -// Google -router.get('/google/citations/:id', require('./routes/google/citations')); -router.get('/google/scholar/:query', require('./routes/google/scholar')); -router.get('/google/doodles/:language?', require('./routes/google/doodles')); -router.get('/google/album/:id', require('./routes/google/album')); -router.get('/google/sites/:id', require('./routes/google/sites')); - -// 每日环球展览 iMuseum -router.get('/imuseum/:city/:type?', require('./routes/imuseum')); - -// AppStore -router.get('/appstore/update/:country/:id', require('./routes/apple/appstore/update')); -router.get('/appstore/price/:country/:type/:id', require('./routes/apple/appstore/price')); -router.get('/appstore/iap/:country/:id', require('./routes/apple/appstore/in-app-purchase')); -router.get('/appstore/xianmian', require('./routes/apple/appstore/xianmian')); -router.get('/appstore/gofans', require('./routes/apple/appstore/gofans')); - -// Hopper -router.get('/hopper/:lowestOnly/:from/:to?', require('./routes/hopper/index')); - -// 马蜂窝 -router.get('/mafengwo/note/:type', require('./routes/mafengwo/note')); -router.get('/mafengwo/ziyouxing/:code', require('./routes/mafengwo/ziyouxing')); - -// 中国地震局震情速递(与地震台网同步更新) -router.get('/earthquake/:region?', require('./routes/earthquake')); - -// 中国地震台网 -router.get('/earthquake/ceic/:type', require('./routes/earthquake/ceic')); - -// 小说 -router.get('/novel/biquge/:id', require('./routes/novel/biquge')); -router.get('/novel/biqugeinfo/:id/:limit?', require('./routes/novel/biqugeinfo')); -router.get('/novel/uukanshu/:uid', require('./routes/novel/uukanshu')); -router.get('/novel/wenxuemi/:id1/:id2', require('./routes/novel/wenxuemi')); -router.get('/novel/booksky/:id', require('./routes/novel/booksky')); -router.get('/novel/shuquge/:id', require('./routes/novel/shuquge')); -router.get('/novel/ptwxz/:id1/:id2', require('./routes/novel/ptwxz')); -router.get('/novel/zhaishuyuan/:id', require('./routes/novel/zhaishuyuan')); - -// 中国气象网 -router.get('/weatheralarm/:province?', require('./routes/weatheralarm')); - -// Gitlab -router.get('/gitlab/explore/:type', require('./routes/gitlab/explore')); - -// 忧郁的loli -router.get('/mygalgame', require('./routes/galgame/hhgal')); // 废弃 -router.get('/mmgal', require('./routes/galgame/hhgal')); // 废弃 -router.get('/hhgal', require('./routes/galgame/hhgal')); - -// say花火 -router.get('/sayhuahuo', require('./routes/galgame/sayhuahuo')); - -// 终点分享 -router.get('/zdfx', require('./routes/galgame/zdfx')); - -// 北京林业大学 -router.get('/bjfu/grs', require('./routes/universities/bjfu/grs')); -router.get('/bjfu/kjc', require('./routes/universities/bjfu/kjc')); -router.get('/bjfu/jwc/:type', require('./routes/universities/bjfu/jwc/index')); -router.get('/bjfu/news/:type', require('./routes/universities/bjfu/news/index')); - -// 北京理工大学 -router.get('/bit/jwc', require('./routes/universities/bit/jwc/jwc')); -router.get('/bit/cs', require('./routes/universities/bit/cs/cs')); - -// 大连工业大学 -router.get('/dpu/jiaowu/news/:type?', require('./routes/universities/dpu/jiaowu/news')); -router.get('/dpu/wlfw/news/:type?', require('./routes/universities/dpu/wlfw/news')); - -// 东南大学 -router.get('/seu/radio/academic', require('./routes/universities/seu/radio/academic')); -router.get('/seu/yzb/:type', require('./routes/universities/seu/yzb')); -router.get('/seu/cse/:type?', require('./routes/universities/seu/cse')); - -// 南京工业大学 -router.get('/njtech/jwc', require('./routes/universities/njtech/jwc')); - -// 南京航空航天大学 -router.get('/nuaa/jwc/:type?', require('./routes/universities/nuaa/jwc/jwc')); -router.get('/nuaa/cs/:type?', require('./routes/universities/nuaa/cs/index')); -router.get('/nuaa/yjsy/:type?', require('./routes/universities/nuaa/yjsy/yjsy')); - -// 河海大学 -router.get('/hhu/libNews', require('./routes/universities/hhu/libNews')); -// 河海大学常州校区 -router.get('/hhu/libNewsc', require('./routes/universities/hhu/libNewsc')); - -// 哈尔滨工业大学 -router.get('/hit/jwc', require('./routes/universities/hit/jwc')); -router.get('/hit/today/:category', require('./routes/universities/hit/today')); - -// 哈尔滨工业大学(威海) -router.get('/hitwh/today', require('./routes/universities/hitwh/today')); - -// 上海科技大学 -router.get('/shanghaitech/activity', require('./routes/universities/shanghaitech/activity')); -router.get('/shanghaitech/sist/activity', require('./routes/universities/shanghaitech/sist/activity')); - -// 上海交通大学 -router.get('/sjtu/seiee/academic', require('./routes/universities/sjtu/seiee/academic')); -router.get('/sjtu/seiee/bjwb/:type', require('./routes/universities/sjtu/seiee/bjwb')); -router.get('/sjtu/seiee/xsb/:type?', require('./routes/universities/sjtu/seiee/xsb')); - -router.get('/sjtu/gs/tzgg/:type?', require('./routes/universities/sjtu/gs/tzgg')); -router.get('/sjtu/jwc/:type?', require('./routes/universities/sjtu/jwc')); -router.get('/sjtu/tongqu/:type?', require('./routes/universities/sjtu/tongqu/activity')); -router.get('/sjtu/yzb/zkxx/:type', require('./routes/universities/sjtu/yzb/zkxx')); - -// 江南大学 -router.get('/ju/jwc/:type?', require('./routes/universities/ju/jwc')); - -// 洛阳理工学院 -router.get('/lit/jwc', require('./routes/universities/lit/jwc')); -router.get('/lit/xwzx/:name?', require('./routes/universities/lit/xwzx')); -router.get('/lit/tw/:name?', require('./routes/universities/lit/tw')); - -// 清华大学 -router.get('/thu/career', require('./routes/universities/thu/career')); -router.get('/thu/:type', require('./routes/universities/thu/index')); - -// 北京大学 -router.get('/pku/eecs/:type?', require('./routes/universities/pku/eecs')); -router.get('/pku/rccp/mzyt', require('./routes/universities/pku/rccp/mzyt')); -router.get('/pku/cls/lecture', require('./routes/universities/pku/cls/lecture')); -router.get('/pku/bbs/hot', require('./routes/universities/pku/bbs/hot')); - -// 上海海事大学 -router.get('/shmtu/www/:type', require('./routes/universities/shmtu/www')); -router.get('/shmtu/jwc/:type', require('./routes/universities/shmtu/jwc')); - -// 上海海洋大学 -router.get('/shou/www/:type', require('./routes/universities/shou/www')); - -// 西南科技大学 -router.get('/swust/jwc/news', require('./routes/universities/swust/jwc_news')); -router.get('/swust/jwc/notice/:type?', require('./routes/universities/swust/jwc_notice')); -router.get('/swust/cs/:type?', require('./routes/universities/swust/cs')); - -// 华南师范大学 -router.get('/scnu/jw', require('./routes/universities/scnu/jw')); -router.get('/scnu/library', require('./routes/universities/scnu/library')); -router.get('/scnu/cs/match', require('./routes/universities/scnu/cs/match')); - -// 广东工业大学 -router.get('/gdut/news', require('./routes/universities/gdut/news')); - -// 中国科学院 -router.get('/cas/sim/academic', require('./routes/universities/cas/sim/academic')); -router.get('/cas/mesalab/kb', require('./routes/universities/cas/mesalab/kb')); - -// 中国传媒大学 -router.get('/cuc/yz', require('./routes/universities/cuc/yz')); - -// 南京邮电大学 -router.get('/njupt/jwc/:type?', require('./routes/universities/njupt/jwc')); - -// 南昌航空大学 -router.get('/nchu/jwc/:type?', require('./routes/universities/nchu/jwc')); - -// 哈尔滨工程大学 -router.get('/heu/ugs/news/:author?/:category?', require('./routes/universities/heu/ugs/news')); -router.get('/heu/yjsy/:type?', require('./routes/universities/heu/yjsy')); -router.get('/heu/gongxue/:type?', require('./routes/universities/heu/news')); -router.get('/heu/news/:type?', require('./routes/universities/heu/news')); -router.get('/heu/shuisheng/:type?', require('./routes/universities/heu/uae')); -router.get('/heu/uae/:type?', require('./routes/universities/heu/uae')); -router.get('/heu/job/:type?', require('./routes/universities/heu/job')); - -// 重庆大学 -router.get('/cqu/jwc/announcement', require('./routes/universities/cqu/jwc/announcement')); -router.get('/cqu/news/jzyg', require('./routes/universities/cqu/news/jzyg')); -router.get('/cqu/news/tz', require('./routes/universities/cqu/news/tz')); -router.get('/cqu/youth/:category', require('./routes/universities/cqu/youth/info')); -router.get('/cqu/sci/:category', require('./routes/universities/cqu/sci/info')); -router.get('/cqu/net/:category', require('./routes/universities/cqu/net/info')); - -// 南京信息工程大学 -router.get('/nuist/bulletin/:category?', require('./routes/universities/nuist/bulletin')); -router.get('/nuist/jwc/:category?', require('./routes/universities/nuist/jwc')); -router.get('/nuist/yjs/:category?', require('./routes/universities/nuist/yjs')); -router.get('/nuist/xgc', require('./routes/universities/nuist/xgc')); -router.get('/nuist/scs/:category?', require('./routes/universities/nuist/scs')); -router.get('/nuist/lib', require('./routes/universities/nuist/library/lib')); -router.get('/nuist/sese/:category?', require('./routes/universities/nuist/sese')); -router.get('/nuist/cas/:category?', require('./routes/universities/nuist/cas')); - -// 成都信息工程大学 -router.get('/cuit/cxxww/:type?', require('./routes/universities/cuit/cxxww')); - -// 郑州大学 -router.get('/zzu/news/:type', require('./routes/universities/zzu/news')); -router.get('/zzu/soft/news/:type', require('./routes/universities/zzu/soft/news')); - -// 郑州轻工业大学 -router.get('/zzuli/campus/:type', require('./routes/universities/zzuli/campus')); -router.get('/zzuli/yjsc/:type', require('./routes/universities/zzuli/yjsc')); - -// 重庆科技学院 -router.get('/cqust/jw/:type?', require('./routes/universities/cqust/jw')); -router.get('/cqust/lib/:type?', require('./routes/universities/cqust/lib')); - -// 常州大学 -router.get('/cczu/jwc/:category?', require('./routes/universities/cczu/jwc')); -router.get('/cczu/news/:category?', require('./routes/universities/cczu/news')); - -// 南京理工大学 -router.get('/njust/jwc/:type', require('./routes/universities/njust/jwc')); -router.get('/njust/cwc/:type', require('./routes/universities/njust/cwc')); -router.get('/njust/gs/:type', require('./routes/universities/njust/gs')); -router.get('/njust/eo/:grade?/:type?', require('./routes/universities/njust/eo')); - -// 四川旅游学院 -router.get('/sctu/xgxy', require('./routes/universities/sctu/information-engineer-faculty/index')); -router.get('/sctu/xgxy/:id', require('./routes/universities/sctu/information-engineer-faculty/context')); -router.get('/sctu/jwc/:type?', require('./routes/universities/sctu/jwc/index')); -router.get('/sctu/jwc/:type/:id', require('./routes/universities/sctu/jwc/context')); - -// 电子科技大学 -router.get('/uestc/jwc/:type?', require('./routes/universities/uestc/jwc')); -router.get('/uestc/news/:type?', require('./routes/universities/uestc/news')); -router.get('/uestc/auto/:type?', require('./routes/universities/uestc/auto')); -router.get('/uestc/cs/:type?', require('./routes/universities/uestc/cs')); - -// 云南大学 -router.get('/ynu/grs/zytz', require('./routes/universities/ynu/grs/zytz')); -router.get('/ynu/grs/qttz/:category', require('./routes/universities/ynu/grs/qttz')); -router.get('/ynu/jwc/:category', require('./routes/universities/ynu/jwc/zytz')); -router.get('/ynu/home', require('./routes/universities/ynu/home/main')); - -// 昆明理工大学 -router.get('/kmust/jwc/:type?', require('./routes/universities/kmust/jwc')); -router.get('/kmust/job/careers/:type?', require('./routes/universities/kmust/job/careers')); -router.get('/kmust/job/jobfairs', require('./routes/universities/kmust/job/jobfairs')); - -// 武汉大学 -router.get('/whu/cs/:type', require('./routes/universities/whu/cs')); -router.get('/whu/news/:type?', require('./routes/universities/whu/news')); - -// 华中科技大学 -router.get('/hust/auto/notice/:type?', require('./routes/universities/hust/aia/notice')); -router.get('/hust/auto/news', require('./routes/universities/hust/aia/news')); -router.get('/hust/aia/news', require('./routes/universities/hust/aia/news')); -router.get('/hust/aia/notice/:type?', require('./routes/universities/hust/aia/notice')); - -// 井冈山大学 -router.get('/jgsu/jwc', require('./routes/universities/jgsu/jwc')); - -// 中南大学 -router.get('/csu/job/:type?', require('./routes/universities/csu/job')); - -// 山东大学 -router.get('/sdu/sc/:type?', require('./routes/universities/sdu/sc')); -router.get('/sdu/cs/:type?', require('./routes/universities/sdu/cs')); -router.get('/sdu/cmse/:type?', require('./routes/universities/sdu/cmse')); -router.get('/sdu/mech/:type?', require('./routes/universities/sdu/mech')); -router.get('/sdu/epe/:type?', require('./routes/universities/sdu/epe')); - -// 中国海洋大学 -router.get('/ouc/it/:type?', require('./routes/universities/ouc/it')); - -// 大连大学 -router.get('/dlu/jiaowu/news', require('./routes/universities/dlu/jiaowu/news')); - -// 东莞理工学院 -router.get('/dgut/jwc/:type?', require('./routes/universities/dgut/jwc')); -router.get('/dgut/xsc/:type?', require('./routes/universities/dgut/xsc')); - -// 同济大学 -router.get('/tju/sse/:type?', require('./routes/universities/tju/sse/notice')); - -// 华南理工大学 -router.get('/scut/jwc/notice/:category?', require('./routes/universities/scut/jwc/notice')); -router.get('/scut/jwc/news', require('./routes/universities/scut/jwc/news')); - -// 温州商学院 -router.get('/wzbc/:type?', require('./routes/universities/wzbc/news')); - -// 河南大学 -router.get('/henu/:type?', require('./routes/universities/henu/news')); - -// 天津大学 -router.get('/tjpyu/ooa/:type?', require('./routes/universities/tjpyu/ooa')); - -// 南开大学 -router.get('/nku/jwc/:type?', require('./routes/universities/nku/jwc/index')); - -// 北京航空航天大学 -router.get('/buaa/news/:type', require('./routes/universities/buaa/news/index')); - -// 浙江工业大学 -router.get('/zjut/:type', require('./routes/universities/zjut/index')); -router.get('/zjut/design/:type', require('./routes/universities/zjut/design')); - -// 上海大学 -router.get('/shu/jwc/:type?', require('./routes/universities/shu/jwc')); - -// 北京科技大学天津学院 -router.get('/ustb/tj/news/:type?', require('./routes/universities/ustb/tj/news')); - -// 深圳大学 -router.get('/szu/yz/:type?', require('./routes/universities/szu/yz')); - -// 中国石油大学(华东) -router.get('/upc/main/:type?', require('./routes/universities/upc/main')); -router.get('/upc/jsj/:type?', require('./routes/universities/upc/jsj')); - -// 华北水利水电大学 -router.get('/ncwu/notice', require('./routes/universities/ncwu/notice')); - -// 太原师范学院 -router.get('/tynu', require('./routes/universities/tynu/tynu')); - -// 中北大学 -router.get('/nuc/:type', require('./routes/universities/nuc/index')); - -// 安徽农业大学 -router.get('/ahau/cs_news/:type', require('./routes/universities/ahau/cs_news/index')); -router.get('/ahau/jwc/:type', require('./routes/universities/ahau/jwc/index')); -router.get('/ahau/main/:type', require('./routes/universities/ahau/main/index')); - -// 安徽医科大学研究生学院 -router.get('/ahmu/news', require('./routes/universities/ahmu/news')); - -// 安徽工业大学 -router.get('/ahut/news', require('./routes/universities/ahut/news')); -router.get('/ahut/jwc', require('./routes/universities/ahut/jwc')); -router.get('/ahut/cstzgg', require('./routes/universities/ahut/cstzgg')); - -// 上海理工大学 -router.get('/usst/jwc', require('./routes/universities/usst/jwc')); - -// 临沂大学 -router.get('/lyu/news/:type', require('./routes/universities/lyu/news/index')); - -// ifanr -router.get('/ifanr/:channel?', require('./routes/ifanr/index')); - -// 果壳网 -router.get('/guokr/scientific', require('./routes/guokr/scientific')); -router.get('/guokr/:channel', require('./routes/guokr/calendar')); - -// 联合早报 -router.get('/zaobao/realtime/:section?', require('./routes/zaobao/realtime')); -router.get('/zaobao/znews/:section?', require('./routes/zaobao/znews')); -router.get('/zaobao/:type/:section', require('./routes/zaobao/index')); - -// Apple -router.get('/apple/exchange_repair/:country?', require('./routes/apple/exchange_repair')); - -// IPSW.me -router.get('/ipsw/index/:ptype/:pname', require('./routes/ipsw/index')); - -// Minecraft CurseForge -router.get('/curseforge/files/:project', require('./routes/curseforge/files')); - -// 少数派 sspai -router.get('/sspai/series', require('./routes/sspai/series')); -router.get('/sspai/shortcuts', require('./routes/sspai/shortcutsGallery')); -router.get('/sspai/matrix', require('./routes/sspai/matrix')); -router.get('/sspai/column/:id', require('./routes/sspai/column')); -router.get('/sspai/author/:id', require('./routes/sspai/author')); -router.get('/sspai/topics', require('./routes/sspai/topics')); -router.get('/sspai/topic/:id', require('./routes/sspai/topic')); -router.get('/sspai/tag/:keyword', require('./routes/sspai/tag')); -router.get('/sspai/activity/:slug', require('./routes/sspai/activity')); - -// 异次元软件世界 -router.get('/iplay/home', require('./routes/iplay/home')); - -// xclient.info -router.get('/xclient/app/:name', require('./routes/xclient/app')); - -// 中国驻外使领事馆 -router.get('/embassy/:country/:city?', require('./routes/embassy/index')); - -// 澎湃新闻 -router.get('/thepaper/featured', require('./routes/thepaper/featured')); -router.get('/thepaper/channel/:id', require('./routes/thepaper/channel')); - -// 澎湃美数课 -router.get('/thepaper/839studio', require('./routes/thepaper/839studio/studio.js')); -router.get('/thepaper/839studio/:id', require('./routes/thepaper/839studio/category.js')); - -// 电影首发站 -router.get('/dysfz', require('./routes/dysfz/index')); -router.get('/dysfz/index', require('./routes/dysfz/index')); // 废弃 - -// きららファンタジア -router.get('/kirara/news', require('./routes/kirara/news')); - -// 电影天堂 -router.get('/dytt', require('./routes/dytt/index')); -router.get('/dytt/index', require('./routes/dytt/index')); // 废弃 - -// BT之家 -router.get('/btzj/:type?', require('./routes/btzj/index')); - -// 人生05电影网 -router.get('/rs05/rs05', require('./routes/rs05/rs05')); - -// 人人影视 (评测推荐) -router.get('/rrys/review', require('./routes/rrys/review')); - -// 人人影视(每日更新) -router.get('/yyets/todayfilelist', require('./routes/yyets/todayfilelist')); - -// 趣头条 -router.get('/qutoutiao/category/:cid', require('./routes/qutoutiao/category')); - -// NHK NEW WEB EASY -router.get('/nhk/news_web_easy', require('./routes/nhk/news_web_easy')); - -// BBC -router.get('/bbc/:site?/:channel?', require('./routes/bbc/index')); - -// FT 中文网 -router.get('/ft/:language/:channel?', require('./routes/ft/channel')); - -// The Verge -router.get('/verge', require('./routes/verge/index')); - -// 看雪 -router.get('/pediy/topic/:category?/:type?', require('./routes/pediy/topic')); - -// 多维新闻网 -router.get('/dwnews/yaowen/:region?', require('./routes/dwnews/yaowen')); -router.get('/dwnews/rank/:type?/:range?', require('./routes/dwnews/rank')); - -// 知晓程序 -router.get('/miniapp/article/:category', require('./routes/miniapp/article')); -router.get('/miniapp/store/newest', require('./routes/miniapp/store/newest')); - -// 后续 -router.get('/houxu/live/:id/:timeline?', require('./routes/houxu/live')); -router.get('/houxu/events', require('./routes/houxu/events')); -router.get('/houxu/lives/:type', require('./routes/houxu/lives')); - -// 老司机 -router.get('/laosiji/hot', require('./routes/laosiji/hot')); -router.get('/laosiji/feed', require('./routes/laosiji/feed')); -router.get('/laosiji/hotshow/:id', require('./routes/laosiji/hotshow')); - -// Scientific American 60-Second Science -router.get('/60s-science/transcript', require('./routes/60s-science/transcript')); - -// 99% Invisible -router.get('/99percentinvisible/transcript', require('./routes/99percentinvisible/transcript')); - -// 青空文庫 -router.get('/aozora/newbook/:count?', require('./routes/aozora/newbook')); - -// solidot -router.get('/solidot/:type?', require('./routes/solidot/main')); - -// Hermes UK -router.get('/parcel/hermesuk/:tracking', require('./routes/parcel/hermesuk')); - -// 数字尾巴 -router.get('/dgtle', require('./routes/dgtle/index')); -router.get('/dgtle/whale/category/:category', require('./routes/dgtle/whale')); -router.get('/dgtle/whale/rank/:type/:rule', require('./routes/dgtle/whale_rank')); -router.get('/dgtle/trade/:typeId?', require('./routes/dgtle/trade')); -router.get('/dgtle/trade/search/:keyword', require('./routes/dgtle/keyword')); - -// 抽屉新热榜 -router.get('/chouti/top/:hour?', require('./routes/chouti/top')); -router.get('/chouti/:subject?', require('./routes/chouti')); - -// 西安电子科技大学 -router.get('/xidian/jwc/:category?', require('./routes/universities/xidian/jwc')); - -// Westore -router.get('/westore/new', require('./routes/westore/new')); - -// 优酷 -router.get('/youku/channel/:channelId/:embed?', require('./routes/youku/channel')); - -// 油价 -router.get('/oilprice/:area', require('./routes/oilprice')); - -// nHentai -router.get('/nhentai/search/:keyword/:mode?', require('./routes/nhentai/search')); -router.get('/nhentai/:key/:keyword/:mode?', require('./routes/nhentai/other')); - -// 龙腾网 -router.get('/ltaaa/:type?', require('./routes/ltaaa/main')); - -// AcFun -router.get('/acfun/bangumi/:id', require('./routes/acfun/bangumi')); -router.get('/acfun/user/video/:uid', require('./routes/acfun/video')); - -// Auto Trader -router.get('/autotrader/:query', require('./routes/autotrader')); - -// 极客公园 -router.get('/geekpark/breakingnews', require('./routes/geekpark/breakingnews')); - -// 百度 -router.get('/baidu/doodles', require('./routes/baidu/doodles')); -router.get('/baidu/topwords/:boardId?', require('./routes/baidu/topwords')); -router.get('/baidu/daily', require('./routes/baidu/daily')); - -// 搜狗 -router.get('/sogou/doodles', require('./routes/sogou/doodles')); - -// 香港天文台 -router.get('/hko/weather', require('./routes/hko/weather')); - -// sankakucomplex -router.get('/sankakucomplex/post', require('./routes/sankakucomplex/post')); - -// 技术头条 -router.get('/blogread/newest', require('./routes/blogread/newest')); - -// gnn游戏新闻 -router.get('/gnn/gnn', require('./routes/gnn/gnn')); - -// a9vg游戏新闻 -router.get('/a9vg/a9vg', require('./routes/a9vg/a9vg')); - -// IT桔子 -router.get('/itjuzi/invest', require('./routes/itjuzi/invest')); -router.get('/itjuzi/merge', require('./routes/itjuzi/merge')); - -// 探物 -router.get('/tanwu/products', require('./routes/tanwu/products')); - -// GitChat -router.get('/gitchat/newest/:category?/:selected?', require('./routes/gitchat/newest')); - -// The Guardian -router.get('/guardian/:type', require('./routes/guardian/guardian')); - -// 下厨房 -router.get('/xiachufang/user/cooked/:id', require('./routes/xiachufang/user/cooked')); -router.get('/xiachufang/user/created/:id', require('./routes/xiachufang/user/created')); -router.get('/xiachufang/popular/:timeframe?', require('./routes/xiachufang/popular')); - -// 经济观察报 -router.get('/eeo/:category?', require('./routes/eeo/index')); - -// 腾讯视频 -router.get('/tencentvideo/playlist/:id', require('./routes/tencent/video/playlist')); - -// 看漫画 -router.get('/manhuagui/comic/:id', require('./routes/manhuagui/comic')); -// 動漫狂 -router.get('/cartoonmad/comic/:id', require('./routes/cartoonmad/comic')); -// Vol -router.get('/vol/:mode?', require('./routes/vol/lastupdate')); -// 咚漫 -router.get('/dongmanmanhua/:category/:name/:id', require('./routes/dongmanmanhua/comic')); -// webtoons -router.get('/webtoons/:lang/:category/:name/:id', require('./routes/webtoons/comic')); -router.get('/webtoons/naver/:id', require('./routes/webtoons/naver')); - -// Tits Guru -router.get('/tits-guru/home', require('./routes/titsguru/home')); -router.get('/tits-guru/daily', require('./routes/titsguru/daily')); -router.get('/tits-guru/category/:type', require('./routes/titsguru/category')); -router.get('/tits-guru/model/:name', require('./routes/titsguru/model')); - -// typora -router.get('/typora/changelog', require('./routes/typora/changelog')); -router.get('/typora/changelog-dev/:os?', require('./routes/typora/changelog-dev')); - -// TSSstatus -router.get('/tssstatus/:board/:build', require('./routes/tssstatus')); - -// Anime1 -router.get('/anime1/anime/:time/:name', require('./routes/anime1/anime')); -router.get('/anime1/search/:keyword', require('./routes/anime1/search')); - -// gitea -router.get('/gitea/blog', require('./routes/gitea/blog')); - -// iDownloadBlog -router.get('/idownloadblog', require('./routes/idownloadblog/index')); - -// 9to5 -router.get('/9to5/:subsite/:tag?', require('./routes/9to5/subsite')); - -// TesterHome -router.get('/testerhome/newest', require('./routes/testerhome/newest')); - -// 刷屏 -router.get('/weseepro/newest', require('./routes/weseepro/newest')); -router.get('/weseepro/newest-direct', require('./routes/weseepro/newest-direct')); -router.get('/weseepro/circle', require('./routes/weseepro/circle')); - -// 玩物志 -router.get('/coolbuy/newest', require('./routes/coolbuy/newest')); - -// NGA -router.get('/nga/forum/:fid/:recommend?', require('./routes/nga/forum')); -router.get('/nga/post/:tid', require('./routes/nga/post')); - -// Nautilus -router.get('/nautilus/topic/:tid', require('./routes/nautilus/topics')); - -// JavBus -router.get('/javbus/home', require('./routes/javbus/home')); -router.get('/javbus/genre/:gid', require('./routes/javbus/genre')); -router.get('/javbus/star/:sid', require('./routes/javbus/star')); -router.get('/javbus/series/:seriesid', require('./routes/javbus/series')); -router.get('/javbus/uncensored/home', require('./routes/javbus/uncensored/home')); -router.get('/javbus/uncensored/genre/:gid', require('./routes/javbus/uncensored/genre')); -router.get('/javbus/uncensored/star/:sid', require('./routes/javbus/uncensored/star')); -router.get('/javbus/uncensored/series/:seriesid', require('./routes/javbus/uncensored/series')); -router.get('/javbus/western/home', require('./routes/javbus/western/home')); -router.get('/javbus/western/genre/:gid', require('./routes/javbus/western/genre')); -router.get('/javbus/western/star/:sid', require('./routes/javbus/western/star')); -router.get('/javbus/western/series/:seriesid', require('./routes/javbus/western/series')); - -// 中山大学 -router.get('/sysu/sdcs', require('./routes/universities/sysu/sdcs')); - -// 動畫瘋 -router.get('/anigamer/new_anime', require('./routes/anigamer/new_anime')); -router.get('/anigamer/anime/:sn', require('./routes/anigamer/anime')); - -// Apkpure -router.get('/apkpure/versions/:region/:pkg', require('./routes/apkpure/versions')); - -// 豆瓣美女 -router.get('/dbmv/:category?', require('./routes/dbmv/index')); - -// 中国药科大学 -router.get('/cpu/home', require('./routes/universities/cpu/home')); -router.get('/cpu/jwc', require('./routes/universities/cpu/jwc')); -router.get('/cpu/yjsy', require('./routes/universities/cpu/yjsy')); - -// 字幕组 -router.get('/zimuzu/resource/:id?', require('./routes/zimuzu/resource')); -router.get('/zimuzu/top/:range/:type', require('./routes/zimuzu/top')); - -// 虎嗅 -router.get('/huxiu/tag/:id', require('./routes/huxiu/tag')); -router.get('/huxiu/search/:keyword', require('./routes/huxiu/search')); -router.get('/huxiu/author/:id', require('./routes/huxiu/author')); -router.get('/huxiu/article', require('./routes/huxiu/article')); -router.get('/huxiu/collection/:id', require('./routes/huxiu/collection')); - -// Steam -router.get('/steam/search/:params', require('./routes/steam/search')); -router.get('/steam/news/:appids', require('./routes/steam/news')); - -// Steamgifts -router.get('/steamgifts/discussions/:category?', require('./routes/steam/steamgifts/discussions')); - -// 扇贝 -router.get('/shanbay/checkin/:id', require('./routes/shanbay/checkin')); -router.get('/shanbay/footprints/:category?', require('./routes/shanbay/footprints')); - -// Facebook -router.get('/facebook/page/:id', require('./routes/facebook/page')); - -// 币乎 -router.get('/bihu/activaties/:id', require('./routes/bihu/activaties')); - -// 停电通知 -router.get('/tingdiantz/nanjing', require('./routes/tingdiantz/nanjing')); - -// 36kr -router.get('/36kr/search/article/:keyword', require('./routes/36kr/search/article')); -router.get('/36kr/newsflashes', require('./routes/36kr/newsflashes')); -router.get('/36kr/news/:caty', require('./routes/36kr/news')); -router.get('/36kr/user/:uid', require('./routes/36kr/user')); -router.get('/36kr/motif/:mid', require('./routes/36kr/motif')); - -// PMCAFF -router.get('/pmcaff/list/:typeid', require('./routes/pmcaff/list')); -router.get('/pmcaff/feed/:typeid', require('./routes/pmcaff/feed')); -router.get('/pmcaff/user/:userid', require('./routes/pmcaff/user')); - -// icourse163 -router.get('/icourse163/newest', require('./routes/icourse163/newest')); - -// patchwork.kernel.org -router.get('/patchwork.kernel.org/comments/:id', require('./routes/patchwork.kernel.org/comments')); - -// 京东众筹 -router.get('/jingdong/zhongchou/:type/:status/:sort', require('./routes/jingdong/zhongchou')); - -// 淘宝众筹 -router.get('/taobao/zhongchou/:type?', require('./routes/taobao/zhongchou')); - -// All Poetry -router.get('/allpoetry/:order?', require('./routes/allpoetry/order')); - -// 华尔街见闻 -router.get('/wallstreetcn/news/global', require('./routes/wallstreetcn/news')); - -// 多抓鱼搜索 -router.get('/duozhuayu/search/:wd', require('./routes/duozhuayu/search')); - -// 创业邦 -router.get('/cyzone/author/:id', require('./routes/cyzone/author')); -router.get('/cyzone/label/:name', require('./routes/cyzone/label')); - -// 政府 -router.get('/gov/zhengce/zuixin', require('./routes/gov/zhengce/zuixin')); -router.get('/gov/zhengce/wenjian/:pcodeJiguan?', require('./routes/gov/zhengce/wenjian')); -router.get('/gov/zhengce/govall/:advance?', require('./routes/gov/zhengce/govall')); -router.get('/gov/province/:name/:category', require('./routes/gov/province')); -router.get('/gov/city/:name/:category', require('./routes/gov/city')); -router.get('/gov/statecouncil/briefing', require('./routes/gov/statecouncil/briefing')); -router.get('/gov/news/:uid', require('./routes/gov/news')); -router.get('/gov/shuju/:caty/:item', require('./routes/gov/shuju')); -router.get('/gov/xinwen/tujie/:caty', require('./routes/gov/xinwen/tujie')); - -// 苏州 -router.get('/gov/suzhou/news/:uid', require('./routes/gov/suzhou/news')); -router.get('/gov/suzhou/doc', require('./routes/gov/suzhou/doc')); - -// 江苏 -router.get('/gov/jiangsu/eea/:type?', require('./routes/gov/jiangsu/eea')); - -// 山西 -router.get('/gov/shanxi/rst/:category', require('./routes/gov/shanxi/rst')); - -// 湖南 -router.get('/gov/hunan/notice/:type', require('./routes/gov/hunan/notice')); - -// 中华人民共和国-海关总署 -router.get('/gov/customs/list/:gchannel', require('./routes/gov/customs/list')); - -// 中华人民共和国生态环境部 -router.get('/gov/mee/gs', require('./routes/gov/mee/gs')); - -// 中华人民共和国教育部 -router.get('/gov/moe/:type', require('./routes/gov/moe/moe')); - -// 中华人民共和国外交部 -router.get('/gov/fmprc/fyrbt', require('./routes/gov/fmprc/fyrbt')); - -// 中华人民共和国住房和城乡建设部 -router.get('/gov/mohurd/policy', require('./routes/gov/mohurd/policy')); - -// 国家新闻出版广电总局 -router.get('/gov/sapprft/approval/:channel/:detail?', require('./routes/gov/sapprft/7026')); - -// 国家新闻出版署 -router.get('/gov/nppa/:channel', require('./routes/gov/nppa/channels')); -router.get('/gov/nppa/:channel/:content', require('./routes/gov/nppa/contents')); - -// 北京卫生健康委员会 -router.get('/gov/beijing/mhc/:caty', require('./routes/gov/beijing/mhc')); - -// 北京考试院 -router.get('/gov/beijing/bjeea/:type', require('./routes/gov/beijing/eea')); - -// 广东省教育厅 -router.get('/gov/guangdong/edu/:caty', require('./routes/gov/guangdong/edu')); - -// 日本国外務省記者会見 -router.get('/go.jp/mofa', require('./routes/go.jp/mofa/main')); - -// 小黑盒 -router.get('/xiaoheihe/user/:id', require('./routes/xiaoheihe/user')); -router.get('/xiaoheihe/news', require('./routes/xiaoheihe/news')); -router.get('/xiaoheihe/discount/:platform?', require('./routes/xiaoheihe/discount')); - -// 惠誉评级 -router.get('/fitchratings/site/:type', require('./routes/fitchratings/site')); - -// 移动支付 -router.get('/mpaypass/news', require('./routes/mpaypass/news')); -router.get('/mpaypass/main/:type?', require('./routes/mpaypass/main')); - -// 新浪科技探索 -router.get('/sina/discovery/:type', require('./routes/sina/discovery')); - -// 新浪科技滚动新闻 -router.get('/sina/rollnews', require('./routes/sina/rollnews')); - -// 新浪专栏创事记 -router.get('/sina/csj', require('./routes/sina/chuangshiji')); - -// 新浪财经-国內 -router.get('/sina/finance', require('./routes/sina/finance')); - -// Animen -router.get('/animen/news/:type', require('./routes/animen/news')); - -// D2 资源库 -router.get('/d2/daily', require('./routes/d2/daily')); - -// ebb -router.get('/ebb', require('./routes/ebb')); - -// Indienova -router.get('/indienova/:type', require('./routes/indienova/article')); - -// JPMorgan Chase Institute -router.get('/jpmorganchase', require('./routes/jpmorganchase/research')); - -// 美拍 -router.get('/meipai/user/:uid', require('./routes/meipai/user')); - -// 多知网 -router.get('/duozhi', require('./routes/duozhi')); - -// Docker Hub -router.get('/dockerhub/build/:owner/:image/:tag?', require('./routes/dockerhub/build')); - -// 人人都是产品经理 -router.get('/woshipm/popular', require('./routes/woshipm/popular')); -router.get('/woshipm/wen', require('./routes/woshipm/wen')); -router.get('/woshipm/bookmarks/:id', require('./routes/woshipm/bookmarks')); -router.get('/woshipm/user_article/:id', require('./routes/woshipm/user_article')); -router.get('/woshipm/latest', require('./routes/woshipm/latest')); - -// 高清电台 -router.get('/gaoqing/latest', require('./routes/gaoqing/latest')); - -// 轻小说文库 -router.get('/wenku8/chapter/:id', require('./routes/wenku8/chapter')); - -// 鲸跃汽车 -router.get('/whalegogo/home', require('./routes/whalegogo/home')); -router.get('/whalegogo/portal/:type_id/:tagid?', require('./routes/whalegogo/portal')); - -// 爱思想 -router.get('/aisixiang/column/:id', require('./routes/aisixiang/column')); -router.get('/aisixiang/ranking/:type?/:range?', require('./routes/aisixiang/ranking')); -router.get('/aisixiang/thinktank/:name/:type?', require('./routes/aisixiang/thinktank')); - -// Hacker News -router.get('/hackernews/:section/:type?', require('./routes/hackernews/story')); - -// LeetCode -router.get('/leetcode/articles', require('./routes/leetcode/articles')); -router.get('/leetcode/submission/us/:user', require('./routes/leetcode/check-us')); -router.get('/leetcode/submission/cn/:user', require('./routes/leetcode/check-cn')); - -// segmentfault -router.get('/segmentfault/channel/:name', require('./routes/segmentfault/channel')); -router.get('/segmentfault/user/:name', require('./routes/segmentfault/user')); - -// 虎扑 -router.get('/hupu/bxj/:id/:order?', require('./routes/hupu/bbs')); -router.get('/hupu/bbs/:id/:order?', require('./routes/hupu/bbs')); -router.get('/hupu/all/:caty', require('./routes/hupu/all')); -router.get('/hupu/dept/:dept', require('./routes/hupu/dept')); - -// 牛客网 -router.get('/nowcoder/discuss/:type/:order', require('./routes/nowcoder/discuss')); -router.get('/nowcoder/schedule/:propertyId?/:typeId?', require('./routes/nowcoder/schedule')); -router.get('/nowcoder/recommend', require('./routes/nowcoder/recommend')); -router.get('/nowcoder/jobcenter/:recruitType?/:city?/:type?/:order?/:latest?', require('./routes/nowcoder/jobcenter')); - -// Xiaomi.eu -router.get('/xiaomieu/releases', require('./routes/xiaomieu/releases')); - -// sketch.com -router.get('/sketch/beta', require('./routes/sketch/beta')); -router.get('/sketch/updates', require('./routes/sketch/updates')); - -// 每日安全 -router.get('/security/pulses', require('./routes/security/pulses')); - -// DoNews -router.get('/donews/:column?', require('./routes/donews/index')); - -// WeGene -router.get('/wegene/column/:type/:category', require('./routes/wegene/column')); -router.get('/wegene/newest', require('./routes/wegene/newest')); - -// instapaper -router.get('/instapaper/person/:name', require('./routes/instapaper/person')); - -// UI 中国 -router.get('/ui-cn/article', require('./routes/ui-cn/article')); -router.get('/ui-cn/user/:id', require('./routes/ui-cn/user')); - -// Dcard -router.get('/dcard/:section/:type?', require('./routes/dcard/section')); - -// 12306 -router.get('/12306/zxdt/:id?', require('./routes/12306/zxdt')); - -// 北京天文馆每日一图 -router.get('/bjp/apod', require('./routes/bjp/apod')); - -// 洛谷 -router.get('/luogu/daily/:id?', require('./routes/luogu/daily')); -router.get('/luogu/contest', require('./routes/luogu/contest')); -router.get('/luogu/user/feed/:uid', require('./routes/luogu/userFeed')); - -// 决胜网 -router.get('/juesheng', require('./routes/juesheng')); - -// 播客IBCラジオ イヤーマイッタマイッタ -router.get('/maitta', require('./routes/maitta')); - -// 一些博客 -// 敬维-以认真的态度做完美的事情: https://jingwei.link/ -router.get('/blogs/jingwei.link', require('./routes/blogs/jingwei_link')); - -// 王垠的博客-当然我在扯淡 -router.get('/blogs/wangyin', require('./routes/blogs/wangyin')); - -// 王五四文集 -router.get('/blogs/wang54/:id?', require('./routes/blogs/wang54')); - -// WordPress -router.get('/blogs/wordpress/:domain/:https?', require('./routes/blogs/wordpress')); - -// 裏垢女子まとめ -router.get('/uraaka-joshi', require('./routes/uraaka-joshi/uraaka-joshi')); -router.get('/uraaka-joshi/:id', require('./routes/uraaka-joshi/uraaka-joshi-user')); - -// 西祠胡同 -router.get('/xici/:id?', require('./routes/xici')); - -// 淘股吧论坛 -router.get('/taoguba/index', require('./routes/taoguba/index')); -router.get('/taoguba/user/:uid', require('./routes/taoguba/user')); - -// 今日热榜 -router.get('/tophub/:id', require('./routes/tophub')); - -// 游戏时光 -router.get('/vgtime/news', require('./routes/vgtime/news.js')); -router.get('/vgtime/release', require('./routes/vgtime/release')); -router.get('/vgtime/keyword/:keyword', require('./routes/vgtime/keyword')); - -// MP4吧 -router.get('/mp4ba/:param', require('./routes/mp4ba')); - -// anitama -router.get('/anitama/:channel?', require('./routes/anitama/channel')); - -// 親子王國 -router.get('/babykingdom/:id/:order?', require('./routes/babykingdom')); - -// 四川大学 -router.get('/scu/jwc/notice', require('./routes/universities/scu/jwc')); -router.get('/scu/xg/notice', require('./routes/universities/scu/xg')); - -// 浙江工商大学 -router.get('/zjgsu/tzgg', require('./routes/universities/zjgsu/tzgg/scripts')); -router.get('/zjgsu/gsgg', require('./routes/universities/zjgsu/gsgg/scripts')); -router.get('/zjgsu/xszq', require('./routes/universities/zjgsu/xszq/scripts')); - -// 大众点评 -router.get('/dianping/user/:id?', require('./routes/dianping/user')); - -// 半月谈 -router.get('/banyuetan/:name', require('./routes/banyuetan')); - -// 人民日报 -router.get('/people/opinion/:id', require('./routes/people/opinion')); -router.get('/people/env/:id', require('./routes/people/env')); -router.get('/people/xjpjh/:keyword?/:year?', require('./routes/people/xjpjh')); - -// 北极星电力网 -router.get('/bjx/huanbao', require('./routes/bjx/huanbao')); - -// gamersky -router.get('/gamersky/news', require('./routes/gamersky/news')); -router.get('/gamersky/ent/:category', require('./routes/gamersky/ent')); - -// 游研社 -router.get('/yystv/category/:category', require('./routes/yystv/category')); - -// psnine -router.get('/psnine/index', require('./routes/psnine/index')); -router.get('/psnine/shuzhe', require('./routes/psnine/shuzhe')); -router.get('/psnine/trade', require('./routes/psnine/trade')); -router.get('/psnine/game', require('./routes/psnine/game')); -router.get('/psnine/news', require('./routes/psnine/news')); - -// 浙江大学 -router.get('/zju/list/:type', require('./routes/universities/zju/list')); -router.get('/zju/physics/:type', require('./routes/universities/zju/physics')); -router.get('/zju/grs/:type', require('./routes/universities/zju/grs')); -router.get('/zju/career/:type', require('./routes/universities/zju/career')); -router.get('/zju/cst/:type', require('./routes/universities/zju/cst')); -router.get('/zju/cst/custom/:id', require('./routes/universities/zju/cst/custom')); - -// 浙江大学城市学院 -router.get('/zucc/news/latest', require('./routes/universities/zucc/news')); -router.get('/zucc/cssearch/latest/:webVpn/:key', require('./routes/universities/zucc/cssearch')); - -// 华中师范大学 -router.get('/ccnu/career', require('./routes/universities/ccnu/career')); - -// Infoq -router.get('/infoq/recommend', require('./routes/infoq/recommend')); -router.get('/infoq/topic/:id', require('./routes/infoq/topic')); - -// checkee -router.get('/checkee/:dispdate', require('./routes/checkee/index')); - -// 艾瑞 -router.get('/iresearch/report', require('./routes/iresearch/report')); - -// ZAKER -router.get('/zaker/:type/:id', require('./routes/zaker/source')); -router.get('/zaker/focusread', require('./routes/zaker/focusread')); - -// Matters -router.get('/matters/topics', require('./routes/matters/topics')); -router.get('/matters/latest', require('./routes/matters/latest')); -router.get('/matters/hot', require('./routes/matters/hot')); -router.get('/matters/tags/:tid', require('./routes/matters/tags')); -router.get('/matters/author/:uid', require('./routes/matters/author')); - -// MobData -router.get('/mobdata/report', require('./routes/mobdata/report')); - -// 谷雨 -router.get('/tencent/guyu/channel/:name', require('./routes/tencent/guyu/channel')); - -// 古诗文网 -router.get('/gushiwen/recommend/:annotation?', require('./routes/gushiwen/recommend')); - -// 电商在线 -router.get('/imaijia/category/:category', require('./routes/imaijia/category')); - -// 21财经 -router.get('/21caijing/channel/:name', require('./routes/21caijing/channel')); - -// 北京邮电大学 -router.get('/bupt/yz/:type', require('./routes/universities/bupt/yz')); -router.get('/bupt/grs', require('./routes/universities/bupt/grs')); -router.get('/bupt/portal', require('./routes/universities/bupt/portal')); -router.get('/bupt/news', require('./routes/universities/bupt/news')); -router.get('/bupt/funbox', require('./routes/universities/bupt/funbox')); - -// VOCUS 方格子 -router.get('/vocus/publication/:id', require('./routes/vocus/publication')); -router.get('/vocus/user/:id', require('./routes/vocus/user')); - -// 一亩三分地 1point3acres -router.get('/1point3acres/user/:id/threads', require('./routes/1point3acres/threads')); -router.get('/1point3acres/user/:id/posts', require('./routes/1point3acres/posts')); -router.get('/1point3acres/offer/:year?/:major?/:school?', require('./routes/1point3acres/offer')); -router.get('/1point3acres/post/:category', require('./routes/1point3acres/post')); - -// 广东海洋大学 -router.get('/gdoujwc', require('./routes/universities/gdou/jwc/jwtz')); - -// 中国高清网 -router.get('/gaoqingla/:tag?', require('./routes/gaoqingla/latest')); - -// 马良行 -router.get('/mlhang', require('./routes/mlhang/latest')); - -// PlayStation Store -router.get('/ps/list/:gridName', require('./routes/ps/list')); -router.get('/ps/trophy/:id', require('./routes/ps/trophy')); -router.get('/ps/ps4updates', require('./routes/ps/ps4updates')); -router.get('/ps/:lang?/product/:gridName', require('./routes/ps/product')); - -// Quanta Magazine -router.get('/quantamagazine/archive', require('./routes/quantamagazine/archive')); - -// Nintendo -router.get('/nintendo/eshop/jp', require('./routes/nintendo/eshop_jp')); -router.get('/nintendo/eshop/hk', require('./routes/nintendo/eshop_hk')); -router.get('/nintendo/eshop/us', require('./routes/nintendo/eshop_us')); -router.get('/nintendo/eshop/cn', require('./routes/nintendo/eshop_cn')); -router.get('/nintendo/news', require('./routes/nintendo/news')); -router.get('/nintendo/news/china', require('./routes/nintendo/news_china')); -router.get('/nintendo/direct', require('./routes/nintendo/direct')); -router.get('/nintendo/system-update', require('./routes/nintendo/system-update')); - -// 世界卫生组织 -router.get('/who/news-room/:type', require('./routes/who/news-room')); - -// 福利资源-met.red -router.get('/metred/fuli', require('./routes/metred/fuli')); - -// MIT -router.get('/mit/graduateadmissions/:type/:name', require('./routes/universities/mit/graduateadmissions')); - -// 毕马威 -router.get('/kpmg/insights', require('./routes/kpmg/insights')); - -// Saraba1st -router.get('/saraba1st/thread/:tid', require('./routes/saraba1st/thread')); - -// gradcafe -router.get('/gradcafe/result/:type', require('./routes/gradcafe/result')); -router.get('/gradcafe/result', require('./routes/gradcafe/result')); - -// The Economist -router.get('/the-economist/gre-vocabulary', require('./routes/the-economist/gre-vocabulary')); -router.get('/the-economist/:endpoint', require('./routes/the-economist/full')); - -// 鼠绘漫画 -router.get('/shuhui/comics/:id', require('./routes/shuhui/comics')); - -// 朝日新聞中文网(简体中文版) -router.get('/asahichinese-j/:category/:subCate', require('./routes/asahichinese-j/index')); -router.get('/asahichinese-j/:category', require('./routes/asahichinese-j/index')); - -// 朝日新聞中文網(繁體中文版) -router.get('/asahichinese-f/:category/:subCate', require('./routes/asahichinese-f/index')); -router.get('/asahichinese-f/:category', require('./routes/asahichinese-f/index')); - -// 7x24小时快讯 -router.get('/fx678/kx', require('./routes/fx678/kx')); - -// SoundCloud -router.get('/soundcloud/tracks/:user', require('./routes/soundcloud/tracks')); - -// dilidili -router.get('/dilidili/fanju/:id', require('./routes/dilidili/fanju')); - -// 且听风吟福利 -router.get('/qtfyfl/:category', require('./routes/qtfyfl/category')); - -// 派代 -router.get('/paidai', require('./routes/paidai/index')); -router.get('/paidai/bbs', require('./routes/paidai/bbs')); -router.get('/paidai/news', require('./routes/paidai/news')); - -// 中国银行 -router.get('/boc/whpj/:format?', require('./routes/boc/whpj')); - -// 漫画db -router.get('/manhuadb/comics/:id', require('./routes/manhuadb/comics')); - -// 装备前线 -router.get('/zfrontier/postlist/:type', require('./routes/zfrontier/postlist')); -router.get('/zfrontier/board/:boardId', require('./routes/zfrontier/board_postlist')); - -// 观察者风闻话题 -router.get('/guanchazhe/topic/:id', require('./routes/guanchazhe/topic')); -router.get('/guanchazhe/personalpage/:uid', require('./routes/guanchazhe/personalpage')); -router.get('/guanchazhe/index/:type', require('./routes/guanchazhe/index')); - -// Hpoi 手办维基 -router.get('/hpoi/info/:type?', require('./routes/hpoi/info')); -router.get('/hpoi/:category/:words', require('./routes/hpoi')); -router.get('/hpoi/user/:user_id/:caty', require('./routes/hpoi/user')); - -// 通用CurseForge -router.get('/curseforge/:gameid/:catagoryid/:projectid/files', require('./routes/curseforge/generalfiles')); - -// 西南财经大学 -router.get('/swufe/seie/:type?', require('./routes/universities/swufe/seie')); - -// Wired -router.get('/wired/tag/:tag', require('./routes/wired/tag')); - -// 语雀文档 -router.get('/yuque/doc/:repo_id', require('./routes/yuque/doc')); - -// 飞地 -router.get('/enclavebooks/category/:id?', require('./routes/enclavebooks/category')); -router.get('/enclavebooks/user/:uid', require('./routes/enclavebooks/user.js')); -router.get('/enclavebooks/collection/:uid', require('./routes/enclavebooks/collection.js')); - -// 色花堂 -router.get('/dsndsht23/picture/:subforumid', require('./routes/dsndsht23/index')); -router.get('/dsndsht23/bt/:subforumid?', require('./routes/dsndsht23/index')); -router.get('/dsndsht23/:subforumid?/:type?', require('./routes/dsndsht23/index')); -router.get('/dsndsht23/:subforumid?', require('./routes/dsndsht23/index')); -router.get('/dsndsht23', require('./routes/dsndsht23/index')); - -// 数英网最新文章 -router.get('/digitaling/index', require('./routes/digitaling/index')); - -// 数英网文章专题 -router.get('/digitaling/articles/:category/:subcate', require('./routes/digitaling/article')); - -// 数英网项目专题 -router.get('/digitaling/projects/:category', require('./routes/digitaling/project')); - -// Bing壁纸 -router.get('/bing', require('./routes/bing/index')); - -// Maxjia News - DotA 2 -router.get('/maxnews/dota2', require('./routes/maxnews/dota2')); - -// 柠檬 - 私房歌 -router.get('/ningmeng/song', require('./routes/ningmeng/song')); - -// 紫竹张 -router.get('/zzz', require('./routes/zzz/index')); - -// AEON -router.get('/aeon/:cid', require('./routes/aeon/category')); - -// AlgoCasts -router.get('/algocasts', require('./routes/algocasts/all')); - -// aqicn -router.get('/aqicn/:city', require('./routes/aqicn/index')); - -// 猫眼电影 -router.get('/maoyan/hot', require('./routes/maoyan/hot')); -router.get('/maoyan/upcoming', require('./routes/maoyan/upcoming')); - -// cnBeta -router.get('/cnbeta', require('./routes/cnbeta/home')); - -// 国家退伍士兵信息 -router.get('/gov/veterans/:type', require('./routes/gov/veterans/china')); - -// 河北省退伍士兵信息 -router.get('/gov/veterans/hebei/:type', require('./routes/gov/veterans/hebei')); - -// Dilbert Comic Strip -router.get('/dilbert/strip', require('./routes/dilbert/strip')); - -// 游戏打折情报 -router.get('/yxdzqb/:type', require('./routes/yxdzqb')); - -// 怪物猎人 -router.get('/monsterhunter/update', require('./routes/mhw/update')); -router.get('/mhw/update', require('./routes/mhw/update')); -router.get('/mhw/news', require('./routes/mhw/news')); - -// 005.tv -router.get('/005tv/zx/latest', require('./routes/005tv/zx')); - -// Polimi News -router.get('/polimi/news/:language?', require('./routes/polimi/news')); - -// dekudeals -router.get('/dekudeals/:type', require('./routes/dekudeals')); - -// 直播吧 -router.get('/zhibo8/forum/:id', require('./routes/zhibo8/forum')); -router.get('/zhibo8/post/:id', require('./routes/zhibo8/post')); -router.get('/zhibo8/more/:caty', require('./routes/zhibo8/more')); - -// 东方网-上海 -router.get('/eastday/sh', require('./routes/eastday/sh')); - -// Metacritic -router.get('/metacritic/release/:platform/:type/:sort?', require('./routes/metacritic/release')); - -// 快科技(原驱动之家) -router.get('/kkj/news', require('./routes/kkj/news')); - -// Outage.Report -router.get('/outagereport/:name/:count?', require('./routes/outagereport/service')); - -// sixthtone -router.get('/sixthtone/news', require('./routes/sixthtone/news')); - -// AI研习社 -router.get('/aiyanxishe/:id/:sort?', require('./routes/aiyanxishe/home')); - -// 活动行 -router.get('/huodongxing/explore', require('./routes/hdx/explore')); - -// 飞客茶馆优惠信息 -router.get('/flyertea/preferential', require('./routes/flyertea/preferential')); -router.get('/flyertea/creditcard/:bank', require('./routes/flyertea/creditcard')); - -// 中国广播 -router.get('/radio/:channelname/:name', require('./routes/radio/radio')); - -// TOPYS -router.get('/topys/:category', require('./routes/topys/article')); - -// 巴比特作者专栏 -router.get('/8btc/:authorid', require('./routes/8btc/author')); -router.get('/8btc/news/flash', require('./routes/8btc/news/flash')); - -// VueVlog -router.get('/vuevideo/:userid', require('./routes/vuevideo/user')); - -// 证监会 -router.get('/csrc/news/:suffix?', require('./routes/csrc/news')); -router.get('/csrc/fashenwei', require('./routes/csrc/fashenwei')); -router.get('/csrc/auditstatus/:apply_id', require('./routes/csrc/auditstatus')); - -// LWN.net Alerts -router.get('/lwn/alerts/:distributor', require('./routes/lwn/alerts')); - -// 唱吧 -router.get('/changba/:userid', require('./routes/changba/user')); - -// 英雄联盟 -router.get('/lol/newsindex/:type', require('./routes/lol/newsindex')); - -// 掌上英雄联盟 -router.get('/lolapp/recommend', require('./routes/lolapp/recommend')); - -// 左岸读书 -router.get('/zreading', require('./routes/zreading/home')); - -// NBA -router.get('/nba/app_news', require('./routes/nba/app_news')); - -// 天津产权交易中心 -router.get('/tprtc/cqzr', require('./routes/tprtc/cqzr')); -router.get('/tprtc/qyzc', require('./routes/tprtc/qyzc')); -router.get('/tprtc/news', require('./routes/tprtc/news')); - -// ArchDaily -router.get('/archdaily', require('./routes/archdaily/home')); - -// aptonic Dropzone actions -router.get('/aptonic/action/:untested?', require('./routes/aptonic/action')); - -// 印记中文周刊 -router.get('/docschina/jsweekly', require('./routes/docschina/jsweekly')); - -// im2maker -router.get('/im2maker/:channel?', require('./routes/im2maker/index')); - -// 巨潮资讯 -router.get('/cninfo/announcement/:code?/:category?', require('./routes/cninfo/announcement')); -router.get('/cninfo/stock_announcement/:code', require('./routes/cninfo/stock_announcement')); -router.get('/cninfo/fund_announcement/:code?/:searchkey?', require('./routes/cninfo/fund_announcement')); - -// 中央纪委国家监委网站 -router.get('/ccdi/scdc', require('./routes/ccdi/scdc')); - -// 中华人民共和国农业农村部 -router.get('/gov/moa/sjzxfb', require('./routes/gov/moa/sjzxfb')); -router.get('/gov/moa/:suburl(.*)', require('./routes/gov/moa/moa')); - -// 香水时代 -router.get('/nosetime/:id/:type/:sort?', require('./routes/nosetime/comment')); -router.get('/nosetime/home', require('./routes/nosetime/home')); - -// 涂鸦王国 -router.get('/gracg/:user/:love?', require('./routes/gracg/user')); - -// 大侠阿木 -router.get('/daxiaamu/home', require('./routes/daxiaamu/home')); - -// 美团技术团队 -router.get('/meituan/tech/home', require('./routes//meituan/tech/home')); - -// 码农网 -router.get('/codeceo/home', require('./routes/codeceo/home')); -router.get('/codeceo/:type/:category?', require('./routes/codeceo/category')); - -// BOF -router.get('/bof/home', require('./routes/bof/home')); - -// 爱发电 -router.get('/afdian/explore/:type?/:category?', require('./routes/afdian/explore')); -router.get('/afdian/dynamic/:uid', require('./routes/afdian/dynamic')); - -// Simons Foundation -router.get('/simonsfoundation/articles', require('./routes/simonsfoundation/articles')); -router.get('/simonsfoundation/recommend', require('./routes/simonsfoundation/recommend')); - -// 王者荣耀 -router.get('/pvp/newsindex/:type', require('./routes/pvp/newsindex')); - -// 《明日方舟》游戏 -router.get('/arknights/news', require('./routes/arknights/news')); - -// ff14 -router.get('/ff14/ff14_zh/:type', require('./routes/ff14/ff14_zh')); - -// 学堂在线 -router.get('/xuetangx/course/:cid/:type', require('./routes/xuetangx/course_info')); -router.get('/xuetangx/course/list/:mode/:credential/:status/:type?', require('./routes/xuetangx/course_list')); - -// wikihow -router.get('/wikihow/index', require('./routes/wikihow/index.js')); -router.get('/wikihow/category/:category/:type', require('./routes/wikihow/category.js')); - -// 正版中国 -router.get('/getitfree/category/:category?', require('./routes/getitfree/category.js')); -router.get('/getitfree/search/:keyword?', require('./routes/getitfree/search.js')); - -// 万联网 -router.get('/10000link/news/:category?', require('./routes/10000link/news')); - -// 站酷 -router.get('/zcool/recommend/:type', require('./routes/zcool/recommend')); -router.get('/zcool/top/:type', require('./routes/zcool/top')); -router.get('/zcool/top', require('./routes/zcool/top')); // 兼容老版本 -router.get('/zcool/user/:uid', require('./routes/zcool/user')); - -// 第一财经 -router.get('/yicai/brief', require('./routes/yicai/brief.js')); - -// 一兜糖 -router.get('/yidoutang/index', require('./routes/yidoutang/index.js')); -router.get('/yidoutang/guide', require('./routes/yidoutang/guide.js')); -router.get('/yidoutang/mtest', require('./routes/yidoutang/mtest.js')); -router.get('/yidoutang/case/:type', require('./routes/yidoutang/case.js')); - -// 开眼 -router.get('/kaiyan/index', require('./routes/kaiyan/index')); - -// 龙空 -router.get('/lkong/forum/:id/:digest?', require('./routes/lkong/forum')); -router.get('/lkong/thread/:id', require('./routes/lkong/thread')); -// router.get('/lkong/user/:id', require('./routes/lkong/user')); - -// 坂道系列资讯 -// 坂道系列官网新闻 -router.get('/nogizaka46/news', require('./routes/nogizaka46/news')); -router.get('/keyakizaka46/news', require('./routes/keyakizaka46/news')); -router.get('/hinatazaka46/news', require('./routes/hinatazaka46/news')); -router.get('/keyakizaka46/blog', require('./routes/keyakizaka46/blog')); -router.get('/hinatazaka46/blog', require('./routes/hinatazaka46/blog')); - -// 酷安 -router.get('/coolapk/tuwen', require('./routes/coolapk/tuwen')); -router.get('/coolapk/tuwen-xinxian', require('./routes/coolapk/tuwen')); -router.get('/coolapk/huati/:tag', require('./routes/coolapk/huati')); -router.get('/coolapk/user/:uid/dynamic', require('./routes/coolapk/userDynamic')); -router.get('/coolapk/dyh/:dyhId', require('./routes/coolapk/dyh')); - -// 模型网 -router.get('/moxingnet', require('./routes/moxingnet')); - -// 湖北大学 -router.get('/hubu/news/:type', require('./routes/universities/hubu/news')); - -// 大连海事大学 -router.get('/dlmu/news/:type', require('./routes/universities/dlmu/news')); -router.get('/dlmu/grs/zsgz/:type', require('./routes/universities/dlmu/grs/zsgz')); - -// Rockstar Games Social Club -router.get('/socialclub/events/:game?', require('./routes/socialclub/events')); - -// CTFHub Event Calendar -router.get('/ctfhub/calendar/:limit?/:form?/:class?/:title?', require('./routes/ctfhub')); - -// 阿里云 -router.get('/aliyun/database_month', require('./routes/aliyun/database_month')); -router.get('/aliyun/notice/:type?', require('./routes/aliyun/notice')); -router.get('/aliyun/developer/group/:type', require('./routes/aliyun/developer/group')); - -// 礼物说 -router.get('/liwushuo/index', require('./routes/liwushuo/index.js')); - -// 故事fm -router.get('/storyfm/index', require('./routes/storyfm/index.js')); - -// 中国日报 -router.get('/chinadaily/english/:category', require('./routes/chinadaily/english.js')); - -// leboncoin -router.get('/leboncoin/ad/:query', require('./routes/leboncoin/ad.js')); - -// DHL -router.get('/dhl/:id', require('./routes/dhl/shipment-tracking')); - -// Japanpost -router.get('/japanpost/:reqCode/:locale?', require('./routes/japanpost/index')); - -// 中华人民共和国商务部 -router.get('/mofcom/article/:suffix', require('./routes/mofcom/article')); - -// 字幕库 -router.get('/zimuku/:type?', require('./routes/zimuku/index')); - -// 品玩 -router.get('/pingwest/status', require('./routes/pingwest/status')); -router.get('/pingwest/tag/:tag/:type', require('./routes/pingwest/tag')); -router.get('/pingwest/user/:uid/:type?', require('./routes/pingwest/user')); - -// Hanime -router.get('/hanime/video', require('./routes/hanime/video')); - -// 篝火营地 -router.get('/gouhuo/news/:category', require('./routes/gouhuo')); -router.get('/gouhuo/strategy', require('./routes/gouhuo/strategy')); - -// Soul -router.get('/soul/:id', require('./routes/soul')); -router.get('/soul/posts/hot', require('./routes/soul/hot')); - -// 单向空间 -router.get('/owspace/read/:type?', require('./routes/owspace/read')); - -// 天涯论坛 -router.get('/tianya/index/:type', require('./routes/tianya/index')); -router.get('/tianya/user/:userid', require('./routes/tianya/user')); -router.get('/tianya/comments/:userid', require('./routes/tianya/comments')); - -// eleme -router.get('/eleme/open/announce', require('./routes/eleme/open/announce')); -router.get('/eleme/open-be/announce', require('./routes/eleme/open-be/announce')); - -// 微信开放社区 -router.get('/wechat-open/community/:type', require('./routes/tencent/wechat/wechat-open/community/announce')); -// 微信支付 - 商户平台公告 -router.get('/wechat-open/pay/announce', require('./routes/tencent/wechat/wechat-open/pay/announce')); -router.get('/wechat-open/community/:type/:category', require('./routes/tencent/wechat/wechat-open/community/question')); - -// 微店 -router.get('/weidian/goods/:id', require('./routes/weidian/goods')); - -// 有赞 -router.get('/youzan/goods/:id', require('./routes/youzan/goods')); -// 币世界快讯 -router.get('/bishijie/kuaixun', require('./routes/bishijie/kuaixun')); - -// 顺丰丰桥 -router.get('/sf/sffq-announce', require('./routes/sf/sffq-announce')); - -// 缺书网 -router.get('/queshu/sale', require('./routes/queshu/sale')); -router.get('/queshu/book/:bookid', require('./routes/queshu/book')); - -// MITRE -router.get('/mitre/publications', require('./routes/mitre/publications')); - -// SANS -router.get('/sans/summit_archive', require('./routes/sans/summit_archive')); - -// LaTeX 开源小屋 -router.get('/latexstudio/home', require('./routes/latexstudio/home')); - -// 上证债券信息网 - 可转换公司债券公告 -router.get('/sse/convert/:query?', require('./routes/sse/convert')); -router.get('/sse/renewal', require('./routes/sse/renewal')); -router.get('/sse/inquire', require('./routes/sse/inquire')); - -// 上海证券交易所 -router.get('/sse/disclosure/:query?', require('./routes/sse/disclosure')); - -// 深圳证券交易所 -router.get('/szse/notice', require('./routes/szse/notice')); -router.get('/szse/inquire/:type', require('./routes/szse/inquire')); -router.get('/szse/rule', require('./routes/szse/rule')); - -// 前端艺术家每日整理&&飞冰早报 -router.get('/jskou/:type?', require('./routes/jskou/index')); - -// 国家应急广播 -router.get('/cneb/yjxx', require('./routes/cneb/yjxx')); -router.get('/cneb/guoneinews', require('./routes/cneb/guoneinews')); - -// 邮箱 -router.get('/mail/imap/:email', require('./routes/mail/imap')); - -// 好队友 -router.get('/network360/jobs', require('./routes/network360/jobs')); - -// 智联招聘 -router.get('/zhilian/:city/:keyword', require('./routes/zhilian/index')); - -// 电鸭社区 -router.get('/eleduck/jobs', require('./routes/eleduck/jobs')); - -// 北华航天工业学院 - 新闻 -router.get('/nciae/news', require('./routes/universities/nciae/news')); - -// 北华航天工业学院 - 通知公告 -router.get('/nciae/tzgg', require('./routes/universities/nciae/tzgg')); - -// 北华航天工业学院 - 学术信息 -router.get('/nciae/xsxx', require('./routes/universities/nciae/xsxx')); - -// cfan -router.get('/cfan/news', require('./routes/cfan/news')); - -// 搜狐 - 搜狐号 -router.get('/sohu/mp/:id', require('./routes/sohu/mp')); - -// 腾讯企鹅号 -router.get('/tencent/news/author/:mid', require('./routes/tencent/news/author')); - -// 腾讯柠檬精选 -router.get('/tencent/lemon', require('./routes/tencent/lemon/index')); - -// 奈菲影视 -router.get('/nfmovies/:id?', require('./routes/nfmovies/index')); - -// 书友社区 -router.get('/andyt/:view?', require('./routes/andyt/index')); - -// 品途商业评论 -router.get('/pintu360/:type?', require('./routes/pintu360/index')); - -// engadget中国版 -router.get('/engadget-cn', require('./routes/engadget/home')); - -// engadget -router.get('/engadget/:lang?', require('./routes/engadget/home')); - -// 吹牛部落 -router.get('/chuiniu/column/:id', require('./routes/chuiniu/column')); -router.get('/chuiniu/column_list', require('./routes/chuiniu/column_list')); - -// leemeng -router.get('/leemeng', require('./routes/blogs/leemeng')); - -// 中国地质大学 -router.get('/cug/graduate', require('./routes/cug/graduate')); -router.get('/cug/undergraduate', require('./routes/cug/undergraduate')); -router.get('/cug/xgxy', require('./routes/cug/xgxy')); - -// 网易 - 网易号 -router.get('/netease/dy/:id', require('./routes/netease/dy')); - -// 海猫吧 -router.get('/haimaoba/:id?', require('./routes/haimaoba/comics')); - -// 路透社 -router.get('/reuters/channel/:site/:channel', require('./routes/reuters/channel')); - -// 蒲公英 -router.get('/pgyer/:app?', require('./routes/pgyer/app')); - -// 微博个人时间线 -router.get('/weibo/timeline/:uid/:feature?', require('./routes/weibo/timeline')); - -// TAPTAP -router.get('/taptap/topic/:id/:label?', require('./routes/taptap/topic')); -router.get('/taptap/changelog/:id', require('./routes/taptap/changelog')); -router.get('/taptap/review/:id/:order?', require('./routes/taptap/review')); - -// lofter -router.get('/lofter/tag/:name/:type?', require('./routes/lofter/tag')); -router.get('/lofter/user/:username', require('./routes/lofter/posts')); - -// 米坛社区表盘 -router.get('/watchface/:watch_type?/:list_type?', require('./routes/watchface/update')); - -// CNU视觉联盟 -router.get('/cnu/selected', require('./routes/cnu/selected')); -router.get('/cnu/discovery/:type?/:category?', require('./routes/cnu/discovery')); - -// 战旗直播 -router.get('/zhanqi/room/:id', require('./routes/zhanqi/room')); - -// 酒云网 -router.get('/wineyun/:category', require('./routes/wineyun')); - -// 小红书 -router.get('/xiaohongshu/user/:user_id/:category', require('./routes/xiaohongshu/user')); -router.get('/xiaohongshu/board/:board_id', require('./routes/xiaohongshu/board')); - -// 重磅原创-每经网 -router.get('/nbd/daily', require('./routes/nbd/article')); - -// 快知 -router.get('/kzfeed/topic/:id', require('./routes/kzfeed/topic')); - -// 腾讯新闻较真查证平台 -router.get('/factcheck', require('./routes/tencent/factcheck')); - -// X-MOL化学资讯平台 -router.get('/x-mol/news/:tag?', require('./routes/x-mol/news.js')); -router.get('/x-mol/paper/:type/:magazine', require('./routes/x-mol/paper')); - -// 知识分子 -router.get('/zhishifenzi/news/:type?', require('./routes/zhishifenzi/news')); -router.get('/zhishifenzi/depth', require('./routes/zhishifenzi/depth')); -router.get('/zhishifenzi/innovation/:type?', require('./routes/zhishifenzi/innovation')); - -// 電撃Online -router.get('/dengekionline/:type?', require('./routes/dengekionline/new')); - -// 4Gamers -router.get('/4gamers/category/:category', require('./routes/4gamers/category')); -router.get('/4gamers/tag/:tag', require('./routes/4gamers/tag')); -router.get('/4gamers/topic/:topic', require('./routes/4gamers/topic')); - -// 大麦网 -router.get('/damai/activity/:city/:category/:subcategory/:keyword?', require('./routes/damai/activity')); - -// 桂林电子科技大学新闻资讯 -router.get('/guet/xwzx/:type?', require('./routes/guet/news')); - -// はてな匿名ダイアリー -router.get('/hatena/anonymous_diary/archive', require('./routes/hatena/anonymous_diary/archive')); - -// kaggle -router.get('/kaggle/discussion/:forumId/:sort?', require('./routes/kaggle/discussion')); -router.get('/kaggle/competitions/:category?', require('./routes/kaggle/competitions')); -router.get('/kaggle/user/:user', require('./routes/kaggle/user')); - -// PubMed Trending -router.get('/pubmed/trending', require('./routes/pubmed/trending')); - -// 领科 (linkresearcher.com) -router.get('/linkresearcher/:params', require('./routes/linkresearcher/index')); - -// eLife [Sci Journal] -router.get('/elife/:tid', require('./routes/elife/index')); - -// IEEE Xplore [Sci Journal] -router.get('/ieee/author/:aid/:sortType/:count?', require('./routes/ieee/author')); - -// PNAS [Sci Journal] -router.get('/pnas/:topic?', require('./routes/pnas/index')); - -// cell [Sci Journal] -router.get('/cell/cell/:category', require('./routes/cell/cell/index')); -router.get('/cell/cover', require('./routes/cell/cover')); - -// nature + nature 子刊 [Sci Journal] -router.get('/nature/research/:journal?', require('./routes/nature/research')); -router.get('/nature/news-and-comment/:journal?', require('./routes/nature/news-and-comment')); -router.get('/nature/cover', require('./routes/nature/cover')); -router.get('/nature/news', require('./routes/nature/news')); -router.get('/nature/highlight', require('./routes/nature/highlight')); - -// science [Sci Journal] -router.get('/sciencemag/current/:journal?', require('./routes/sciencemag/current')); -router.get('/sciencemag/cover', require('./routes/sciencemag/cover')); -router.get('/sciencemag/early/science', require('./routes/sciencemag/early')); - -// dlsite -router.get('/dlsite/new/:type', require('./routes/dlsite/new')); -router.get('/dlsite/campaign/:type/:free?', require('./routes/dlsite/campaign')); - -// mcbbs -router.get('/mcbbs/forum/:type', require('./routes/mcbbs/forum')); -router.get('/mcbbs/post/:tid/:authorid?', require('./routes/mcbbs/post')); - -// Pocket -router.get('/pocket/trending', require('./routes/pocket/trending')); - -// HK01 -router.get('/hk01/zone/:id', require('./routes/hk01/zone')); -router.get('/hk01/channel/:id', require('./routes/hk01/channel')); -router.get('/hk01/issue/:id', require('./routes/hk01/issue')); -router.get('/hk01/tag/:id', require('./routes/hk01/tag')); -router.get('/hk01/hot', require('./routes/hk01/hot')); - -// 码农周刊 -router.get('/manong-weekly', require('./routes/manong-weekly/issues')); - -// 每日猪价 -router.get('/pork-price', require('./routes/pork-price')); - -// NOI 全国青少年信息学奥林匹克竞赛 -router.get('/noi', require('./routes/noi')); -router.get('/noi/winners-list', require('./routes/noi/winners-list')); -router.get('/noi/province-news', require('./routes/noi/province-news')); -router.get('/noi/rg-news', require('./routes/noi/rg-news')); - -// 中国工业化和信息部 -router.get('/gov/miit/zcwj', require('./routes/gov/miit/zcwj')); -router.get('/gov/miit/wjgs', require('./routes/gov/miit/wjgs')); -router.get('/gov/miit/zcjd', require('./routes/gov/miit/zcjd')); - -// 中国国家认证认可监管管理员会 -router.get('/gov/cnca/jgdt', require('./routes/gov/cnca/jgdt')); -router.get('/gov/cnca/hydt', require('./routes/gov/cnca/hydt')); - -router.get('/gov/cnca/zxtz', require('./routes/gov/cnca/zxtz')); - -// clickme -router.get('/clickme/:site/:grouping/:name', require('./routes/clickme')); - -// 文汇报 -router.get('/whb/:category', require('./routes/whb/zhuzhan')); - -// 三界异次元 -router.get('/3ycy/home', require('./routes/3ycy/home.js')); - -// Emi Nitta official website -router.get('/emi-nitta/:type', require('./routes/emi-nitta/home')); - -// Alter China -router.get('/alter-cn/news', require('./routes/alter-cn/news')); - -// Visual Studio Code Marketplace -router.get('/vscode/marketplace/:type?', require('./routes/vscode/marketplace')); - -// 饭否 -router.get('/fanfou/user_timeline/:uid', require('./routes/fanfou/user_timeline')); -router.get('/fanfou/home_timeline', require('./routes/fanfou/home_timeline')); -router.get('/fanfou/favorites/:uid', require('./routes/fanfou/favorites')); -router.get('/fanfou/trends', require('./routes/fanfou/trends')); -router.get('/fanfou/public_timeline/:keyword', require('./routes/fanfou/public_timeline')); - -// ITSlide -router.get('/itslide/new', require('./routes/itslide/new')); - -// Remote Work -router.get('/remote-work/:caty?', require('./routes/remote-work/index')); - -// China Times -router.get('/chinatimes/:caty', require('./routes/chinatimes/index')); - -// TransferWise -router.get('/transferwise/pair/:source/:target', require('./routes/transferwise/pair')); - -// chocolatey -router.get('/chocolatey/software/:name?', require('./routes/chocolatey/software')); - -// Nyaa -router.get('/nyaa/search/:query?', require('./routes/nyaa/search')); - -// 片源网 -router.get('/pianyuan/:media?', require('./routes/pianyuan/app')); - -// ITHome -router.get('/ithome/:caty', require('./routes/ithome/index')); -router.get('/ithome/ranking/:type', require('./routes/ithome/ranking')); - -// 巴哈姆特 -router.get('/bahamut/creation/:author/:category?', require('./routes/bahamut/creation')); -router.get('/bahamut/creation_index/:category?/:subcategory?/:type?', require('./routes/bahamut/creation_index')); - -// CentBrowser -router.get('/centbrowser/history', require('./routes/centbrowser/history')); - -// 755 -router.get('/755/user/:username', require('./routes/755/user')); - -// IKEA -router.get('/ikea/uk/new', require('./routes/ikea/uk/new')); -router.get('/ikea/uk/offer', require('./routes/ikea/uk/offer')); - -// Mastodon -router.get('/mastodon/timeline/:site/:only_media?', require('./routes/mastodon/timeline_local')); -router.get('/mastodon/remote/:site/:only_media?', require('./routes/mastodon/timeline_remote')); -router.get('/mastodon/account_id/:site/:account_id/statuses/:only_media?', require('./routes/mastodon/account_id')); -router.get('/mastodon/acct/:acct/statuses/:only_media?', require('./routes/mastodon/acct')); - -// Kernel Aliyun -router.get('/aliyun-kernel/index', require('./routes/aliyun-kernel/index')); - -// Vulture -router.get('/vulture/:tag/:excludetags?', require('./routes/vulture/index')); - -// xinwenlianbo -router.get('/xinwenlianbo/index', require('./routes/xinwenlianbo/index')); - -// Paul Graham - Essays -router.get('/blogs/paulgraham', require('./routes/blogs/paulgraham')); - -// invisionapp -router.get('/invisionapp/inside-design', require('./routes/invisionapp/inside-design')); - -// producthunt -router.get('/producthunt/today', require('./routes/producthunt/today')); - -// mlog.club -router.get('/mlog-club/topics/:node', require('./routes/mlog-club/topics')); -router.get('/mlog-club/projects', require('./routes/mlog-club/projects')); - -// Chrome 网上应用店 -router.get('/chrome/webstore/extensions/:id', require('./routes/chrome/extensions')); - -// RTHK -router.get('/rthk-news/:lang/:category', require('./routes/rthk-news/index')); - -// yahoo -router.get('/yahoo-news/:region/:category?', require('./routes/yahoo-news/index')); - -// Yahoo!テレビ -router.get('/yahoo-jp-tv/:query', require('./routes/yahoo-jp-tv/index')); - -// 白鲸出海 -router.get('/baijing', require('./routes/baijing')); - -// 低端影视 -router.get('/ddrk/update/:name/:season?', require('./routes/ddrk/index')); -router.get('/ddrk/tag/:tag', require('./routes/ddrk/list')); -router.get('/ddrk/category/:category', require('./routes/ddrk/list')); -router.get('/ddrk/index', require('./routes/ddrk/list')); - -// avgle -router.get('/avgle/videos/:order?/:time?/:top?', require('./routes/avgle/videos.js')); -router.get('/avgle/search/:keyword/:order?/:time?/:top?', require('./routes/avgle/videos.js')); - -// 公主链接公告 -router.get('/pcr/news', require('./routes/pcr/news')); -router.get('/pcr/news-tw', require('./routes/pcr/news-tw')); -router.get('/pcr/news-cn', require('./routes/pcr/news-cn')); - -// project-zero issues -router.get('/project-zero-issues', require('./routes/project-zero-issues/index')); - -// 平安银河实验室 -router.get('/galaxylab', require('./routes/galaxylab/index')); - -// NOSEC 安全讯息平台 -router.get('/nosec/:keykind?', require('./routes/nosec/index')); - -// Hex-Rays News -router.get('/hex-rays/news', require('./routes/hex-rays/index')); - -// 新趣集 -router.get('/xinquji/today', require('./routes/xinquji/today')); -router.get('/xinquji/today/internal', require('./routes/xinquji/internal')); - -// 英中协会 -router.get('/gbcc/trust', require('./routes/gbcc/trust')); - -// Associated Press -router.get('/apnews/topics/:topic', require('./routes/apnews/topics')); - -// CBC -router.get('/cbc/topics/:topic?', require('./routes/cbc/topics')); - -// discuz -router.get('/discuz/:ver([7|x])/:cid([0-9]{2})/:link(.*)', require('./routes/discuz/discuz')); -router.get('/discuz/:ver([7|x])/:link(.*)', require('./routes/discuz/discuz')); -router.get('/discuz/:link(.*)', require('./routes/discuz/discuz')); - -// China Dialogue 中外对话 -router.get('/chinadialogue/topics/:topic', require('./routes/chinadialogue/topics')); -router.get('/chinadialogue/:column', require('./routes/chinadialogue/column')); - -// 人民日报社 国际金融报 -router.get('/ifnews/:cid', require('./routes/ifnews/column')); - -// Scala Blog -router.get('/scala/blog/:part?', require('./routes/scala-blog/scala-blog')); - -// Minecraft Java版游戏更新 -router.get('/minecraft/version', require('./routes/minecraft/version')); - -// 微信更新日志 -router.get('/weixin/miniprogram/release', require('./routes/tencent/wechat/miniprogram/framework')); // 基础库更新日志 -router.get('/weixin/miniprogram/framework', require('./routes/tencent/wechat/miniprogram/framework')); // 基础库更新日志 -router.get('/weixin/miniprogram/devtools', require('./routes/tencent/wechat/miniprogram/devtools')); // 开发者工具更新日志 -router.get('/weixin/miniprogram/wxcloud/:caty?', require('./routes/tencent/wechat/miniprogram/wxcloud')); // 云开发更新日志 - -// 武汉肺炎疫情动态 -router.get('/coronavirus/caixin', require('./routes/coronavirus/caixin')); -router.get('/coronavirus/dxy/data/:province?/:city?', require('./routes/coronavirus/dxy-data')); -router.get('/coronavirus/dxy', require('./routes/coronavirus/dxy')); -router.get('/coronavirus/scmp', require('./routes/coronavirus/scmp')); -router.get('/coronavirus/nhc', require('./routes/coronavirus/nhc')); -router.get('/coronavirus/mogov-2019ncov/:lang', require('./routes/coronavirus/mogov-2019ncov')); -router.get('/coronavirus/qq/fact', require('./routes/tencent/factcheck')); -router.get('/coronavirus/sg-moh', require('./routes/coronavirus/sg-moh')); - -// 南京林业大学教务处 -router.get('/njfu/jwc/:category?', require('./routes/universities/njfu/jwc')); - -// 日本経済新聞 -router.get('/nikkei/index', require('./routes/nikkei/index')); - -// MQube -router.get('/mqube/user/:user', require('./routes/mqube/user')); -router.get('/mqube/tag/:tag', require('./routes/mqube/tag')); -router.get('/mqube/latest', require('./routes/mqube/latest')); -router.get('/mqube/top', require('./routes/mqube/top')); - -// Letterboxd -router.get('/letterboxd/user/diary/:username', require('./routes/letterboxd/userdiary')); -router.get('/letterboxd/user/followingdiary/:username', require('./routes/letterboxd/followingdiary')); - -// 网易大神 -router.get('/netease/ds/:id', require('./routes/netease/ds')); - -// javlibrary -router.get('/javlibrary/users/:uid/:utype', require('./routes/javlibrary/users')); -router.get('/javlibrary/videos/:vtype', require('./routes/javlibrary/videos')); -router.get('/javlibrary/stars/:sid', require('./routes/javlibrary/stars')); -router.get('/javlibrary/bestreviews', require('./routes/javlibrary/bestreviews')); - -// Last.FM -router.get('/lastfm/recent/:user', require('./routes/lastfm/recent')); -router.get('/lastfm/loved/:user', require('./routes/lastfm/loved')); -router.get('/lastfm/top/:country?', require('./routes/lastfm/top')); - -// piapro -router.get('/piapro/user/:pid', require('./routes/piapro/user')); -router.get('/piapro/public/:type/:tag?/:category?', require('./routes/piapro/public')); - -// 凤凰网 -router.get('/ifeng/feng/:id/:type', require('./routes/ifeng/feng')); - -// 网易公开课 -router.get('/open163/vip', require('./routes/netease/open/vip')); -router.get('/open163/latest', require('./routes/netease/open/latest')); - -// 第一版主 -router.get('/novel/d1bz/:category/:id', require('./routes/d1bz/novel')); - -// 爱下电子书 -router.get('/axdzs/:id1/:id2', require('./routes/novel/axdzs')); - -// HackerOne -router.get('/hackerone/hacktivity', require('./routes/hackerone/hacktivity')); - -// 奶牛关 -router.get('/cowlevel/element/:id', require('./routes/cowlevel/element')); - -// 2048 -router.get('/2048/bbs/:fid', require('./routes/2048/bbs')); - -// Google News -router.get('/google/news/:category/:locale', require('./routes/google/news')); - -// 虛詞 -router.get('/p-articles/section/:section', require('./routes/p-articles/section')); -router.get('/p-articles/contributors/:author', require('./routes/p-articles/contributors')); - -// finviz - -router.get('/finviz/news/:ticker', require('./routes/finviz/news')); - -// 好好住 -router.get('/haohaozhu/whole-house/:keyword?', require('./routes/haohaozhu/whole-house')); -router.get('/haohaozhu/discover/:keyword?', require('./routes/haohaozhu/discover')); - -// 东北大学 -router.get('/neu/news/:type', require('./routes/universities/neu/news')); - -// 快递100 -router.get('/kuaidi100/track/:number/:id/:phone?', require('./routes/kuaidi100/index')); -router.get('/kuaidi100/company', require('./routes/kuaidi100/supported_company')); - -// 稻草人书屋 -router.get('/dcrsw/:name/:count?', require('./routes/novel/dcrsw')); - -// 魔法纪录 -router.get('/magireco/announcements', require('./routes/magireco/announcements')); -router.get('/magireco/event_banner', require('./routes/magireco/event_banner')); - -// wolley -router.get('/wolley', require('./routes/wolley/index')); -router.get('/wolley/user/:id', require('./routes/wolley/user')); -router.get('/wolley/host/:host', require('./routes/wolley/host')); - -// 西安交大 -router.get('/xjtu/gs/tzgg', require('./routes/universities/xjtu/gs/tzgg')); -router.get('/xjtu/dean/:subpath+', require('./routes/universities/xjtu/dean')); -router.get('/xjtu/international/:subpath+', require('./routes/universities/xjtu/international')); - -// booksource -router.get('/booksource', require('./routes/booksource/index')); - -// ku -router.get('/ku/:name?', require('./routes/ku/index')); - -// 我有一片芝麻地 -router.get('/blogs/hedwig/:type', require('./routes/blogs/hedwig')); - -// LoveHeaven -router.get('/loveheaven/update/:slug', require('./routes/loveheaven/update')); - -// 拉勾 -router.get('/lagou/jobs/:position/:city', require('./routes/lagou/jobs')); - -// 扬州大学 -router.get('/yzu/home/:type', require('./routes/universities/yzu/home')); -router.get('/yzu/yjszs/:type', require('./routes/universities/yzu/yjszs')); - -// 国家自然科学基金委员会 -router.get('/nsfc/news/:type?', require('./routes/nsfc/news')); - -// 德国新闻社卫健新闻 -router.get('/krankenkassen', require('./routes/krankenkassen')); - -// 桂林航天工业学院 -router.get('/guat/news/:type?', require('./routes/guat/news')); - -// 国家留学网 -router.get('/csc/notice/:type?', require('./routes/csc/notice')); - -// LearnKu -router.get('/learnku/:community/:category?', require('./routes/learnku/topic')); - -// NEEA -router.get('/neea/:type', require('./routes/neea')); - -// 中国农业大学 -router.get('/cauyjs', require('./routes/universities/cauyjs/cauyjs')); - -// 南方科技大学 -router.get('/sustyjs', require('./routes/universities/sustyjs/sustyjs')); - -// 广州大学 -router.get('/gzyjs', require('./routes/universities/gzyjs/gzyjs')); - -// 深圳大学 -router.get('/szuyjs', require('./routes/universities/szuyjs/szuyjs')); - -// 中国传媒大学 -router.get('/cucyjs', require('./routes/universities/cucyjs/cucyjs')); - -// 中国农业大学信电学院 -router.get('/cauele', require('./routes/universities/cauyjs/cauyjs')); - -// moxingfans -router.get('/moxingfans', require('./routes/moxingfans')); - -// Chiphell -router.get('/chiphell/forum/:forumId?', require('./routes/chiphell/forum')); - -// 华东理工大学研究生院 -router.get('/ecustyjs', require('./routes/universities/ecustyjs/ecustyjs')); - -// 同济大学研究生院 -router.get('/tjuyjs', require('./routes/universities/tjuyjs/tjuyjs')); - -// 中国石油大学研究生院 -router.get('/upcyjs', require('./routes/universities/upcyjs/upcyjs')); - -// 中国海洋大学研究生院 -router.get('/outyjs', require('./routes/universities/outyjs/outyjs')); - -// 中科院人工智能所 -router.get('/zkyai', require('./routes/universities/zkyai/zkyai')); - -// 中科院自动化所 -router.get('/zkyyjs', require('./routes/universities/zkyyjs/zkyyjs')); - -// 中国海洋大学信电学院 -router.get('/outele', require('./routes/universities/outele/outele')); - -// 华东师范大学研究生院 -router.get('/ecnuyjs', require('./routes/universities/ecnuyjs/ecnuyjs')); - -// 考研帮调剂信息 -router.get('/kaoyan', require('./routes/kaoyan/kaoyan')); - -// 华中科技大学研究生院 -router.get('/hustyjs', require('./routes/universities/hustyjs/hustyjs')); - -// 华中师范大学研究生院 -router.get('/ccnuyjs', require('./routes/universities/ccnu/ccnuyjs')); - -// 华中师范大学计算机学院 -router.get('/ccnucs', require('./routes/universities/ccnu/ccnucs')); - -// 华中师范大学伍论贡学院 -router.get('/ccnuwu', require('./routes/universities/ccnu/ccnuwu')); - -// WEEX -router.get('/weexcn/news/:typeid', require('./routes/weexcn/index')); - -// 天天基金 -router.get('/eastmoney/user/:uid', require('./routes/eastmoney/user')); - -// 紳士漫畫 -router.get('/ssmh', require('./routes/ssmh')); - -// 武昌首义学院 -router.get('/wsyu/news/:type?', require('./routes/universities/wsyu/news')); - -// 华南师范大学研究生学院 -router.get('/scnuyjs', require('./routes/universities/scnu/scnuyjs')); - -// 华南师范大学软件学院 -router.get('/scnucs', require('./routes/universities/scnu/scnucs')); - -// 华南理工大学研究生院 -router.get('/scutyjs', require('./routes/universities/scut/scutyjs')); - -// 华南农业大学研究生院通知公告 -router.get('/scauyjs', require('./routes/universities/scauyjs/scauyjs')); - -// 北京大学研究生招生网通知公告 -router.get('/pkuyjs', require('./routes/universities/pku/pkuyjs')); - -// 北京理工大学研究生通知公告 -router.get('/bityjs', require('./routes/universities/bit/bityjs')); - -// 湖南科技大学教务处 -router.get('/hnust/jwc', require('./routes/universities/hnust/jwc/index')); -router.get('/hnust/computer', require('./routes/universities/hnust/computer/index')); -router.get('/hnust/art', require('./routes/universities/hnust/art/index')); -router.get('/hnust/graduate/:type?', require('./routes/universities/hnust/graduate/index')); - -// 西南交通大学 -router.get('/swjtu/tl/news', require('./routes/swjtu/tl/news')); - -// AGE动漫 -router.get('/agefans/detail/:id', require('./routes/agefans/detail')); - -// Checkra1n -router.get('/checkra1n/releases', require('./routes/checkra1n/releases')); - -// 四川省科学技术厅 -router.get('/sckjt/news/:type?', require('./routes/sckjt/news')); - -// 绝对领域 -router.get('/jdlingyu/:type', require('./routes/jdlingyu/index')); - -// Hi, DIYgod -router.get('/blogs/diygod/animal-crossing', require('./routes/blogs/diygod/animal-crossing')); -router.get('/blogs/diygod/gk', require('./routes/blogs/diygod/gk')); - -// 湖北工业大学 -router.get('/hbut/news/:type', require('./routes/universities/hbut/news')); -router.get('/hbut/cs/:type', require('./routes/universities/hbut/cs')); - -// acwifi -router.get('/acwifi', require('./routes/acwifi')); - -// a岛匿名版 -router.get('/adnmb/:pid', require('./routes/adnmb/index')); - -// MIT科技评论 -router.get('/mittrchina/article', require('./routes/mittrchina')); - -// 消费者报道 -router.get('/ccreports/article', require('./routes/ccreports')); - -// iYouPort -router.get('/iyouport/article', require('./routes/iyouport')); -router.get('/iyouport/:category?', require('./routes/iyouport')); - -// girlimg -router.get('/girlimg/album/:tag?/:mode?', require('./routes/girlimg/album')); - -// etoland -router.get('/etoland/:bo_table', require('./routes/etoland/board')); - -// 辽宁工程技术大学教务在线公告 -router.get('/lntu/jwnews', require('./routes/universities/lntu/jwnews')); - -// 51voa -router.get('/51voa/:channel', require('./routes/51voa/channel')); - -// zhuixinfan -router.get('/zhuixinfan/list', require('./routes/zhuixinfan/list')); - -// scoresaber -router.get('/scoresaber/user/:id', require('./routes/scoresaber/user')); - -// blur-studio -router.get('/blur-studio', require('./routes/blur-studio/index')); - -// method-studios -router.get('/method-studios/:menu?', require('./routes/method-studios/index')); - -// blow-studio -router.get('/blow-studio', require('./routes/blow-studio/work')); - -// axis-studios -router.get('/axis-studios/:type/:tag?', require('./routes/axis-studios/work')); - -// 人民邮电出版社 -router.get('/ptpress/book/:type?', require('./routes/ptpress/book')); - -// uniqlo styling book -router.get('/uniqlo/stylingbook/:category?', require('./routes/uniqlo/stylingbook')); - -// 本地宝焦点资讯 -router.get('/bendibao/news/:city', require('./routes/bendibao/news')); - -// unit-image -router.get('/unit-image/films/:type?', require('./routes/unit-image/films')); - -// digic-picture -router.get('/digic-pictures/:menu/:tags?', require('./routes/digic-pictures/index')); - -// cve.mitre.org -router.get('/cve/search/:keyword', require('./routes/cve/search')); - -// Xposed Module Repository -router.get('/xposed/module/:mod', require('./routes/xposed/module')); - -// Microsoft Edge -router.get('/edge/addon/:crxid', require('./routes/edge/addon')); - -// 上海立信会计金融学院 -router.get('/slu/tzgg/:id', require('./routes/universities/slu/tzgg')); -router.get('/slu/jwc/:id', require('./routes/universities/slu/jwc')); -router.get('/slu/tyyjkxy/:id', require('./routes/universities/slu/tyyjkxy')); -router.get('/slu/kjxy/:id', require('./routes/universities/slu/kjxy')); -router.get('/slu/xsc/:id', require('./routes/universities/slu/xsc')); -router.get('/slu/csggxy/:id', require('./routes/universities/slu/csggxy')); - -// Ruby China -router.get('/ruby-china/topics/:type?', require('./routes/ruby-china/topics')); -router.get('/ruby-china/jobs', require('./routes/ruby-china/jobs')); - -// 中国人事考试网 -router.get('/cpta/notice', require('./routes/cpta/notice')); - -// 广告网 -router.get('/adquan/:type?', require('./routes/adquan/index')); - -// 齐鲁晚报 -router.get('/qlwb/news', require('./routes/qlwb/news')); -router.get('/qlwb/city/:city', require('./routes/qlwb/city')); - -// 蜻蜓FM -router.get('/qingting/channel/:id', require('./routes/qingting/channel')); - -// 金色财经 -router.get('/jinse/lives', require('./routes/jinse/lives')); -router.get('/jinse/timeline', require('./routes/jinse/timeline')); -router.get('/jinse/catalogue/:caty', require('./routes/jinse/catalogue')); - -// deeplearning.ai -router.get('/deeplearningai/thebatch', require('./routes/deeplearningai/thebatch')); - -// Fate Grand Order -router.get('/fgo/news', require('./routes/fgo/news')); - -// RF技术社区 -router.get('/rf/article', require('./routes/rf/article')); - -// University of Massachusetts Amherst -router.get('/umass/amherst/ecenews', require('./routes/umass/amherst/ecenews')); -router.get('/umass/amherst/csnews', require('./routes/umass/amherst/csnews')); -router.get('/umass/amherst/ipoevents', require('./routes/umass/amherst/ipoevents')); -router.get('/umass/amherst/ipostories', require('./routes/umass/amherst/ipostories')); - -// 飘花电影网 -router.get('/piaohua/hot', require('./routes/piaohua/hot')); - -// 快媒体 -router.get('/kuai', require('./routes/kuai/index')); -router.get('/kuai/:id', require('./routes/kuai/id')); - -// 生物帮 -router.get('/biobio/:id', require('./routes/biobio/index')); -router.get('/biobio/:column/:id', require('./routes/biobio/others')); - -// 199it -router.get('/199it', require('./routes/199it/index')); -router.get('/199it/category/:caty', require('./routes/199it/category')); -router.get('/199it/tag/:tag', require('./routes/199it/tag')); - -// 唧唧堂 -router.get('/jijitang/article/:id', require('./routes/jijitang/article')); -router.get('/jijitang/publication', require('./routes/jijitang/publication')); - -// 新闻联播 -router.get('/xwlb', require('./routes/xwlb/index')); - -// 网易新闻专栏 -router.get('/netease/news/special/:type?', require('./routes/netease/news/special')); - -// 端传媒 -router.get('/initium/:type?/:language?', require('./routes/initium/full')); - -// Grub Street -router.get('/grubstreet', require('./routes/grubstreet/index')); - -// 漫画堆 -router.get('/manhuadui/manhua/:name/:serial?', require('./routes/manhuadui/manhua')); - -// 风之漫画 -router.get('/fzdm/manhua/:id', require('./routes/fzdm/manhua')); - -// Aljazeera 半岛网 -router.get('/aljazeera/news', require('./routes/aljazeera/news')); - -// CFD indices dividend adjustment -router.get('/cfd/gbp_div', require('./routes/cfd/gbp_div')); - -// 中国人民银行 -router.get('/pbc/goutongjiaoliu', require('./routes/pbc/goutongjiaoliu')); -router.get('/pbc/tradeAnnouncement', require('./routes/pbc/tradeAnnouncement')); - -// Monotype -router.get('/monotype/article', require('./routes/monotype/article')); - -// Stork -router.get('/stork/keyword/:trackID/:displayKey', require('./routes/stork/keyword')); - -// 致美化 -router.get('/zhutix/latest', require('./routes/zhutix/latest')); - -// arXiv -router.get('/arxiv/:query', require('./routes/arxiv/query')); - -// 生物谷 -router.get('/shengwugu/:uid?', require('./routes/shengwugu/index')); - -// 环球律师事务所文章 -router.get('/law/hq', require('./routes/law/hq')); - -// 海问律师事务所文章 -router.get('/law/hw', require('./routes/law/hw')); - -// 国枫律师事务所文章 -router.get('/law/gf', require('./routes/law/gf')); - -// 通商律师事务所文章 -router.get('/law/ts', require('./routes/law/ts')); - -// 锦天城律师事务所文章 -router.get('/law/jtc', require('./routes/law/jtc')); - -// 中伦律师事务所文章 -router.get('/law/zl', require('./routes/law/zl')); - -// 君合律师事务所文章 -router.get('/law/jh', require('./routes/law/jh')); - -// 德恒律师事务所文章 -router.get('/law/dh', require('./routes/law/dh')); - -// 金诚同达律师事务所文章 -router.get('/law/jctd', require('./routes/law/jctd')); - -// Mobilism -router.get('/mobilism/release', require('./routes/mobilism/release')); - -// 三星盖乐世社区 -router.get('/samsungmembers/latest', require('./routes/samsungmembers/latest')); - -// 东莞教研网 -router.get('/dgjyw/:type', require('./routes/dgjyw/index')); - -// 中国信息通信研究院 -router.get('/gov/caict/bps', require('./routes/gov/caict/bps')); -router.get('/gov/caict/qwsj', require('./routes/gov/caict/qwsj')); -router.get('/gov/caict/caictgd', require('./routes/gov/caict/caictgd')); - -// 中证网 -router.get('/cs/news/:caty', require('./routes/cs/news')); - -// 财联社 -router.get('/cls/telegraph', require('./routes/cls/telegraph')); -router.get('/cls/depth', require('./routes/cls/depth')); -router.get('/cls/depth/:caty', require('./routes/cls/depth')); - -// hentai-cosplays -router.get('/hentai-cosplays/:type?/:name?', require('./routes/hentai-cosplays/hentai-cosplays')); -router.get('/porn-images-xxx/:type?/:name?', require('./routes/hentai-cosplays/porn-images-xxx')); - -// dcinside -router.get('/dcinside/board/:id', require('./routes/dcinside/board')); - -// 企鹅电竞 -router.get('/egameqq/room/:id', require('./routes/tencent/egame/room')); - -// 国家税务总局 -router.get('/gov/chinatax/latest', require('./routes/gov/chinatax/latest')); - -// 荔枝FM -router.get('/lizhi/user/:id', require('./routes/lizhi/user')); - -// 富途牛牛 -router.get('/futunn/highlights', require('./routes/futunn/highlights')); - -// 外接大脑 -router.get('/waijiedanao/article/:caty', require('./routes/waijiedanao/article')); - -// 即刻 -router.get('/jike/topic/:id', require('./routes/jike/topic')); -router.get('/jike/topic/text/:id', require('./routes/jike/topicText')); -router.get('/jike/user/:id', require('./routes/jike/user')); - -// 网易新闻 -router.get('/netease/news/rank/:category?/:type?/:time?', require('./routes/netease/news/rank')); - -// Boston.com -router.get('/boston/:tag?', require('./routes/boston/index')); - -// 中国邮政速递物流 -router.get('/ems/news', require('./routes/ems/news')); - -// 场库 -router.get('/changku', require('./routes/changku/index')); -// SCMP -router.get('/scmp/:category_id', require('./routes/scmp/index')); - -// 上海市生态环境局 -router.get('/gov/shanghai/sthj', require('./routes/gov/shanghai/sthj')); - -// 才符 -router.get('/91ddcc/user/:user', require('./routes/91ddcc/user')); -router.get('/91ddcc/stage/:stage', require('./routes/91ddcc/stage')); - -// BookwalkerTW热门新书 -router.get('/bookwalkertw/news', require('./routes/bookwalkertw/news')); - -// Chicago Tribune -router.get('/chicagotribune/:category/:subcategory?', require('./routes/chicagotribune/index')); - -// Amazfit Watch Faces -router.get('/amazfitwatchfaces/fresh/:model/:type?/:lang?', require('./routes/amazfitwatchfaces/fresh')); -router.get('/amazfitwatchfaces/updated/:model/:type?/:lang?', require('./routes/amazfitwatchfaces/updated')); -router.get('/amazfitwatchfaces/top/:model/:type?/:time?/:sortBy?/:lang?', require('./routes/amazfitwatchfaces/top')); -router.get('/amazfitwatchfaces/search/:model/:keyword?/:sortBy?', require('./routes/amazfitwatchfaces/search')); - -// 猫耳FM -router.get('/missevan/drama/:id', require('./routes/missevan/drama')); - -// Go语言爱好者周刊 -router.get('/go-weekly', require('./routes/go-weekly')); - -// popiask提问箱 -router.get('/popiask/:sharecode/:pagesize?', require('./routes/popiask/questions')); - -// AMD -router.get('/amd/graphicsdrivers/:id/:rid?', require('./routes/amd/graphicsdrivers')); - -// 二柄APP -router.get('/erbingapp/news', require('./routes/erbingapp/news')); - -// 电商报 -router.get('/dsb/area/:area', require('./routes/dsb/area')); - -// 靠谱新闻 -router.get('/kaopunews/all', require('./routes/kaopunews/all')); - -// Reuters -router.get('/reuters/theWire', require('./routes/reuters/theWire')); - -// 格隆汇 -router.get('/gelonghui/user/:id', require('./routes/gelonghui/user')); -router.get('/gelonghui/subject/:id', require('./routes/gelonghui/subject')); -router.get('/gelonghui/keyword/:keyword', require('./routes/gelonghui/keyword')); - -// 光谷社区 -router.get('/guanggoo/:caty', require('./routes/guanggoo/index')); - -// 万维读者 -router.get('/creaders/headline', require('./routes/creaders/headline')); - -// 金山词霸 -router.get('/iciba/:days?/:img_type?', require('./routes/iciba/index')); - -// 重庆市两江新区信息公开网 -router.get('/gov/chongqing/ljxq/dwgk', require('./routes/gov/chongqing/ljxq/dwgk')); -router.get('/gov/chongqing/ljxq/zwgk/:caty', require('./routes/gov/chongqing/ljxq/zwgk')); - -// 国家突发事件预警信息发布网 -router.get('/12379', require('./routes/12379/index')); - -// 鸟哥笔记 -router.get('/ngbj/today', require('./routes/niaogebiji/today')); -router.get('/ngbj/cat/:cat', require('./routes/niaogebiji/cat')); - -// 梅花网 -router.get('/meihua/shots/:caty', require('./routes/meihua/shots')); -router.get('/meihua/article/:caty', require('./routes/meihua/article')); - -// 看点快报 -router.get('/kuaibao', require('./routes/kuaibao/index')); - -// SocialBeta -router.get('/socialbeta/home', require('./routes/socialbeta/home')); -router.get('/socialbeta/hunt', require('./routes/socialbeta/hunt')); - -// 东方我乐多丛志 -router.get('/touhougarakuta/:language/:type', require('./routes/touhougarakuta')); - -// 猎趣TV -router.get('/liequtv/room/:id', require('./routes/liequtv/room')); - -// Behance -router.get('/behance/:user', require('./routes/behance/index')); - -// furstar.jp -router.get('/furstar/characters/:lang?', require('./routes/furstar/index')); -router.get('/furstar/artists/:lang?', require('./routes/furstar/artists')); -router.get('/furstar/archive/:lang?', require('./routes/furstar/archive')); - -// 北京物资学院 -router.get('/bwu/news', require('./routes/universities/bwu/news')); - -// Picuki -router.get('/picuki/profile/:id/:displayVideo?', require('./routes/picuki/profile')); - -// 新榜 -router.get('/newrank/wechat/:wxid', require('./routes/newrank/wechat')); -router.get('/newrank/douyin/:dyid', require('./routes/newrank/douyin')); - -// 漫小肆 -router.get('/manxiaosi/book/:id', require('./routes/manxiaosi/book')); - -// 吉林大学校内通知 -router.get('/jlu/oa', require('./routes/universities/jlu/oa')); - -// 小宇宙 -router.get('/xiaoyuzhou', require('./routes/xiaoyuzhou/pickup')); - -// 合肥工业大学 -router.get('/hfut/tzgg', require('./routes/universities/hfut/tzgg')); - -// Darwin Awards -router.get('/darwinawards/all', require('./routes/darwinawards/articles')); - -// 四川职业技术学院 -router.get('/scvtc/xygg', require('./routes/universities/scvtc/xygg')); - -// OneJAV -router.get('/onejav/:type/:key?', require('./routes/onejav/one')); - -// CuriousCat -router.get('/curiouscat/user/:id', require('./routes/curiouscat/user')); - -// Telecompaper -router.get('/telecompaper/news/:caty/:year?/:country?/:type?/:keyword?', require('./routes/telecompaper/news')); - -// 水木社区 -router.get('/newsmth/account/:id', require('./routes/newsmth/account')); -router.get('/newsmth/section/:section', require('./routes/newsmth/section')); - -// Kotaku -router.get('/kotaku/story/:type', require('./routes/kotaku/story')); - -// 梅斯医学 -router.get('/medsci/recommend', require('./routes/medsci/recommend')); - -// Wallpaperhub -router.get('/wallpaperhub', require('./routes/wallpaperhub/index')); - -// 悟空问答 -router.get('/wukong/user/:id/:type?', require('./routes/wukong/user')); - -// 腾讯大数据 -router.get('/tencent/bigdata', require('./routes/tencent/bigdata/index')); - -// 搜韵网 -router.get('/souyun/today', require('./routes/souyun/today')); - -// 生物谷 -router.get('/bioon/latest', require('./routes/bioon/latest')); - -// soomal -router.get('/soomal/topics/:category/:language?', require('./routes/soomal/topics')); - -// NASA -router.get('/nasa/apod', require('./routes/nasa/apod')); -router.get('/nasa/apod-ncku', require('./routes/nasa/apod-ncku')); -router.get('/nasa/apod-cn', require('./routes/nasa/apod-cn')); - -// 爱Q生活网 -router.get('/iqshw/latest', require('./routes/3k8/latest')); -router.get('/3k8/latest', require('./routes/3k8/latest')); - -// JustRun -router.get('/justrun', require('./routes/justrun/index')); - -// 上海电力大学 -router.get('/shiep/:type', require('./routes/universities/shiep/index')); - -// 福建新闻 -router.get('/fjnews/:city/:limit', require('./routes/fjnews/fznews')); -router.get('/fjnews/jjnews', require('./routes/fjnews/jjnews')); - -// 孔夫子旧书网 -router.get('/kongfz/people/:id', require('./routes/kongfz/people')); -router.get('/kongfz/shop/:id/:cat?', require('./routes/kongfz/shop')); - -// XMind -router.get('/xmind/mindmap/:lang?', require('./routes/xmind/mindmap')); - -// 小刀娱乐网 -router.get('/x6d/:id?', require('./routes/x6d/index')); - -// 思维导图社区 -router.get('/edrawsoft/mindmap/:classId?/:order?/:sort?/:lang?/:price?/:search?', require('./routes/edrawsoft/mindmap')); - -// 它惠网 -router.get('/tahui/rptlist', require('./routes/tahui/rptlist')); - -// Guiltfree -router.get('/guiltfree/onsale', require('./routes/guiltfree/onsale')); - -// 消费明鉴 -router.get('/mingjian', require('./routes/mingjian/index')); - -// hentaimama -router.get('/hentaimama/videos', require('./routes/hentaimama/videos')); - -// 无讼 -router.get('/itslaw/judgements/:conditions', require('./routes/itslaw/judgements')); - -// 文学城 -router.get('/wenxuecity/blog/:id', require('./routes/wenxuecity/blog')); -router.get('/wenxuecity/bbs/:cat/:elite?', require('./routes/wenxuecity/bbs')); -router.get('/wenxuecity/hot/:cid', require('./routes/wenxuecity/hot')); - -// 不安全 -router.get('/buaq', require('./routes/buaq/index')); - -// 快出海 -router.get('/kchuhai', require('./routes/kchuhai/index')); - -// i春秋资讯 -router.get('/ichunqiu', require('./routes/ichunqiu/index')); - -// 冰山博客 -router.get('/bsblog123', require('./routes/bsblog123/index')); - -// 纳威安全导航 -router.get('/navisec', require('./routes/navisec/index')); - -// 安全师 -router.get('/secshi', require('./routes/secshi/index')); - -// 出海笔记 -router.get('/chuhaibiji', require('./routes/chuhaibiji/index')); - -// 建宁闲谈 -router.get('/blogs/jianning', require('./routes/blogs/jianning')); - -// 妖火网 -router.get('/yaohuo/:type?', require('./routes/yaohuo/index')); - -// 互动吧 -router.get('/hudongba/:city/:id', require('./routes/hudongba/index')); - -// 差评 -router.get('/chaping/banner', require('./routes/chaping/banner')); -router.get('/chaping/news/:caty?', require('./routes/chaping/news')); - -// 飞雪娱乐网 -router.get('/feixuew/:id?', require('./routes/feixuew/index')); - -// 1X -router.get('/1x/:type?/:caty?', require('./routes/1x/index')); - -// GQ -router.get('/gq/tw/:caty?/:subcaty?', require('./routes/gq/tw/index')); - -// 泉州市跨境电子商务协会 -router.get('/qzcea/:caty?', require('./routes/qzcea/index')); - -// 福利年 -router.get('/fulinian/:caty?', require('./routes/fulinian/index')); - -// CGTN -router.get('/cgtn/most/:type?/:time?', require('./routes/cgtn/most')); - -// AppSales -router.get('/appsales/:caty?/:time?', require('./routes/appsales/index')); - -// CGTN -router.get('/cgtn/top', require('./routes/cgtn/top')); - -// 读卖新闻 -router.get('/yomiuri/:category?', require('./routes/yomiuri/news')); - -// 巴哈姆特 -// GNN新闻 -router.get('/gamer/gnn/:category?', require('./routes/gamer/gnn_index')); - -module.exports = router; diff --git a/lib/routes/bbc/utils.js b/lib/routes/bbc/utils.js index ad669dc1c2..8b3122d7d7 100644 --- a/lib/routes/bbc/utils.js +++ b/lib/routes/bbc/utils.js @@ -76,6 +76,11 @@ const ProcessFeed = ($, link) => { content = $('div.story-body'); } + if (content.length === 0) { + // chinese version has different structure + content = $('main[role="main"]'); + } + // remove useless DOMs content.find('div.bbccom_slot, .off-screen, .embed-report-link').each((i, e) => { $(e).remove(); diff --git a/lib/routes/caixin/article.js b/lib/routes/caixin/article.js index 800e3bfa85..29fd6d70a0 100644 --- a/lib/routes/caixin/article.js +++ b/lib/routes/caixin/article.js @@ -3,7 +3,11 @@ const got = require('@/utils/got'); module.exports = async (ctx) => { const response = await got({ method: 'get', - url: 'https://mappsv5.caixin.com/index_page_v5/index_page_1.json', + url: 'http://mapiv5.caixin.com//m/api/getWapIndexListByPage?page=1&callback=&_=1560140003179', + headers: { + Referer: `http://mapiv5.caixin.com/`, + Host: 'mapiv5.caixin.com', + }, }); const data = response.data.data.list; diff --git a/lib/routes/cctv/special.js b/lib/routes/cctv/special.js new file mode 100644 index 0000000000..1abde6003b --- /dev/null +++ b/lib/routes/cctv/special.js @@ -0,0 +1,109 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + ctx.params.id = ctx.params.id || '315'; + + let rootUrl; + + if (ctx.params.id === '315') { + rootUrl = `https://315.cctv.com`; + } else { + rootUrl = `https://news.cctv.com/special/${ctx.params.id}/index.shtml`; + } + + const response = await got({ + method: 'get', + url: rootUrl, + }); + + const $ = cheerio.load(response.data); + const list = $('h3>a, h4>a') + .slice(0, 10) + .map((_, item) => { + item = $(item); + return { + title: item.text(), + link: item.attr('href'), + }; + }) + .get(); + + const items = await Promise.all( + list.map( + async (item) => + await ctx.cache.tryGet(item.link, async () => { + let date; + + if (item.link.indexOf('photo.cctv.com') > 0) { + const imageLink = item.link.split('.shtml')[0] + '.xml?randomNum=26'; + const imageResponse = await got({ + method: 'get', + url: imageLink, + }); + const images = cheerio.load(imageResponse.data); + + let description; + + item.description = ''; + + images('li') + .get() + .forEach((i) => { + i = images(i); + item.description += ``; + date = i.attr('time').replace(/年/g, '-').replace(/月/g, '-').replace(/日/g, ''); + description = i.html(); + }); + + item.description += `

${description}

`; + } else { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + const content = cheerio.load(detailResponse.data); + const match = detailResponse.data.match(/publishDate ="(.*)";/); + + if (match === null) { + let dateSpan; + + if (content('div.info span').html() !== null) { + dateSpan = content('div.info span').text(); + } else if (content('div.info1').html() !== null) { + dateSpan = content('div.info1').text().split(' | ')[1]; + } else { + dateSpan = content('span.time').text(); + } + + date = dateSpan.replace(/年/g, '-').replace(/月/g, '-').replace(/日/g, ''); + } else { + const dateString = match[1]; + date = `${dateString.slice(0, 4)}-${dateString.slice(4, 6)}-${dateString.slice(6, 8)} ${dateString.slice(8, 10)}:${dateString.slice(10, 12)}:${dateString.slice(12, 14)}`; + } + + if (content('#content_area').html() !== null) { + item.description = content('#content_area').html(); + } else if (content('div.cnt_bd').html() !== null) { + content('div.function,h1,h2').remove(); + item.description = content('div.cnt_bd').html(); + } else if (content('#text_area').html() !== null) { + item.description = content('#text_area').html(); + } else { + item.description = content('div.con').html(); + } + } + + item.pubDate = new Date(date + ' GMT+8').toUTCString(); + + return item; + }) + ) + ); + + ctx.state.data = { + title: `${$('title').text().split('_')[0]} - 新闻专题 - 央视网`, + link: rootUrl, + item: items, + }; +}; diff --git a/lib/routes/embassy/supportedList.js b/lib/routes/embassy/supportedList.js index 1a37e2e122..e2327ff6b7 100644 --- a/lib/routes/embassy/supportedList.js +++ b/lib/routes/embassy/supportedList.js @@ -147,6 +147,15 @@ module.exports = { }, }, }, + my: { + country: 'my', + countryCN: '马来西亚', + link: 'http://my.china-embassy.org/chn/zytz/', + list: 'div[class=nbox_ul] > ul a', + title: '#News_Body_Title', + description: '#News_Body_Txt_A', + pubDate: '#News_Body_Time', + }, sg: { country: 'sg', countryCN: '新加坡', diff --git a/lib/routes/github/follower.js b/lib/routes/github/follower.js index c87869cdf2..2121d3d915 100644 --- a/lib/routes/github/follower.js +++ b/lib/routes/github/follower.js @@ -42,6 +42,7 @@ module.exports = async (ctx) => { link: host, item: data.map((follower) => ({ title: `${follower.node.login} started following ${user}`, + author: follower.node.login, description: `${follower.node.login}
`, link: `https://github.com/${follower.node.login}`, })), diff --git a/lib/routes/github/pulls.js b/lib/routes/github/pulls.js index b711b54700..b97b745309 100644 --- a/lib/routes/github/pulls.js +++ b/lib/routes/github/pulls.js @@ -33,6 +33,7 @@ module.exports = async (ctx) => { link: host, item: data.map((item) => ({ title: item.title, + author: item.user.login, description: item.body ? md.render(item.body) : 'No description', pubDate: new Date(item.created_at).toUTCString(), link: `${link}/${item.number}`, diff --git a/lib/routes/github/search.js b/lib/routes/github/search.js index 9c5e861e59..8ed783bdd1 100644 --- a/lib/routes/github/search.js +++ b/lib/routes/github/search.js @@ -24,6 +24,7 @@ module.exports = async (ctx) => { const a = $(this).find('.f4.text-normal > a'); const single = { title: a.text(), + author: a.text().split('/')[0].trim(), link: host.concat(a.attr('href')), description: $(this).find('div p').text().trim(), }; diff --git a/lib/routes/github/star.js b/lib/routes/github/star.js index 1cb97c44dd..d44ea03bd3 100644 --- a/lib/routes/github/star.js +++ b/lib/routes/github/star.js @@ -43,6 +43,7 @@ module.exports = async (ctx) => { link: host, item: data.map((follower) => ({ title: `${follower.node.login} starred ${user}/${repo}`, + author: follower.node.login, description: `${follower.node.login}
`, link: `https://github.com/${follower.node.login}`, })), diff --git a/lib/routes/github/starred_repos.js b/lib/routes/github/starred_repos.js index 13ee4c2919..ffd1a6a32f 100644 --- a/lib/routes/github/starred_repos.js +++ b/lib/routes/github/starred_repos.js @@ -52,6 +52,7 @@ module.exports = async (ctx) => { description: `${user}’s starred repositories`, item: data.map((repo) => ({ title: `${user} starred ${repo.node.name}`, + author: user, description: `${repo.node.description === null ? 'no description' : repo.node.description}
primary language: ${ repo.node.primaryLanguage === null ? 'no primary language' : repo.node.primaryLanguage.name }
stargazers: ${repo.node.stargazers.totalCount}
`, diff --git a/lib/routes/github/trending.js b/lib/routes/github/trending.js index 9a44def32d..a2518e2302 100644 --- a/lib/routes/github/trending.js +++ b/lib/routes/github/trending.js @@ -29,6 +29,7 @@ module.exports = async (ctx) => { item = $(item); return { title: item.find('h1').text(), + author: item.find('h1').text().split('/')[0].trim(), description: `${item.find('.pr-4').text()}

Language: ${item.find('span[itemprop="programmingLanguage"]').text() || 'unknown'}
Star: ${item.find('.muted-link').eq(0).text()} diff --git a/lib/routes/gitlab/explore.js b/lib/routes/gitlab/explore.js index ca7d43f79e..6feb623481 100644 --- a/lib/routes/gitlab/explore.js +++ b/lib/routes/gitlab/explore.js @@ -26,6 +26,7 @@ module.exports = async (ctx) => { item = $(item); return { title: item.find('.project-full-name').text(), + author: item.find('.namespace-name').text().slice(0, -1).split('\n').join('').trim(), description: item.find('.description').text(), link: `https://gitlab.com${item.find('a.text-plain').attr('href')}`, }; diff --git a/lib/routes/gov/taiwan/mnd.js b/lib/routes/gov/taiwan/mnd.js new file mode 100644 index 0000000000..5bb84abcfe --- /dev/null +++ b/lib/routes/gov/taiwan/mnd.js @@ -0,0 +1,64 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const rootUrl = 'https://www.mnd.gov.tw'; + const currentUrl = `${rootUrl}/PublishTable.aspx?Types=即時軍事動態&title=國防消息`; + + const response = await got({ + method: 'get', + url: currentUrl, + }); + const $ = cheerio.load(response.data); + + const list = $('table.newstitles tbody tr') + .map((_, item) => { + item = $(item); + const a = item.find('a'); + const dateSplit = item.find('td.w-10').text().split('/'); + dateSplit[0] = (parseInt(dateSplit[0]) + 1911).toString(); + + return { + title: a.text(), + link: a.attr('id').replace(/_/g, '$'), + pubDate: new Date(dateSplit.join('-') + ' GMT+8').toUTCString(), + }; + }) + .get(); + + const items = await Promise.all( + list.map( + async (item) => + await ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'post', + url: currentUrl, + headers: { + Referer: 'https://www.mnd.gov.tw/', + }, + form: { + __EVENTTARGET: item.link, + __EVENTARGUMENT: '', + __VIEWSTATE: response.data.match(/id="__VIEWSTATE" value="(.*)" \/>/)[1], + __VIEWSTATEGENERATOR: response.data.match(/id="__VIEWSTATEGENERATOR" value="(.*)" \/>/)[1], + __EVENTVALIDATION: response.data.match(/id="__EVENTVALIDATION" value="(.*)" \/>/)[1], + TbSearch2: '', + TbSearch: '', + }, + }); + const content = cheerio.load(detailResponse.data); + + item.description = content('div.thisPages').html(); + item.link = content('form[name="aspnetForm"]').attr('action').replace('.', `${rootUrl}`); + + return item; + }) + ) + ); + + ctx.state.data = { + title: '即時軍事動態 - 中華民國國防部', + link: currentUrl, + item: items, + }; +}; diff --git a/lib/routes/gq/tw/index.js b/lib/routes/gq/tw/index.js index 4509bccfd6..1b2a67f248 100644 --- a/lib/routes/gq/tw/index.js +++ b/lib/routes/gq/tw/index.js @@ -40,11 +40,17 @@ module.exports = async (ctx) => { item.title = content('h1').text(); + const article = content('section[data-test-id="ArticleBodyContent"]').html(); + const gallery = content('section[data-test-id="GalleryImage"]').html(); + if (ctx.params.caty === 'video') { item.description = content('div[data-test-id="EmbedIframe"]').html() + content('p[data-test-id="DekText"]').parent().html(); item.pubDate = new Date(detailResponse.data.match(/pubDate":"(.*?)","channel/)[1]).toUTCString(); + } else if (gallery !== null) { + item.description = gallery; + item.pubDate = new Date(detailResponse.data.match(/pubDate":"(.*?)","items/)[1]).toUTCString(); } else { - item.description = content('section[data-test-id="ArticleBodyContent"]').html(); + item.description = article; item.pubDate = new Date(detailResponse.data.match(/pubDate":"(.*?)","publishedRevisions/)[1]).toUTCString(); } diff --git a/lib/routes/huxiu/utils.js b/lib/routes/huxiu/utils.js index bc871bc0d4..4d0af4ea4d 100644 --- a/lib/routes/huxiu/utils.js +++ b/lib/routes/huxiu/utils.js @@ -32,9 +32,19 @@ const ProcessFeed = async (list, cache) => { }); $('img.dialog_add_wxxy_qrcode_icon').remove(); + let description = ''; + + const videoMatch = response.data.match(/"hd_link":"(.*)","duration/); + if (videoMatch !== null) { + description += ``; + } + if ($('.top-img').html() !== null) { + description += $('.top-img').html(); + } + return { title: $('.article__title').text().trim(), - description: $('.article__top-img-video') + $('.article__content').html(), + description: description + $('.article__content').html(), pubDate: date($('.article__time').text(), 8), author: $('.author-info__username').text(), link, diff --git a/lib/routes/index.js b/lib/routes/index.js index 3688cbb719..22fb4f740a 100644 --- a/lib/routes/index.js +++ b/lib/routes/index.js @@ -71,56 +71,60 @@ module.exports = async (ctx) => { debug: [ config.nodeName ? { - name: 'node name', + name: 'Node Name', value: config.nodeName, } : null, { - name: 'git hash', + name: 'Git Hash', value: gitHash, }, { - name: 'request amount', + name: 'Request Amount', value: ctx.debug.request, }, { - name: 'request frequency', - value: ((ctx.debug.request / (stats.elapsed / 1000)) * 60).toFixed(3) + ' 次/分钟', + name: 'Request Frequency', + value: ((ctx.debug.request / (stats.elapsed / 1000)) * 60).toFixed(3) + ' times/minute', }, { - name: 'cache hit ratio', + name: 'Cache Hit Ratio', value: ctx.debug.request ? (ctx.debug.hitCache / ctx.debug.request).toFixed(3) : 0, }, { - name: 'memory usage', + name: 'ETag Matched', + value: ctx.debug.etag, + }, + { + name: 'Memory Usage', value: stats.memory / 1000000 + ' MB', }, { - name: 'CPU usage', + name: 'CPU Usage', value: stats.cpu + '%', }, { - name: 'run time', - value: (stats.elapsed / 3600000).toFixed(2) + ' 小时', + name: 'Run Time', + value: (stats.elapsed / 3600000).toFixed(2) + ' hour(s)', }, { - name: 'hot routes', + name: 'Hot Routes', value: hotRoutesValue, }, { - name: 'hot paths', + name: 'Hot Paths', value: hotPathsValue, }, { - name: 'hot IP', + name: 'Hot IP', value: hotIPsValue, }, { - name: 'hot error routes', + name: 'Hot Error Routes', value: hotErrorRoutesValue, }, { - name: 'hot error paths', + name: 'Hot Error Paths', value: hotErrorPathsValue, }, ], diff --git a/lib/routes/ithome/index.js b/lib/routes/ithome/index.js index 66a41d2263..7dc1a49df3 100644 --- a/lib/routes/ithome/index.js +++ b/lib/routes/ithome/index.js @@ -43,7 +43,7 @@ module.exports = async (ctx) => { }); const $ = cheerio.load(response.data); - const list = $('div.wrap_left_top div.mf div.new-list-1 li[class!="top"] span.title a') + const list = $('#list > div.fl > ul > li > div > h2 > a') .slice(0, 10) .map((_, item) => { item = $(item); @@ -60,16 +60,15 @@ module.exports = async (ctx) => { await ctx.cache.tryGet(item.link, async () => { const res = await got({ method: 'get', url: item.link }); const content = cheerio.load(res.data); - const post = content('div#con div.content'); - const paragraph = post.find('div#paragraph'); - paragraph.find('img[data-original]').each((_, ele) => { + const post = content('#paragraph'); + post.find('img[data-original]').each((_, ele) => { ele = $(ele); ele.attr('src', ele.attr('data-original')); ele.removeAttr('class'); ele.removeAttr('data-original'); }); - item.description = paragraph.html(); - item.pubDate = new Date(post.find('span#pubtime_baidu').text() + ' GMT+8').toUTCString(); + item.description = post.html(); + item.pubDate = new Date(content('#pubtime_baidu').text() + ' GMT+8').toUTCString(); return item; }) ) diff --git a/lib/routes/javdb/actors.js b/lib/routes/javdb/actors.js new file mode 100644 index 0000000000..0815709c5d --- /dev/null +++ b/lib/routes/javdb/actors.js @@ -0,0 +1,19 @@ +const utils = require('./utils'); + +module.exports = async (ctx) => { + ctx.params.filter = ctx.params.filter || ''; + + const currentUrl = `${utils.rootUrl}/actors/${ctx.params.id}?t=${ctx.params.filter}`; + + const filter = { + '': '', + p: '可播放', + s: '單體作品', + d: '可下載', + c: '含字幕', + }; + + const title = `JavDB${filter[ctx.params.filter] === '' ? '' : ` - ${filter[ctx.params.filter]}`} `; + + ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); +}; diff --git a/lib/routes/javdb/home.js b/lib/routes/javdb/home.js new file mode 100644 index 0000000000..8d49953c30 --- /dev/null +++ b/lib/routes/javdb/home.js @@ -0,0 +1,32 @@ +const utils = require('./utils'); + +module.exports = async (ctx) => { + ctx.params.caty = ctx.params.caty || 'censored'; + ctx.params.sort = ctx.params.sort || '2'; + ctx.params.filter = ctx.params.filter || '1'; + + const currentUrl = `${utils.rootUrl}/${ctx.params.caty === 'censored' ? '' : ctx.params.caty}?vft=${ctx.params.filter}&vst=${ctx.params.sort}`; + + const category = { + censored: '有碼', + uncensored: '無碼', + western: '歐美', + fc2: 'FC2', + }; + + const filter = { + 0: '', + 1: '可下载', + 2: '含字幕', + 3: '含短評', + }; + + const sort = { + 1: '发布日期排序', + 2: '磁鏈更新排序', + }; + + const title = `${category[ctx.params.caty]} - JavDB - ${filter[ctx.params.filter] === '' ? '|' : `${filter[ctx.params.filter]} | `}${sort[ctx.params.sort]}`; + + ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); +}; diff --git a/lib/routes/javdb/makers.js b/lib/routes/javdb/makers.js new file mode 100644 index 0000000000..c6b06f95f0 --- /dev/null +++ b/lib/routes/javdb/makers.js @@ -0,0 +1,20 @@ +const utils = require('./utils'); + +module.exports = async (ctx) => { + ctx.params.filter = ctx.params.filter || ''; + + const currentUrl = `${utils.rootUrl}/makers/${ctx.params.id}?f=${ctx.params.filter}`; + + const filter = { + '': '', + playable: '可播放', + single: '單體作品', + download: '可下載', + cnsub: '字幕', + preview: '預覽圖', + }; + + const title = `JavDB${filter[ctx.params.filter] === '' ? '' : ` - ${filter[ctx.params.filter]}`} `; + + ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); +}; diff --git a/lib/routes/javdb/rankings.js b/lib/routes/javdb/rankings.js new file mode 100644 index 0000000000..ee429abc26 --- /dev/null +++ b/lib/routes/javdb/rankings.js @@ -0,0 +1,12 @@ +const utils = require('./utils'); + +module.exports = async (ctx) => { + ctx.params.caty = ctx.params.caty || 'censored'; + ctx.params.time = ctx.params.time || 'daily'; + + const currentUrl = `${utils.rootUrl}/rankings/video_${ctx.params.caty}?period=${ctx.params.time}`; + + const title = 'JavDB'; + + ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); +}; diff --git a/lib/routes/javdb/search.js b/lib/routes/javdb/search.js new file mode 100644 index 0000000000..bdf0bc5ef0 --- /dev/null +++ b/lib/routes/javdb/search.js @@ -0,0 +1,26 @@ +const utils = require('./utils'); + +module.exports = async (ctx) => { + ctx.params.filter = ctx.params.filter || ''; + ctx.params.keyword = ctx.params.keyword || ''; + + const currentUrl = `${utils.rootUrl}/search?q=${ctx.params.keyword}&f=${ctx.params.filter}`; + + const filter = { + '': '', + playable: '可播放', + single: '單體作品', + actor: '演員', + maker: '片商', + director: '導演', + series: '系列', + code: '番號', + download: '可下載', + cnsub: '字幕', + preview: '預覽圖', + }; + + const title = `關鍵字 ${ctx.params.keyword} ${filter[ctx.params.filter] === '' ? '' : `+ ${filter[ctx.params.filter]}`} 搜索結果 - JavDB `; + + ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); +}; diff --git a/lib/routes/javdb/series.js b/lib/routes/javdb/series.js new file mode 100644 index 0000000000..9189c21bea --- /dev/null +++ b/lib/routes/javdb/series.js @@ -0,0 +1,20 @@ +const utils = require('./utils'); + +module.exports = async (ctx) => { + ctx.params.filter = ctx.params.filter || ''; + + const currentUrl = `${utils.rootUrl}/series/${ctx.params.id}?f=${ctx.params.filter}`; + + const filter = { + '': '', + playable: '可播放', + single: '單體作品', + download: '可下載', + cnsub: '字幕', + preview: '預覽圖', + }; + + const title = `JavDB${filter[ctx.params.filter] === '' ? '' : ` - ${filter[ctx.params.filter]}`} `; + + ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); +}; diff --git a/lib/routes/javdb/tags.js b/lib/routes/javdb/tags.js new file mode 100644 index 0000000000..efec484cb8 --- /dev/null +++ b/lib/routes/javdb/tags.js @@ -0,0 +1,12 @@ +const utils = require('./utils'); + +module.exports = async (ctx) => { + ctx.params.caty = ctx.params.caty || 'censored'; + ctx.params.query = ctx.params.query || ''; + + const currentUrl = `${utils.rootUrl}/tags${ctx.params.caty === 'censored' ? '' : `/${ctx.params.caty}`}?${ctx.params.query}`; + + const title = `JavDB${ctx.params.query === '' ? '' : ` - ${ctx.params.query}`} `; + + ctx.state.data = await utils.ProcessItems(ctx, currentUrl, title); +}; diff --git a/lib/routes/javdb/utils.js b/lib/routes/javdb/utils.js new file mode 100644 index 0000000000..78e5ad8ee2 --- /dev/null +++ b/lib/routes/javdb/utils.js @@ -0,0 +1,72 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +const rootUrl = 'https://javdb.com'; + +module.exports = { + rootUrl: rootUrl, + ProcessItems: async (ctx, currentUrl, title) => { + const response = await got({ + method: 'get', + url: currentUrl, + }); + + const $ = cheerio.load(response.data); + + $('.tags').remove(); + + const list = $('.grid-item a') + .slice(0, 5) + .map((_, item) => { + item = $(item); + return { + title: item.text(), + link: `${rootUrl}${item.attr('href')}`, + pubDate: new Date(item.find('.meta').text()).toUTCString(), + }; + }) + .get(); + + const items = await Promise.all( + list.map( + async (item) => + await ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + const content = cheerio.load(detailResponse.data); + + item.enclosure_url = content('#magnets-content button[data-clipboard-text]').eq(0).attr('data-clipboard-text'); + item.enclosure_type = 'application/x-bittorrent'; + + content('icon, .review-buttons, .copy-to-clipboard').remove(); + content('#modal-review-watched, #modal-save-list').remove(); + content('.video-cover').eq(1).remove(); + + content('img.video-cover').attr('src', content(this).parent().attr('href')); + + content('.preview-images img').each(function () { + content(this).removeAttr('data-src'); + content(this).attr('src', content(this).parent().attr('href')); + }); + + content('#preview-video').css('display', 'block'); + + item.description = content('.movie-info-panel .columns').html() + content('#magnets-content').html() + content('.preview-images').html(); + + return item; + }) + ) + ); + + const htmlTitle = $('title').text(); + const subject = htmlTitle.indexOf('|') === -1 ? '' : htmlTitle.split('|')[0]; + + return { + title: subject === '' ? title : `${subject} - ${title}`, + link: currentUrl, + item: items, + }; + }, +}; diff --git a/lib/routes/juejin/utils.js b/lib/routes/juejin/utils.js index 0fad946bac..e21b22f23a 100644 --- a/lib/routes/juejin/utils.js +++ b/lib/routes/juejin/utils.js @@ -31,14 +31,14 @@ const ProcessFeed = async (list, caches) => await Promise.all( list.map(async (item) => { // 解析时间,补偿时区offset - const pubdate = new Date(parseInt(item.article_info.ctime) * 1000 - 8 * 60 * 60 * 1000); - const link = `https://juejin.im/post/${item.article_id}`; + const pubdate = new Date(parseInt(item.item_info.ctime || item.item_info.article_info.ctime) * 1000 - 8 * 60 * 60 * 1000); + const link = item.item_info.url || `https://juejin.im/post/${item.item_info.article_info.article_id}`; // 列表上提取到的信息 const single = { - title: item.article_info.title, + title: item.item_info.title || item.item_info.article_info.title, description: `${(item.content || item.summaryInfo || '无描述').replace(/[\x00-\x08\x0b-\x0c\x0e-\x1f\x7f]/g, '')}`, pubDate: pubdate.toUTCString(), - author: item.author_user_info.user_name, + author: item.item_info.author_name || item.item_info.author_user_info.user_name, link, }; diff --git a/lib/routes/jx3/news.js b/lib/routes/jx3/news.js new file mode 100644 index 0000000000..cbeebe9b56 --- /dev/null +++ b/lib/routes/jx3/news.js @@ -0,0 +1,59 @@ +const url = require('url'); +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + ctx.params.caty = ctx.params.caty || 'allnews'; + + let query; + + if (ctx.params.caty === 'hd') { + query = 'div.article_list article div h3 a'; + } else { + query = 'div.article_list ul li a'; + } + + const rootUrl = 'https://jx3.xoyo.com'; + const currentUrl = `${rootUrl}/${ctx.params.caty}`; + const response = await got({ + method: 'get', + url: currentUrl, + }); + + const $ = cheerio.load(response.data); + + const list = $(query) + .slice(0, 10) + .map((_, item) => { + item = $(item); + return { + title: item.text(), + link: url.resolve(rootUrl, item.attr('href')), + }; + }) + .get(); + + const items = await Promise.all( + list.map( + async (item) => + await ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + const content = cheerio.load(detailResponse.data); + + item.description = content('div.detail_con').html(); + item.pubDate = new Date(content('p.detail_time').text() + ' GMT+8').toUTCString(); + + return item; + }) + ) + ); + + ctx.state.data = { + title: `${$('ul.allnews_list_ul li.active').text()} - 剑网3`, + link: currentUrl, + item: items, + }; +}; diff --git a/lib/routes/nobelprize/index.js b/lib/routes/nobelprize/index.js new file mode 100644 index 0000000000..c7a59b5066 --- /dev/null +++ b/lib/routes/nobelprize/index.js @@ -0,0 +1,79 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +const config = { + physics: { + link: 'all-nobel-prizes-in-physics', + title: 'Physics', + }, + chemistry: { + link: 'all-nobel-prizes-in-chemistry', + title: 'Chemistry', + }, + 'physiology-or-medicine': { + link: 'all-nobel-laureates-in-physiology-or-medicine', + title: 'Physiology or Medicine', + }, + literature: { + link: 'all-nobel-prizes-in-literature', + title: 'Literature', + }, + peace: { + link: 'all-nobel-peace-prizes', + title: 'Peace', + }, + 'economic-sciences': { + link: 'all-prizes-in-economic-sciences', + title: 'Economic Science', + }, +}; + +module.exports = async (ctx) => { + let rootUrl = 'https://www.nobelprize.org/prizes/lists/all-nobel-prizes/'; + + const cfg = config[ctx.params.caty]; + if (cfg) { + rootUrl = `https://www.nobelprize.org/prizes/lists/${cfg.link}/`; + } + + const response = await got({ + method: 'get', + url: rootUrl, + }); + + const $ = cheerio.load(response.data); + + const items = $('div.by_year h3') + .map((_, item) => { + item = $(item); + if (item.text().length === 4) { + return Promise.resolve(''); + } + + const a = item.find('a'); + + let description = ''; + + item.nextAll().each(function () { + if ($(this).get(0).tagName === 'p') { + description += `

${$(this).html()}

`; + return true; + } + return false; + }); + + return { + title: a.text(), + link: a.attr('href'), + pubDate: new Date(`${a.text().match(/([0-9]{4})/)[1]}-01-01 00:00:00 GMT+0`).toUTCString(), + description, + }; + }) + .get(); + + ctx.state.data = { + title: $('title').eq(0).text(), + link: rootUrl, + item: items, + }; +}; diff --git a/lib/routes/notefolio/index.js b/lib/routes/notefolio/index.js new file mode 100644 index 0000000000..c92317858f --- /dev/null +++ b/lib/routes/notefolio/index.js @@ -0,0 +1,68 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const caty = ctx.params.caty || 'all'; + const order = ctx.params.order || 'pick'; + const time = ctx.params.time || 'all'; + const query = ctx.params.query || ''; + + const rootUrl = `https://notefolio.net/?work_categories=${caty === 'all' ? '' : caty}&order=${order}&from=${time}&q=${query}`; + const response = await got({ + method: 'get', + url: rootUrl, + }); + + const $ = cheerio.load(response.data); + + $('div.mobile-category-order').remove(); + + const list = $('div.work-list div.work-list-item') + .slice(0, 5) + .map((_, item) => { + item = $(item); + const a = item.find('a.go-to-work-info').eq(0); + return { + title: item.find('div.title').text(), + link: `https://notefolio.net${a.attr('href')}`, + author: item.find('span.go-profile-area').text(), + }; + }) + .get(); + + const items = await Promise.all( + list.map( + async (item) => + await ctx.cache.tryGet(item.link, async () => { + const detailResponse = await got({ + method: 'get', + url: item.link, + }); + + const content = cheerio.load(detailResponse.data); + + item.description = '
    '; + + content('li.block-image a img').each((_, i) => { + i = content(i); + item.description += `
  • `; + }); + + content('li.block-video iframe').each((_, i) => { + i = content(i); + item.description += `