From b081d984a1ab1af1985d0c1e2da207c970c00d1a Mon Sep 17 00:00:00 2001
From: Ethan Shen <42264778+nczitzk@users.noreply.github.com>
Date: Thu, 21 Dec 2023 01:51:53 +0800
Subject: [PATCH 1/2] =?UTF-8?q?feat(route):=20add=20=E4=B8=AD=E5=8D=8E?=
=?UTF-8?q?=E4=BA=BA=E6=B0=91=E5=85=B1=E5=92=8C=E5=9B=BD=E5=9B=BD=E5=AE=B6?=
=?UTF-8?q?=E5=8F=91=E5=B1=95=E5=92=8C=E6=94=B9=E9=9D=A9=E5=A7=94=E5=91=98?=
=?UTF-8?q?=E4=BC=9A=E5=8F=91=E5=B1=95=E6=94=B9=E9=9D=A9=E5=B7=A5=E4=BD=9C?=
=?UTF-8?q?=20(#14088)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lib/router.js | 2 +-
lib/v2/gov/maintainer.js | 2 +
lib/v2/gov/ndrc/fggz.js | 62 +++
lib/{routes => v2}/gov/ndrc/xwdt.js | 4 +-
lib/v2/gov/radar.js | 565 ++++++++++++++++++++++++++++
lib/v2/gov/router.js | 2 +
website/docs/routes/government.mdx | 178 ++++++++-
7 files changed, 811 insertions(+), 4 deletions(-)
create mode 100644 lib/v2/gov/ndrc/fggz.js
rename lib/{routes => v2}/gov/ndrc/xwdt.js (90%)
diff --git a/lib/router.js b/lib/router.js
index be80f28ae5a6cd..a633fc396ae823 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -569,7 +569,7 @@ router.get('/gov/shanxi/rst/:category', lazyloadRouteHandler('./routes/gov/shanx
router.get('/gov/hunan/notice/:type', lazyloadRouteHandler('./routes/gov/hunan/notice'));
// 中华人民共和国国家发展和改革委员会
-router.get('/gov/ndrc/xwdt/:caty?', lazyloadRouteHandler('./routes/gov/ndrc/xwdt'));
+// router.get('/gov/ndrc/xwdt/:caty?', lazyloadRouteHandler('./routes/gov/ndrc/xwdt'));
// 中华人民共和国住房和城乡建设部
router.get('/gov/mohurd/policy', lazyloadRouteHandler('./routes/gov/mohurd/policy'));
diff --git a/lib/v2/gov/maintainer.js b/lib/v2/gov/maintainer.js
index fb2c0b6a30fb4e..e6aa2467e5782f 100644
--- a/lib/v2/gov/maintainer.js
+++ b/lib/v2/gov/maintainer.js
@@ -38,6 +38,8 @@ module.exports = {
'/mofcom/article/:suffix+': ['LogicJake'],
'/moj/aac/news/:type?': ['TonyRL'],
'/mot/:category?': ['nczitzk'],
+ '/ndrc/fggz/:category?': ['nczitzk'],
+ '/ndrc/xwdt/:category?': ['nczitzk'],
'/nea/sjzz/ghs': ['nczitzk'],
'/news/:uid': ['EsuRt'],
'/nifdc/:path?': ['nczitzk'],
diff --git a/lib/v2/gov/ndrc/fggz.js b/lib/v2/gov/ndrc/fggz.js
new file mode 100644
index 00000000000000..6a85b6f80904a9
--- /dev/null
+++ b/lib/v2/gov/ndrc/fggz.js
@@ -0,0 +1,62 @@
+const got = require('@/utils/got');
+const cheerio = require('cheerio');
+const timezone = require('@/utils/timezone');
+const { parseDate } = require('@/utils/parse-date');
+
+module.exports = async (ctx) => {
+ const { category } = ctx.params;
+ const limit = ctx.query.limit ? parseInt(ctx.query.limit, 10) : 25;
+
+ const rootUrl = 'https://www.ndrc.gov.cn';
+ const currentUrl = new URL(`fggz${category ? `/${category.endsWith('/') ? category : `${category}/`}` : '/'}`, rootUrl).href;
+
+ const { data: response } = await got(currentUrl);
+
+ const $ = cheerio.load(response);
+
+ let items = $('ul.u-list li a')
+ .slice(0, limit)
+ .toArray()
+ .map((item) => {
+ item = $(item);
+
+ return {
+ title: item.prop('title') || item.text(),
+ link: new URL(item.prop('href'), currentUrl).href,
+ pubDate: parseDate(item.next().text(), 'YYYY/MM/DD'),
+ };
+ });
+
+ items = await Promise.all(
+ items.map((item) =>
+ ctx.cache.tryGet(item.link, async () => {
+ const { data: detailResponse } = await got(item.link);
+
+ const content = cheerio.load(detailResponse);
+
+ item.title = content('meta[name="ArticleTitle"]').prop('content');
+ item.description = content('div.TRS_Editor').html();
+ item.author = content('meta[name="ContentSource"]').prop('content');
+ item.category = [...new Set([content('meta[name="ColumnName"]').prop('content'), content('meta[name="ColumnType"]').prop('content'), ...(content('meta[name="Keywords"]').prop('content').split(/,|;/) ?? [])])].filter(
+ (c) => c
+ );
+ item.pubDate = timezone(parseDate(content('meta[name="PubDate"]').prop('content')), +8);
+
+ return item;
+ })
+ )
+ );
+
+ const image = $('div.logo a img').prop('src');
+
+ ctx.state.data = {
+ item: items,
+ title: $('title').text(),
+ link: currentUrl,
+ description: $('meta[name="ColumnDescription"]').prop('content'),
+ language: $('html').prop('lang'),
+ image,
+ subtitle: $('meta[name="ColumnName"]').prop('content'),
+ author: $('meta[name="SiteName"]').prop('content'),
+ };
+};
diff --git a/lib/routes/gov/ndrc/xwdt.js b/lib/v2/gov/ndrc/xwdt.js
similarity index 90%
rename from lib/routes/gov/ndrc/xwdt.js
rename to lib/v2/gov/ndrc/xwdt.js
index cf15891df0b722..1f0916e1ae9d3a 100644
--- a/lib/routes/gov/ndrc/xwdt.js
+++ b/lib/v2/gov/ndrc/xwdt.js
@@ -2,10 +2,10 @@ const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
- const caty = ctx.params.caty || 'xwfb';
+ const category = ctx.params.category || 'xwfb';
const rootUrl = 'https://www.ndrc.gov.cn';
- const currentUrl = caty.indexOf('dt') < 0 ? `${rootUrl}/xwdt/${caty}` : `${rootUrl}/xwdt/dt/${caty}`;
+ const currentUrl = category.indexOf('dt') < 0 ? `${rootUrl}/xwdt/${category}` : `${rootUrl}/xwdt/dt/${category}`;
const response = await got({
method: 'get',
url: currentUrl,
diff --git a/lib/v2/gov/radar.js b/lib/v2/gov/radar.js
index 8086291d2ea8fe..9d9287eb42daed 100644
--- a/lib/v2/gov/radar.js
+++ b/lib/v2/gov/radar.js
@@ -1239,6 +1239,571 @@ module.exports = {
},
],
},
+ 'ndrc.gov.cn': {
+ _name: '中华人民共和国国家发展和改革委员会',
+ '.': [
+ {
+ title: '新闻动态',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-xin-wen-dong-tai',
+ source: ['/xwdt/:category*'],
+ target: (params) => {
+ const category = params.category;
+
+ return `/gov/ndrc/xwdt/${category ? `/${category.endsWith('/') ? category : `${category}/`}` : '/'}`;
+ },
+ },
+ {
+ title: '发展改革工作',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/:category*'],
+ target: (params) => {
+ const category = params.category;
+
+ return `/gov/ndrc/fggz/${category ? `/${category.endsWith('/') ? category : `${category}/`}` : '/'}`;
+ },
+ },
+ {
+ title: '机关办公 - 业务工作',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jgbg/ywgz'],
+ target: '/gov/ndrc/fggz/jgbg/ywgz',
+ },
+ {
+ title: '机关办公 - 学思践悟',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jgbg/xsjw'],
+ target: '/gov/ndrc/fggz/jgbg/xsjw',
+ },
+ {
+ title: '发改政研 - 经济数据概览',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzy/jjsjgl'],
+ target: '/gov/ndrc/fggz/fgzy/jjsjgl',
+ },
+ {
+ title: '发改政研 - 社会关切回应',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzy/shgqhy'],
+ target: '/gov/ndrc/fggz/fgzy/shgqhy',
+ },
+ {
+ title: '发改政研 - 新媒体解读',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzy/xmtjd'],
+ target: '/gov/ndrc/fggz/fgzy/xmtjd',
+ },
+ {
+ title: '发展战略和规划 - 国家发展战略和规划',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fzzlgh/gjfzgh'],
+ target: '/gov/ndrc/fggz/fzzlgh/gjfzgh',
+ },
+ {
+ title: '发展战略和规划 - 国家级专项规划',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fzzlgh/gjjzxgh'],
+ target: '/gov/ndrc/fggz/fzzlgh/gjjzxgh',
+ },
+ {
+ title: '发展战略和规划 - 地方发展规划',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fzzlgh/dffzgh'],
+ target: '/gov/ndrc/fggz/fzzlgh/dffzgh',
+ },
+ {
+ title: '发展战略和规划 - 发展规划工作',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fzzlgh/fzgggz'],
+ target: '/gov/ndrc/fggz/fzzlgh/fzgggz',
+ },
+ {
+ title: '发改综合 - 国内经济监测',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gnjjjc'],
+ target: '/gov/ndrc/fggz/fgzh/gnjjjc',
+ },
+ {
+ title: '发改综合 - 工业经济',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gnjjjc/gyjj'],
+ target: '/gov/ndrc/fggz/fgzh/gnjjjc/gyjj',
+ },
+ {
+ title: '发改综合 - 投资运行',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gnjjjc/tzyx'],
+ target: '/gov/ndrc/fggz/fgzh/gnjjjc/tzyx',
+ },
+ {
+ title: '发改综合 - 市场消费',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gnjjjc/scxf'],
+ target: '/gov/ndrc/fggz/fgzh/gnjjjc/scxf',
+ },
+ {
+ title: '发改综合 - 价格情况',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gnjjjc/jgqk'],
+ target: '/gov/ndrc/fggz/fgzh/gnjjjc/jgqk',
+ },
+ {
+ title: '发改综合 - 财政收支',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gnjjjc/czsz'],
+ target: '/gov/ndrc/fggz/fgzh/gnjjjc/czsz',
+ },
+ {
+ title: '发改综合 - 货币金融',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gnjjjc/hbjr'],
+ target: '/gov/ndrc/fggz/fgzh/gnjjjc/hbjr',
+ },
+ {
+ title: '发改综合 - 就业情况',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gnjjjc/jyqk'],
+ target: '/gov/ndrc/fggz/fgzh/gnjjjc/jyqk',
+ },
+ {
+ title: '发改综合 - 地区经济',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gnjjjc/dqjj'],
+ target: '/gov/ndrc/fggz/fgzh/gnjjjc/dqjj',
+ },
+ {
+ title: '发改综合 - 国际经济监测',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gjjjjc'],
+ target: '/gov/ndrc/fggz/fgzh/gjjjjc',
+ },
+ {
+ title: '发改综合 - 先行指数',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gjjjjc/xxzs'],
+ target: '/gov/ndrc/fggz/fgzh/gjjjjc/xxzs',
+ },
+ {
+ title: '发改综合 - 大宗商品市场情况',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gjjjjc/dzspscqk'],
+ target: '/gov/ndrc/fggz/fgzh/gjjjjc/dzspscqk',
+ },
+ {
+ title: '发改综合 - 国别分析',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gjjjjc/gbfx'],
+ target: '/gov/ndrc/fggz/fgzh/gjjjjc/gbfx',
+ },
+ {
+ title: '发改综合 - 国际组织预测和研究动态',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gjzzychyjdt'],
+ target: '/gov/ndrc/fggz/fgzh/gjzzychyjdt',
+ },
+ {
+ title: '发改综合 - 国际组织预测',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gjzzychyjdt/gjzzyc'],
+ target: '/gov/ndrc/fggz/fgzh/gjzzychyjdt/gjzzyc',
+ },
+ {
+ title: '发改综合 - 国际组织研究动态',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgzh/gjzzychyjdt/gjzzyjdt'],
+ target: '/gov/ndrc/fggz/fgzh/gjzzychyjdt/gjzzyjdt',
+ },
+ {
+ title: '经济运行与调节 - 宏观经济运行',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jjyxtj/hgjjyx'],
+ target: '/gov/ndrc/fggz/jjyxtj/hgjjyx',
+ },
+ {
+ title: '经济运行与调节 - 地方经济运行',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jjyxtj/dfjjyx'],
+ target: '/gov/ndrc/fggz/jjyxtj/dfjjyx',
+ },
+ {
+ title: '经济运行与调节 - 煤电油气运',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jjyxtj/mdyqy'],
+ target: '/gov/ndrc/fggz/jjyxtj/mdyqy',
+ },
+ {
+ title: '经济运行与调节 - 现代物流',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jjyxtj/xdwl'],
+ target: '/gov/ndrc/fggz/jjyxtj/xdwl',
+ },
+ {
+ title: '经济运行与调节 - 应急管理',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jjyxtj/yjgl'],
+ target: '/gov/ndrc/fggz/jjyxtj/yjgl',
+ },
+ {
+ title: '体制改革 - 改革快讯',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/tzgg/ggkx'],
+ target: '/gov/ndrc/fggz/tzgg/ggkx',
+ },
+ {
+ title: '体制改革 - 半月改革动态',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/tzgg/byggdt'],
+ target: '/gov/ndrc/fggz/tzgg/byggdt',
+ },
+ {
+ title: '体制改革 - 地方改革经验',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/tzgg/dfggjx'],
+ target: '/gov/ndrc/fggz/tzgg/dfggjx',
+ },
+ {
+ title: '固定资产投资 - 投资法规与政策动态',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/gdzctz/tzfg'],
+ target: '/gov/ndrc/fggz/gdzctz/tzfg',
+ },
+ {
+ title: '利用外资和境外投资 - 境外投资',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/lywzjw/jwtz'],
+ target: '/gov/ndrc/fggz/lywzjw/jwtz',
+ },
+ {
+ title: '利用外资和境外投资 - 外商投资',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/lywzjw/wstz'],
+ target: '/gov/ndrc/fggz/lywzjw/wstz',
+ },
+ {
+ title: '利用外资和境外投资 - 外债管理',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/lywzjw/wzgl'],
+ target: '/gov/ndrc/fggz/lywzjw/wzgl',
+ },
+ {
+ title: '利用外资和境外投资 - 政策法规',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/lywzjw/zcfg'],
+ target: '/gov/ndrc/fggz/lywzjw/zcfg',
+ },
+ {
+ title: '地区经济 - 重大战略',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/dqjj/zdzl'],
+ target: '/gov/ndrc/fggz/dqjj/zdzl',
+ },
+ {
+ title: '地区经济 - 四大板块',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/dqjj/sdbk'],
+ target: '/gov/ndrc/fggz/dqjj/sdbk',
+ },
+ {
+ title: '地区经济 - 国土海洋流域新区',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/dqjj/qt'],
+ target: '/gov/ndrc/fggz/dqjj/qt',
+ },
+ {
+ title: '地区振兴 - 巩固拓展脱贫攻坚成果和欠发达地区振兴发展',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/dqzx/tpgjypkfq'],
+ target: '/gov/ndrc/fggz/dqzx/tpgjypkfq',
+ },
+ {
+ title: '地区振兴 - 对口支援与合作',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/dqzx/dkzyyhz'],
+ target: '/gov/ndrc/fggz/dqzx/dkzyyhz',
+ },
+ {
+ title: '地区振兴 - 革命老区振兴发展',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/dqzx/gglqzxfz'],
+ target: '/gov/ndrc/fggz/dqzx/gglqzxfz',
+ },
+ {
+ title: '地区振兴 - 生态退化地区治理',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/dqzx/stthdqzl'],
+ target: '/gov/ndrc/fggz/dqzx/stthdqzl',
+ },
+ {
+ title: '地区振兴 - 资源型地区转型发展',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/dqzx/zyxdqzxfz'],
+ target: '/gov/ndrc/fggz/dqzx/zyxdqzxfz',
+ },
+ {
+ title: '地区振兴 - 老工业地区振兴发展',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/dqzx/lzydfzxfz'],
+ target: '/gov/ndrc/fggz/dqzx/lzydfzxfz',
+ },
+ {
+ title: '区域开放 - 信息集萃',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/qykf/xxjc'],
+ target: '/gov/ndrc/fggz/qykf/xxjc',
+ },
+ {
+ title: '农业农村经济 - 重点建设',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/nyncjj/zdjs'],
+ target: '/gov/ndrc/fggz/nyncjj/zdjs',
+ },
+ {
+ title: '农业农村经济 - 投资指南',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/nyncjj/tzzn'],
+ target: '/gov/ndrc/fggz/nyncjj/tzzn',
+ },
+ {
+ title: '农业农村经济 - 乡村振兴',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/nyncjj/xczx'],
+ target: '/gov/ndrc/fggz/nyncjj/xczx',
+ },
+ {
+ title: '农业农村经济 - 农经信息',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/nyncjj/njxx'],
+ target: '/gov/ndrc/fggz/nyncjj/njxx',
+ },
+ {
+ title: '基础设施发展 - 政策规划',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/zcssfz/zcgh'],
+ target: '/gov/ndrc/fggz/zcssfz/zcgh',
+ },
+ {
+ title: '基础设施发展 - 城轨监管',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/zcssfz/cgjg'],
+ target: '/gov/ndrc/fggz/zcssfz/cgjg',
+ },
+ {
+ title: '基础设施发展 - 重大工程',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/zcssfz/zdgc'],
+ target: '/gov/ndrc/fggz/zcssfz/zdgc',
+ },
+ {
+ title: '基础设施发展 - 问题研究',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/zcssfz/wtyj'],
+ target: '/gov/ndrc/fggz/zcssfz/wtyj',
+ },
+ {
+ title: '基础设施发展 - 行业数据',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/zcssfz/hysj'],
+ target: '/gov/ndrc/fggz/zcssfz/hysj',
+ },
+ {
+ title: '基础设施发展 - 地方发展',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/zcssfz/dffz'],
+ target: '/gov/ndrc/fggz/zcssfz/dffz',
+ },
+ {
+ title: '产业发展 - 制造业发展',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/cyfz/zcyfz'],
+ target: '/gov/ndrc/fggz/cyfz/zcyfz',
+ },
+ {
+ title: '产业发展 - 服务业发展',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/cyfz/fwyfz'],
+ target: '/gov/ndrc/fggz/cyfz/fwyfz',
+ },
+ {
+ title: '创新和高技术发展 - 地方进展',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/cxhgjsfz/dfjz'],
+ target: '/gov/ndrc/fggz/cxhgjsfz/dfjz',
+ },
+ {
+ title: '环境与资源 - 碳达峰碳中和',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/hjyzy/tdftzh'],
+ target: '/gov/ndrc/fggz/hjyzy/tdftzh',
+ },
+ {
+ title: '环境与资源 - 生态文明建设',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/hjyzy/stwmjs'],
+ target: '/gov/ndrc/fggz/hjyzy/stwmjs',
+ },
+ {
+ title: '环境与资源 - 节能和能效',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/hjyzy/jnhnx'],
+ target: '/gov/ndrc/fggz/hjyzy/jnhnx',
+ },
+ {
+ title: '环境与资源 - 资源利用和循环经济',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/hjyzy/zyzhlyhxhjj'],
+ target: '/gov/ndrc/fggz/hjyzy/zyzhlyhxhjj',
+ },
+ {
+ title: '环境与资源 - 水节约与保护',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/hjyzy/sjyybh'],
+ target: '/gov/ndrc/fggz/hjyzy/sjyybh',
+ },
+ {
+ title: '环境与资源 - 环境与保护',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/hjyzy/hjybh'],
+ target: '/gov/ndrc/fggz/hjyzy/hjybh',
+ },
+ {
+ title: '就业与收入 - 就业收入社保消费',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jyysr/jysrsbxf'],
+ target: '/gov/ndrc/fggz/jyysr/jysrsbxf',
+ },
+ {
+ title: '就业与收入 - 地方经验',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jyysr/dfjx'],
+ target: '/gov/ndrc/fggz/jyysr/dfjx',
+ },
+ {
+ title: '经济贸易 - 重要商品情况',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jjmy/zyspqk'],
+ target: '/gov/ndrc/fggz/jjmy/zyspqk',
+ },
+ {
+ title: '经济贸易 - 对外经贸及政策分析',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jjmy/dwjmjzcfx'],
+ target: '/gov/ndrc/fggz/jjmy/dwjmjzcfx',
+ },
+ {
+ title: '经济贸易 - 流通业发展',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jjmy/ltyfz'],
+ target: '/gov/ndrc/fggz/jjmy/ltyfz',
+ },
+ {
+ title: '财金信用 - 工作动态',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/cjxy/gzdt03'],
+ target: '/gov/ndrc/fggz/cjxy/gzdt03',
+ },
+ {
+ title: '价格管理 - 地方工作',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/jggl/dfgz'],
+ target: '/gov/ndrc/fggz/jggl/dfgz',
+ },
+ {
+ title: '发改法规 - 地方信息',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgfg/dfxx'],
+ target: '/gov/ndrc/fggz/fgfg/dfxx',
+ },
+ {
+ title: '国际合作 - 世经动态',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/gjhz/zywj'],
+ target: '/gov/ndrc/fggz/gjhz/zywj',
+ },
+ {
+ title: '干部之家 - 系统风采',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/gbzj/xtfc'],
+ target: '/gov/ndrc/fggz/gbzj/xtfc',
+ },
+ {
+ title: '干部之家 - 人才招聘',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/gbzj/rczp'],
+ target: '/gov/ndrc/fggz/gbzj/rczp',
+ },
+ {
+ title: '干部之家 - 委属工作',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/gbzj/wsgz'],
+ target: '/gov/ndrc/fggz/gbzj/wsgz',
+ },
+ {
+ title: '干部之家 - 学习园地',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/gbzj/xxyd'],
+ target: '/gov/ndrc/fggz/gbzj/xxyd',
+ },
+ {
+ title: '评估督导 - 评督动态',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/pgdd/pddt'],
+ target: '/gov/ndrc/fggz/pgdd/pddt',
+ },
+ {
+ title: '评估督导 - 评督经验',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/pgdd/pdjy'],
+ target: '/gov/ndrc/fggz/pgdd/pdjy',
+ },
+ {
+ title: '发改党建 - 中央精神',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgdj/zydj'],
+ target: '/gov/ndrc/fggz/fgdj/zydj',
+ },
+ {
+ title: '发改党建 - 机关党建',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgdj/jgdj'],
+ target: '/gov/ndrc/fggz/fgdj/jgdj',
+ },
+ {
+ title: '发改党建 - 委属党建',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgdj/wsdj'],
+ target: '/gov/ndrc/fggz/fgdj/wsdj',
+ },
+ {
+ title: '发改党建 - 系统党建',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgdj/xtdj'],
+ target: '/gov/ndrc/fggz/fgdj/xtdj',
+ },
+ {
+ title: '发改金辉 - 党建之窗',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgjh/djzc'],
+ target: '/gov/ndrc/fggz/fgjh/djzc',
+ },
+ {
+ title: '发改金辉 - 系统交流',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgjh/zthd'],
+ target: '/gov/ndrc/fggz/fgjh/zthd',
+ },
+ {
+ title: '发改金辉 - 学习园地',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgjh/yxyd'],
+ target: '/gov/ndrc/fggz/fgjh/yxyd',
+ },
+ {
+ title: '发改金辉 - 金色夕阳',
+ docs: 'https://docs.rsshub.app/routes/government#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo',
+ source: ['/fggz/fgjh/jsxy'],
+ target: '/gov/ndrc/fggz/fgjh/jsxy',
+ },
+ ],
+ },
'nea.gov.cn': {
_name: '国家能源局',
'.': [
diff --git a/lib/v2/gov/router.js b/lib/v2/gov/router.js
index 0cd10e05351cd6..206b80f20eb274 100644
--- a/lib/v2/gov/router.js
+++ b/lib/v2/gov/router.js
@@ -31,6 +31,8 @@ module.exports = function (router) {
router.get('/moe/s78/:column', require('./moe/s78'));
router.get('/mofcom/article/:suffix+', require('./mofcom/article'));
router.get('/moj/aac/news/:type?', require('./moj/aac/news'));
+ router.get('/ndrc/fggz/:category*', require('./ndrc/fggz'));
+ router.get('/ndrc/xwdt/:category*', require('./ndrc/xwdt'));
router.get('/nea/sjzz/ghs', require('./nea/ghs'));
router.get('/news/:uid', require('./news'));
router.get('/nifdc/:path*', require('./nifdc'));
diff --git a/website/docs/routes/government.mdx b/website/docs/routes/government.mdx
index 125c1f2b33a359..f83942e9b20127 100644
--- a/website/docs/routes/government.mdx
+++ b/website/docs/routes/government.mdx
@@ -1658,12 +1658,188 @@
### 新闻动态 {#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-xin-wen-dong-tai}
-
+
| 新闻发布 | 通知通告 | 委领导动态 | 司局动态 | 地方动态 |
| -------- | -------- | ---------- | -------- | -------- |
| xwfb | tzgg | wlddt | sjdt | dfdt |
+### 发展改革工作 {#zhong-hua-ren-min-gong-he-guo-guo-jia-fa-zhan-he-gai-ge-wei-yuan-hui-fa-zhan-gai-ge-gong-zuo}
+
+
+
+ 全部分类
+
+ #### 机关办公
+
+ | 业务工作 | 学思践悟 |
+ | --------- | --------- |
+ | jgbg/ywgz | jgbg/xsjw |
+
+ #### 发改政研
+
+ | 经济数据概览 | 社会关切回应 | 新媒体解读 |
+ | ------------ | ------------ | ---------- |
+ | fgzy/jjsjgl | fgzy/shgqhy | fgzy/xmtjd |
+
+ #### 发展战略和规划
+
+ | 国家发展战略和规划 | 国家级专项规划 | 地方发展规划 | 发展规划工作 |
+ | ------------------ | -------------- | ------------- | ------------- |
+ | fzzlgh/gjfzgh | fzzlgh/gjjzxgh | fzzlgh/dffzgh | fzzlgh/fzgggz |
+
+ #### 发改综合
+
+ | 国内经济监测 | 工业经济 | 投资运行 | 市场消费 |
+ | ------------ | ---------------- | ---------------- | ---------------- |
+ | fgzh/gnjjjc | fgzh/gnjjjc/gyjj | fgzh/gnjjjc/tzyx | fgzh/gnjjjc/scxf |
+
+ | 价格情况 | 财政收支 | 货币金融 | 就业情况 |
+ | ---------------- | ---------------- | ---------------- | ---------------- |
+ | fgzh/gnjjjc/jgqk | fgzh/gnjjjc/czsz | fgzh/gnjjjc/hbjr | fgzh/gnjjjc/jyqk |
+
+ | 地区经济 | 国际经济监测 | 先行指数 | 大宗商品市场情况 |
+ | ---------------- | ------------ | ---------------- | -------------------- |
+ | fgzh/gnjjjc/dqjj | fgzh/gjjjjc | fgzh/gjjjjc/xxzs | fgzh/gjjjjc/dzspscqk |
+
+ | 国别分析 | 国际组织预测和研究动态 | 国际组织预测 | 国际组织研究动态 |
+ | ---------------- | ---------------------- | ----------------------- | ------------------------- |
+ | fgzh/gjjjjc/gbfx | fgzh/gjzzychyjdt | fgzh/gjzzychyjdt/gjzzyc | fgzh/gjzzychyjdt/gjzzyjdt |
+
+ #### 经济运行与调节
+
+ | 宏观经济运行 | 地方经济运行 | 煤电油气运 | 现代物流 |
+ | ------------- | ------------- | ------------ | ----------- |
+ | jjyxtj/hgjjyx | jjyxtj/dfjjyx | jjyxtj/mdyqy | jjyxtj/xdwl |
+
+ #### 体制改革
+
+ | 改革快讯 | 半月改革动态 | 地方改革经验 |
+ | --------- | ------------ | ------------ |
+ | tzgg/ggkx | tzgg/byggdt | tzgg/dfggjx |
+
+ #### 固定资产投资
+
+ | 投资法规与政策动态 |
+ | ------------------ |
+ | gdzctz/tzfg |
+
+ #### 利用外资和境外投资
+
+ | 境外投资 | 外商投资 | 外债管理 | 政策法规 |
+ | ----------- | ----------- | ----------- | ----------- |
+ | lywzjw/jwtz | lywzjw/wstz | lywzjw/wzgl | lywzjw/zcfg |
+
+ #### 地区经济
+
+ | 重大战略 | 四大板块 | 国土海洋流域新区 |
+ | --------- | --------- | ---------------- |
+ | dqjj/zdzl | dqjj/sdbk | dqjj/qt |
+
+ #### 地区振兴
+
+ | 巩固拓展脱贫攻坚成果和欠发达地区振兴发展 | 对口支援与合作 | 革命老区振兴发展 | 生态退化地区治理 |
+ | ---------------------------------------- | -------------- | ---------------- | ---------------- |
+ | dqzx/tpgjypkfq | dqzx/dkzyyhz | dqzx/gglqzxfz | dqzx/stthdqzl |
+
+ #### 区域开放
+
+ | 信息集萃 |
+ | --------- |
+ | qykf/xxjc |
+
+ #### 农业农村经济
+
+ | 重点建设 | 投资指南 | 乡村振兴 | 农经信息 |
+ | ----------- | ----------- | ----------- | ----------- |
+ | nyncjj/zdjs | nyncjj/tzzn | nyncjj/xczx | nyncjj/njxx |
+
+ #### 基础设施发展
+
+ | 政策规划 | 城轨监管 | 重大工程 | 问题研究 |
+ | ----------- | ----------- | ----------- | ----------- |
+ | zcssfz/zcgh | zcssfz/cgjg | zcssfz/zdgc | zcssfz/wtyj |
+
+ #### 产业发展
+
+ | 制造业发展 | 服务业发展 |
+ | ---------- | ---------- |
+ | cyfz/zcyfz | cyfz/fwyfz |
+
+ #### 创新和高技术发展
+
+ | 地方进展 |
+ | ------------- |
+ | cxhgjsfz/dfjz |
+
+ #### 环境与资源
+
+ | 碳达峰碳中和 | 生态文明建设 | 节能和能效 | 资源利用和循环经济 |
+ | ------------ | ------------ | ----------- | ------------------ |
+ | hjyzy/tdftzh | hjyzy/stwmjs | hjyzy/jnhnx | hjyzy/zyzhlyhxhjj |
+
+ #### 就业与收入
+
+ | 就业收入社保消费 | 地方经验 |
+ | ---------------- | ---------- |
+ | jyysr/jysrsbxf | jyysr/dfjx |
+
+ #### 经济贸易
+
+ | 重要商品情况 | 对外经贸及政策分析 | 流通业发展 |
+ | ------------ | ------------------ | ---------- |
+ | jjmy/zyspqk | jjmy/dwjmjzcfx | jjmy/ltyfz |
+
+ #### 财金信用
+
+ | 工作动态 |
+ | ----------- |
+ | cjxy/gzdt03 |
+
+ #### 价格管理
+
+ | 地方工作 |
+ | --------- |
+ | jggl/dfgz |
+
+ #### 发改法规
+
+ | 地方信息 |
+ | --------- |
+ | fgfg/dfxx |
+
+ #### 国际合作
+
+ | 世经动态 |
+ | --------- |
+ | gjhz/zywj |
+
+ #### 干部之家
+
+ | 系统风采 | 人才招聘 | 委属工作 | 学习园地 |
+ | --------- | --------- | --------- | --------- |
+ | gbzj/xtfc | gbzj/rczp | gbzj/wsgz | gbzj/xxyd |
+
+ #### 评估督导
+
+ | 评督动态 | 评督经验 |
+ | --------- | --------- |
+ | pgdd/pddt | pgdd/pdjy |
+
+ #### 发改党建
+
+ | 中央精神 | 机关党建 | 委属党建 | 系统党建 |
+ | --------- | --------- | --------- | --------- |
+ | fgdj/zydj | fgdj/jgdj | fgdj/wsdj | fgdj/xtdj |
+
+ #### 发改金辉
+
+ | 党建之窗 | 系统交流 | 学习园地 | 金色夕阳 |
+ | --------- | --------- | --------- | --------- |
+ | fgjh/djzc | fgjh/zthd | fgjh/yxyd | fgjh/jsxy |
+
+
+
## 中华人民共和国海关总署 {#zhong-hua-ren-min-gong-he-guo-hai-guan-zong-shu}
### 拍卖信息 / 海关法规 {#zhong-hua-ren-min-gong-he-guo-hai-guan-zong-shu-pai-mai-xin-xi-hai-guan-fa-gui}
From fe6117a4210787f2fe8b3fc737cbfb657b25e129 Mon Sep 17 00:00:00 2001
From: DIYgod
Date: Thu, 21 Dec 2023 02:46:58 +0800
Subject: [PATCH 2/2] feat: remove notOperational routes - picture
---
lib/router.js | 39 -----
lib/routes/babehub/index.js | 30 ----
lib/routes/babehub/search.js | 15 --
lib/routes/babehub/utils.js | 71 ----------
lib/routes/baidu/doodles.js | 27 ----
lib/routes/dilbert/strip.js | 54 -------
lib/routes/elitebabes/index.js | 30 ----
lib/routes/elitebabes/search.js | 15 --
lib/routes/elitebabes/utils.js | 88 ------------
lib/routes/elitebabes/videos.js | 26 ----
lib/routes/girlimg/album.js | 57 --------
lib/routes/gracg/user.js | 65 ---------
lib/routes/hentai-cosplays/hentai-cosplays.js | 11 --
lib/routes/jdlingyu/index.js | 45 ------
lib/routes/loveheaven/update.js | 45 ------
lib/routes/mzitu/category.js | 26 ----
lib/routes/mzitu/home.js | 32 -----
lib/routes/mzitu/post.js | 41 ------
lib/routes/mzitu/tag.js | 25 ----
lib/routes/mzitu/tags.js | 23 ---
lib/routes/mzitu/util.js | 51 -------
lib/routes/zhutix/latest.js | 41 ------
lib/v2/35photo/actual.js | 7 -
lib/v2/35photo/author.js | 9 --
lib/v2/35photo/genre.js | 10 --
lib/v2/35photo/interesting.js | 7 -
lib/v2/35photo/maintainer.js | 8 --
lib/v2/35photo/map.js | 7 -
lib/v2/35photo/new.js | 7 -
lib/v2/35photo/radar.js | 43 ------
lib/v2/35photo/router.js | 8 --
lib/v2/35photo/utils.js | 57 --------
lib/v2/dbmv/index.js | 64 ---------
lib/v2/dbmv/maintainer.js | 3 -
lib/v2/dbmv/radar.js | 13 --
lib/v2/dbmv/router.js | 3 -
lib/v2/google/router.js | 2 -
lib/v2/google/sitesRecentChanges.js | 51 -------
lib/v2/meituclub/latest.js | 41 ------
lib/v2/meituclub/maintainer.js | 3 -
lib/v2/meituclub/radar.js | 13 --
lib/v2/meituclub/router.js | 3 -
lib/v2/meituclub/templates/description.art | 1 -
website/docs/routes/picture.mdx | 134 +-----------------
44 files changed, 1 insertion(+), 1350 deletions(-)
delete mode 100644 lib/routes/babehub/index.js
delete mode 100644 lib/routes/babehub/search.js
delete mode 100644 lib/routes/babehub/utils.js
delete mode 100644 lib/routes/baidu/doodles.js
delete mode 100644 lib/routes/dilbert/strip.js
delete mode 100644 lib/routes/elitebabes/index.js
delete mode 100644 lib/routes/elitebabes/search.js
delete mode 100644 lib/routes/elitebabes/utils.js
delete mode 100644 lib/routes/elitebabes/videos.js
delete mode 100644 lib/routes/girlimg/album.js
delete mode 100644 lib/routes/gracg/user.js
delete mode 100644 lib/routes/hentai-cosplays/hentai-cosplays.js
delete mode 100644 lib/routes/jdlingyu/index.js
delete mode 100644 lib/routes/loveheaven/update.js
delete mode 100644 lib/routes/mzitu/category.js
delete mode 100644 lib/routes/mzitu/home.js
delete mode 100644 lib/routes/mzitu/post.js
delete mode 100644 lib/routes/mzitu/tag.js
delete mode 100644 lib/routes/mzitu/tags.js
delete mode 100644 lib/routes/mzitu/util.js
delete mode 100644 lib/routes/zhutix/latest.js
delete mode 100644 lib/v2/35photo/actual.js
delete mode 100644 lib/v2/35photo/author.js
delete mode 100644 lib/v2/35photo/genre.js
delete mode 100644 lib/v2/35photo/interesting.js
delete mode 100644 lib/v2/35photo/maintainer.js
delete mode 100644 lib/v2/35photo/map.js
delete mode 100644 lib/v2/35photo/new.js
delete mode 100644 lib/v2/35photo/radar.js
delete mode 100644 lib/v2/35photo/router.js
delete mode 100644 lib/v2/35photo/utils.js
delete mode 100644 lib/v2/dbmv/index.js
delete mode 100644 lib/v2/dbmv/maintainer.js
delete mode 100644 lib/v2/dbmv/radar.js
delete mode 100644 lib/v2/dbmv/router.js
delete mode 100644 lib/v2/google/sitesRecentChanges.js
delete mode 100644 lib/v2/meituclub/latest.js
delete mode 100644 lib/v2/meituclub/maintainer.js
delete mode 100644 lib/v2/meituclub/radar.js
delete mode 100644 lib/v2/meituclub/router.js
delete mode 100644 lib/v2/meituclub/templates/description.art
diff --git a/lib/router.js b/lib/router.js
index a633fc396ae823..0eb14c176f0854 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -30,13 +30,6 @@ router.get('/ziroom/room/:city/:iswhole/:room/:keyword', lazyloadRouteHandler('.
// router.get('/jianshu/collection/:id', lazyloadRouteHandler('./routes/jianshu/collection'));
// router.get('/jianshu/user/:id', lazyloadRouteHandler('./routes/jianshu/user'));
-// 妹子图
-router.get('/mzitu/home/:type?', lazyloadRouteHandler('./routes/mzitu/home'));
-router.get('/mzitu/tags', lazyloadRouteHandler('./routes/mzitu/tags'));
-router.get('/mzitu/category/:category', lazyloadRouteHandler('./routes/mzitu/category'));
-router.get('/mzitu/post/:id', lazyloadRouteHandler('./routes/mzitu/post'));
-router.get('/mzitu/tag/:tag', lazyloadRouteHandler('./routes/mzitu/tag'));
-
// pixiv-fanbox
router.get('/fanbox/:user?', lazyloadRouteHandler('./routes/fanbox/main'));
@@ -437,10 +430,6 @@ router.get('/autotrader/:query', lazyloadRouteHandler('./routes/autotrader'));
// 极客公园
router.get('/geekpark/breakingnews', lazyloadRouteHandler('./routes/geekpark/breakingnews'));
-// 百度
-router.get('/baidu/doodles', lazyloadRouteHandler('./routes/baidu/doodles'));
-// router.get('/baidu/topwords/:boardId?', lazyloadRouteHandler('./routes/baidu/topwords'));
-
// 搜狗
router.get('/sogou/doodles', lazyloadRouteHandler('./routes/sogou/doodles'));
@@ -834,9 +823,6 @@ router.get('/gov/veterans/:type', lazyloadRouteHandler('./routes/gov/veterans/ch
// 河北省退伍士兵信息
router.get('/gov/veterans/hebei/:type', lazyloadRouteHandler('./routes/gov/veterans/hebei'));
-// Dilbert Comic Strip
-router.get('/dilbert/strip', lazyloadRouteHandler('./routes/dilbert/strip'));
-
// 怪物猎人
router.get('/monsterhunter/update', lazyloadRouteHandler('./routes/mhw/update'));
router.get('/mhw/update', lazyloadRouteHandler('./routes/mhw/update'));
@@ -901,9 +887,6 @@ router.get('/cninfo/announcement/:column/:code/:orgId/:category?/:search?', lazy
router.get('/nosetime/:id/:type/:sort?', lazyloadRouteHandler('./routes/nosetime/comment'));
router.get('/nosetime/home', lazyloadRouteHandler('./routes/nosetime/home'));
-// 涂鸦王国
-router.get('/gracg/:user/:love?', lazyloadRouteHandler('./routes/gracg/user'));
-
// 大侠阿木
router.get('/daxiaamu/home', lazyloadRouteHandler('./routes/daxiaamu/home'));
@@ -1301,9 +1284,6 @@ router.get('/ku/:name?', lazyloadRouteHandler('./routes/ku/index'));
// 我有一片芝麻地
router.get('/blogs/hedwig/:type', lazyloadRouteHandler('./routes/blogs/hedwig'));
-// LoveHeaven
-router.get('/loveheaven/update/:slug', lazyloadRouteHandler('./routes/loveheaven/update'));
-
// 拉勾
router.get('/lagou/jobs/:position/:city', lazyloadRouteHandler('./routes/lagou/jobs'));
@@ -1347,9 +1327,6 @@ router.get('/checkra1n/releases', lazyloadRouteHandler('./routes/checkra1n/relea
// 四川省科学技术厅
router.get('/sckjt/news/:type?', lazyloadRouteHandler('./routes/sckjt/news'));
-// 绝对领域
-router.get('/jdlingyu/:type', lazyloadRouteHandler('./routes/jdlingyu/index'));
-
// 湖北工业大学
router.get('/hbut/news/:type', lazyloadRouteHandler('./routes/universities/hbut/news'));
router.get('/hbut/cs/:type', lazyloadRouteHandler('./routes/universities/hbut/cs'));
@@ -1364,9 +1341,6 @@ router.get('/acwifi', lazyloadRouteHandler('./routes/acwifi'));
router.get('/iyouport/article', lazyloadRouteHandler('./routes/iyouport'));
router.get('/iyouport/:category?', lazyloadRouteHandler('./routes/iyouport'));
-// girlimg
-router.get('/girlimg/album/:tag?/:mode?', lazyloadRouteHandler('./routes/girlimg/album'));
-
// etoland
router.get('/etoland/:bo_table', lazyloadRouteHandler('./routes/etoland/board'));
@@ -1484,9 +1458,6 @@ router.get('/monotype/article', lazyloadRouteHandler('./routes/monotype/article'
// Stork
router.get('/stork/keyword/:trackID/:displayKey', lazyloadRouteHandler('./routes/stork/keyword'));
-// 致美化
-router.get('/zhutix/latest', lazyloadRouteHandler('./routes/zhutix/latest'));
-
// arXiv
router.get('/arxiv/:query', lazyloadRouteHandler('./routes/arxiv/query'));
@@ -1532,7 +1503,6 @@ router.get('/gov/caict/caictgd', lazyloadRouteHandler('./routes/gov/caict/caictg
router.get('/cs/news/:caty', lazyloadRouteHandler('./routes/cs/news'));
// hentai-cosplays
-router.get('/hentai-cosplays/:type?/:name?', lazyloadRouteHandler('./routes/hentai-cosplays/hentai-cosplays'));
router.get('/porn-images-xxx/:type?/:name?', lazyloadRouteHandler('./routes/hentai-cosplays/porn-images-xxx'));
// dcinside
@@ -2008,10 +1978,6 @@ router.get('/tianyancha/hot', lazyloadRouteHandler('./routes/tianyancha/hot'));
// King Arthur
router.get('/kingarthur/:type', lazyloadRouteHandler('./routes/kingarthur/index'));
-// BabeHub
-router.get('/babehub/search/:keyword?', lazyloadRouteHandler('./routes/babehub/search'));
-router.get('/babehub/:category?', lazyloadRouteHandler('./routes/babehub/index'));
-
// 深圳新闻网
router.get('/sznews/press', lazyloadRouteHandler('./routes/sznews/press'));
router.get('/sznews/ranking', lazyloadRouteHandler('./routes/sznews/ranking'));
@@ -2060,11 +2026,6 @@ router.get('/furaffinity/journal_comments/:id', lazyloadRouteHandler('./routes/f
// 博客来
router.get('/bookscomtw/newbooks/:category', lazyloadRouteHandler('./routes/bookscomtw/newbooks'));
-// Elite Babes
-router.get('/elitebabes/videos/:sort?', lazyloadRouteHandler('./routes/elitebabes/videos'));
-router.get('/elitebabes/search/:keyword?', lazyloadRouteHandler('./routes/elitebabes/search'));
-router.get('/elitebabes/:category?', lazyloadRouteHandler('./routes/elitebabes/index'));
-
// Trakt.tv
router.get('/trakt/collection/:username/:type?', lazyloadRouteHandler('./routes/trakt/collection'));
diff --git a/lib/routes/babehub/index.js b/lib/routes/babehub/index.js
deleted file mode 100644
index d145a3f44135e5..00000000000000
--- a/lib/routes/babehub/index.js
+++ /dev/null
@@ -1,30 +0,0 @@
-const utils = require('./utils');
-
-const categories = {
- 'most-viewed': {
- url: 'most-viewed',
- title: 'Most Viewed',
- },
- picture: {
- url: 'picture-archive',
- title: 'Pictures',
- },
- video: {
- url: 'video-archive',
- title: 'Videos',
- },
-};
-
-module.exports = async (ctx) => {
- const category = ctx.params.category || '';
- const title = `${category ? `${categories[category].title} - ` : ''}BabeHub`;
-
- const currentUrl = `${utils.rootUrl}/${category ? categories[category].url : ''}`;
-
- ctx.state.data = {
- title,
- link: currentUrl,
- itunes_author: title,
- item: await utils.fetch(ctx.cache, currentUrl),
- };
-};
diff --git a/lib/routes/babehub/search.js b/lib/routes/babehub/search.js
deleted file mode 100644
index 335c30c5f55a62..00000000000000
--- a/lib/routes/babehub/search.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const utils = require('./utils');
-
-module.exports = async (ctx) => {
- const keyword = ctx.params.keyword || '';
- const title = `${keyword ? `Search ${keyword} - ` : ''}BabeHub`;
-
- const currentUrl = `${utils.rootUrl}/${keyword ? `?s=${keyword}` : ''}`;
-
- ctx.state.data = {
- title,
- link: currentUrl,
- itunes_author: title,
- item: await utils.fetch(ctx.cache, currentUrl),
- };
-};
diff --git a/lib/routes/babehub/utils.js b/lib/routes/babehub/utils.js
deleted file mode 100644
index 1dae3f9fa8c527..00000000000000
--- a/lib/routes/babehub/utils.js
+++ /dev/null
@@ -1,71 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-const rootUrl = 'https://www.babehub.com';
-
-const fetch = async (cache, currentUrl) => {
- const response = await got({
- method: 'get',
- url: currentUrl,
- });
-
- const $ = cheerio.load(response.data);
-
- const list = $('.gallery-d li')
- .slice(0, 50)
- .map((_, item) => {
- item = $(item).children('a').eq(0);
- const image = item.find('img').eq(0);
- const date = item.find('.date').text();
-
- return {
- link: item.attr('href'),
- title: item.attr('title') || image.attr('alt'),
- itunes_item_image: image.attr('src'),
- pubDate: (date ? new Date(date.replace(/st|nd|rd|th/g, '')) : new Date()).toUTCString(),
- };
- })
- .get();
-
- const items = await Promise.all(
- list.map((item) =>
- cache.tryGet(item.link, async () => {
- try {
- const detailResponse = await got({
- method: 'get',
- url: item.link,
- });
- const content = cheerio.load(detailResponse.data);
-
- const video = content('video');
-
- item.description = '';
-
- if (video.length > 0) {
- const poster = detailResponse.data.match(/posterImage: "(.*)",/);
- item.itunes_item_image = (poster ? poster[1] : video.attr('poster')) || item.itunes_item_image;
-
- item.enclosure_type = 'video/mp4';
- item.enclosure_url = video.children('source').attr('src');
- item.description = ``;
- }
-
- content('.gallery-e li a').each(function () {
- item.description += ``;
- });
-
- return item;
- } catch (e) {
- return Promise.resolve('');
- }
- })
- )
- );
-
- return items;
-};
-
-module.exports = {
- rootUrl,
- fetch,
-};
diff --git a/lib/routes/baidu/doodles.js b/lib/routes/baidu/doodles.js
deleted file mode 100644
index 38be4f9a588c08..00000000000000
--- a/lib/routes/baidu/doodles.js
+++ /dev/null
@@ -1,27 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: 'http://logo.baidu.com/main/show_data/0/0/0/0',
- });
-
- const $ = cheerio.load(response.data);
-
- ctx.state.data = {
- title: '百度趣画',
- link: 'http://logo.baidu.com/',
- item: $('.col')
- .map((index, item) => {
- item = $(item);
-
- return {
- title: `${item.find('.title').text()}-${item.find('.date').text()}`,
- description: ``,
- link: item.find('.more a').attr('href'),
- };
- })
- .get(),
- };
-};
diff --git a/lib/routes/dilbert/strip.js b/lib/routes/dilbert/strip.js
deleted file mode 100644
index e4cae5bcbcc782..00000000000000
--- a/lib/routes/dilbert/strip.js
+++ /dev/null
@@ -1,54 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const Parser = require('rss-parser');
-const parser = new Parser();
-
-async function load(link, id) {
- const response = await got.get(link);
- const $ = cheerio.load(response.data);
-
- const context = $('.comic-item-container > .meta-info-container');
- const img = context.find('img.img-comic');
- const transcript = context.find('.comic-transcript p').html();
-
- const title = img.attr('alt').replace('Dilbert by Scott Adams', id);
- const src = img.attr('src');
-
- let description = ``;
- if (transcript) {
- description += `
${transcript}
`;
- }
-
- return {
- title,
- description,
- };
-}
-
-module.exports = async (ctx) => {
- const title = 'Dilbert Daily Strip';
- const feed_url = 'http://feed.dilbert.com/dilbert/daily_strip';
-
- const feed = await parser.parseURL(feed_url);
- const items = await Promise.all(
- feed.items.slice(0, 7).map(async (item) => {
- const link = item.link;
-
- const single = {
- pubDate: item.pubDate,
- link,
- };
-
- const other = await ctx.cache.tryGet(link, () => load(link, item.id));
-
- return Promise.resolve(Object.assign({}, single, other));
- })
- );
-
- ctx.state.data = {
- title,
- link: 'https://dilbert.com',
- description: title,
- item: items,
- };
-};
diff --git a/lib/routes/elitebabes/index.js b/lib/routes/elitebabes/index.js
deleted file mode 100644
index 83118a3dd7d56b..00000000000000
--- a/lib/routes/elitebabes/index.js
+++ /dev/null
@@ -1,30 +0,0 @@
-const utils = require('./utils');
-
-const categories = {
- hot: {
- url: 'trending',
- title: 'Hot',
- },
- popular: {
- url: 'most-viewed',
- title: 'Popular',
- },
- recent: {
- url: 'latest-updates',
- title: 'Recent',
- },
-};
-
-module.exports = async (ctx) => {
- const category = ctx.params.category || '';
- const title = `${category ? `${categories[category].title} - ` : ''}Elite Babes`;
-
- const currentUrl = `${utils.rootUrl}/${category ? categories[category].url : ''}`;
-
- ctx.state.data = {
- title,
- link: currentUrl,
- itunes_author: title,
- item: await utils.fetch(ctx.cache, currentUrl),
- };
-};
diff --git a/lib/routes/elitebabes/search.js b/lib/routes/elitebabes/search.js
deleted file mode 100644
index 7f782b795a9291..00000000000000
--- a/lib/routes/elitebabes/search.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const utils = require('./utils');
-
-module.exports = async (ctx) => {
- const keyword = ctx.params.keyword || '';
- const title = `${keyword ? `Search ${keyword} - ` : ''}Elite Babes`;
-
- const currentUrl = `${utils.rootUrl}/${keyword ? `?s=${keyword}` : ''}`;
-
- ctx.state.data = {
- title,
- link: currentUrl,
- itunes_author: title,
- item: await utils.fetch(ctx.cache, currentUrl),
- };
-};
diff --git a/lib/routes/elitebabes/utils.js b/lib/routes/elitebabes/utils.js
deleted file mode 100644
index 125f22f51698c2..00000000000000
--- a/lib/routes/elitebabes/utils.js
+++ /dev/null
@@ -1,88 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-const rootUrl = 'https://www.elitebabes.com';
-
-const fetch = async (cache, currentUrl) => {
- const response = await got({
- method: 'get',
- url: currentUrl,
- });
-
- const $ = cheerio.load(response.data);
-
- $('.clip-a, .displayblock').remove();
-
- const list = $('.gallery-a li')
- .slice(0, 50)
- .map((_, item) => {
- item = $(item).children('a').eq(0);
- const image = item.find('img').eq(0);
-
- return {
- link: item.attr('href'),
- title: item.attr('title') || image.attr('alt'),
- itunes_item_image: image.attr('src').replace('_200', '_400'),
- pubDate: (item.next()[0] ? new Date(item.next().text()) : new Date()).toUTCString(),
- };
- })
- .get();
-
- const items = await Promise.all(
- list.map((item) =>
- cache.tryGet(item.link, async () => {
- try {
- const detailResponse = await got({
- method: 'get',
- url: item.link,
- });
- const content = cheerio.load(detailResponse.data);
-
- content('input, .link-btn, .m-pagination').remove();
- content('.mobile-hide, .wide-hide').remove();
-
- if (item.link.indexOf(`${rootUrl}/model/`) === 0) {
- item.author = content('.fn').text();
- item.description = content('#content').html();
- return item;
- }
-
- const authors = [];
- const video = content('video');
-
- item.description = '';
-
- if (video.length > 0) {
- const poster = detailResponse.data.match(/posterImage: "(.*)",/);
- item.itunes_item_image = (poster ? poster[1] : video.attr('poster')) || item.itunes_item_image;
-
- item.enclosure_type = 'video/mp4';
- item.enclosure_url = video.children('source').attr('src');
- item.description = ``;
- }
-
- content('.link-btn h2 a').each(function () {
- authors.push(content(this).text());
- });
-
- item.author = authors.join(', ');
-
- content('.list-justified2 li a').each(function () {
- item.description += ``;
- });
-
- return item;
- } catch (e) {
- return Promise.resolve('');
- }
- })
- )
- );
-
- return items;
-};
-
-module.exports = {
- rootUrl,
- fetch,
-};
diff --git a/lib/routes/elitebabes/videos.js b/lib/routes/elitebabes/videos.js
deleted file mode 100644
index a5d14d59d92218..00000000000000
--- a/lib/routes/elitebabes/videos.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const utils = require('./utils');
-
-const sorts = {
- popular: {
- url: '',
- title: 'Popular',
- },
- recent: {
- url: 'latest',
- title: 'Recent',
- },
-};
-
-module.exports = async (ctx) => {
- const sort = ctx.params.sort || '';
- const title = `${sort ? sorts[sort].title : 'Popular'} videos - Elite Babes`;
-
- const currentUrl = `${utils.rootUrl}/videos${sort ? `?sort=${sorts[sort].url}` : ''}`;
-
- ctx.state.data = {
- title,
- link: currentUrl,
- itunes_author: title,
- item: await utils.fetch(ctx.cache, currentUrl),
- };
-};
diff --git a/lib/routes/girlimg/album.js b/lib/routes/girlimg/album.js
deleted file mode 100644
index 8997135b5b727a..00000000000000
--- a/lib/routes/girlimg/album.js
+++ /dev/null
@@ -1,57 +0,0 @@
-const got = require('@/utils/got');
-const CryptoJS = require('crypto-js');
-const password = 'gefdzfdef';
-
-module.exports = async (ctx) => {
- const tag = ctx.params.tag ? ctx.params.tag : 'all';
- const mode = ctx.params.mode ? ctx.params.mode : 'simple';
- const limit = 'simple' === mode ? 20 : 10;
-
- const url = `https://girlimg.epio.app/api/articles?lang=en-us&filter={"where":{"tag":"${tag}","lang":"en-us"},"limit":20,"skip":0}`;
-
- const index_json = await fetchUrl(url);
-
- const items = await Promise.all(
- index_json.slice(0, limit).map(async (item) => {
- const simple = {
- title: item.title,
- link: `https://girlimg.epio.app/article/detail/${item._id}`,
- pubDate: new Date(item.release_date).toUTCString(),
- };
- let details;
- if ('simple' === mode) {
- details = {
- description: item.cover,
- };
- } else {
- details = await ctx.cache.tryGet(item._id, async () => {
- const data = await fetchUrl(`https://girlimg.epio.app/api/articles/${item._id}?lang=en-us`);
- return {
- description: data.content,
- };
- });
- }
- return Promise.resolve(Object.assign({}, simple, details));
- })
- );
- ctx.state.data = {
- title: 'girlimg - album',
- link: `https://girlimg.epio.app`,
- item: items,
- };
-};
-
-async function fetchUrl(url) {
- const encrypt_json = (
- await got({
- method: 'get',
- url,
- headers: {
- Referer: 'https://girlimg.epio.app/',
- },
- })
- ).data;
-
- const bytes = CryptoJS.AES.decrypt(encrypt_json.string, password);
- return JSON.parse(bytes.toString(CryptoJS.enc.Utf8));
-}
diff --git a/lib/routes/gracg/user.js b/lib/routes/gracg/user.js
deleted file mode 100644
index 86c149be666f52..00000000000000
--- a/lib/routes/gracg/user.js
+++ /dev/null
@@ -1,65 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const url = ctx.params.love ? `https://www.gracg.com/${ctx.params.user}/love` : `https://www.gracg.com/${ctx.params.user}`;
- const response = await got({
- method: 'get',
- url,
- });
- const html = response.body;
- const $ = cheerio.load(html);
- const data = $('.TheWorksList').find('li');
-
- if (data.length === 0) {
- ctx.state.data = {
- title: `${ctx.params.user} 的涂鸦王国作品`,
- link: `https://gracg.com/${ctx.params.user}`,
- description: `${ctx.params.user} 的涂鸦王国作品`,
- };
- } else {
- const name = $('.userbox .username').text();
- const item = await Promise.all(
- data
- .slice(0, 10)
- .map(async (i, el) => {
- const link = $(el).find('.imgbox a').attr('href');
- const pics = await ctx.cache.tryGet(link, async () => {
- const res = await got.get(link);
- const $1 = cheerio.load(res.body);
- return $1('.workPage-images img')
- .map((i, el) => $1(el).attr('src'))
- .get();
- });
- const description = generateItemDesc(pics);
- return {
- title: $(el).find('.infobox .titles').text(),
- description,
- pubDate: new Date($(el).find('.infobox .time').text()).toUTCString(),
- link,
- };
- })
- .get()
- );
-
- ctx.state.data = {
- title: `${name} 的涂鸦王国作品`,
- link: `https://gracg.com/${ctx.params.user}`,
- description: `${name} 的涂鸦王国作品`,
- item,
- };
- }
-};
-
-/**
- * 根据图片链接生成 html
- * @param {Array} pics
- * @return {String} itemDesc
- */
-function generateItemDesc(pics) {
- const itemDesc = pics.reduce((acc, pic) => {
- acc += ` {
- const url = ctx.params.type ? `https://ja.hentai-cosplays.com/search/${ctx.params.type}/${encodeURIComponent(ctx.params.name)}/` : 'https://ja.hentai-cosplays.com/search/';
- const items = await processFeed(url);
- ctx.state.data = {
- title: `${ctx.params.name || '新着コスプレ一覧'} - エロコスプレ`,
- link: url,
- item: items,
- };
-};
diff --git a/lib/routes/jdlingyu/index.js b/lib/routes/jdlingyu/index.js
deleted file mode 100644
index cad3101c3e913d..00000000000000
--- a/lib/routes/jdlingyu/index.js
+++ /dev/null
@@ -1,45 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-const baseUrl = 'https://www.jdlingyu.mobi/';
-const viewProps = {
- tuji: '图集',
- as: '文章',
-};
-
-module.exports = async (ctx) => {
- const type = ctx.params.type || 'tuji';
- const url = baseUrl + type;
- const response = await got({
- method: 'get',
- url,
- });
- const $ = cheerio.load(response.data);
-
- const items = await Promise.all(
- $('#post-list > ul.b2_gap > li')
- .get()
- .map(async (div) => {
- const a = $(div).find('.post-info > h2 > a');
- const link = a.attr('href');
- const description = await ctx.cache.tryGet(link, async () => {
- const response = await got.get(link);
- const $ = cheerio.load(response.data);
- return $('.entry-content > p').html();
- });
- return Promise.resolve({
- title: a.text(),
- description,
- author: $(div).find('.post-header .users').text(),
- link,
- pubDate: new Date($(div).find('.post-header time').attr('datetime')).toUTCString(),
- });
- })
- );
- ctx.state.data = {
- title: `${viewProps[type]} - 绝对领域`,
- link: url,
- description: `${viewProps[type]} - 绝对领域`,
- item: items,
- };
-};
diff --git a/lib/routes/loveheaven/update.js b/lib/routes/loveheaven/update.js
deleted file mode 100644
index 96177b0bc3efef..00000000000000
--- a/lib/routes/loveheaven/update.js
+++ /dev/null
@@ -1,45 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const chrono = require('chrono-node');
-
-const base = 'https://loveheaven.net/';
-
-module.exports = async (ctx) => {
- const slug = ctx.params.slug;
-
- const url = `https://loveheaven.net/manga-${slug.replace(/^manga-/, '').replace(/\.html$/, '')}.html`;
-
- const response = await got.get(url);
- const $ = cheerio.load(response.data);
-
- const manga_name = $('.manga-info > h1').text();
- const manga_other_names = $('.manga-info > li:nth-child(3)').text();
- const manga_author = $('a.btn-info')
- .map(function () {
- return $(this).text();
- })
- .get()
- .join(', ');
- const manga_cover = $('img.thumbnail').attr('src');
-
- const list = $('.tab-text .table > tbody > tr').get();
-
- ctx.state.data = {
- title: `${manga_name} - LoveHeaven`,
- description: manga_other_names,
- link: url,
- image: manga_cover,
- item: list.slice(0, 20).map((item) => {
- item = $(item);
- const entry = item.find('a');
- const humanized_date = item.find('time').text();
- return {
- title: entry.text(),
- author: manga_author,
- description: ``,
- link: base + entry.attr('href'),
- pubDate: humanized_date ? chrono.parseDate(humanized_date) : new Date(),
- };
- }),
- };
-};
diff --git a/lib/routes/mzitu/category.js b/lib/routes/mzitu/category.js
deleted file mode 100644
index 7af3bef985703f..00000000000000
--- a/lib/routes/mzitu/category.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const got = require('@/utils/got');
-const { getItem } = require('./util');
-
-const map = {
- xinggan: '性感妹子',
- japan: '日本妹子',
- taiwan: '台湾妹子',
- mm: '清纯妹子',
-};
-
-module.exports = async (ctx) => {
- const { category } = ctx.params;
-
- const url = `https://www.mzitu.com/${category}`;
- const response = await got({
- method: 'get',
- url,
- });
- const items = await getItem(ctx, response.data);
-
- ctx.state.data = {
- title: `妹子图-${map[category]} `,
- link: url,
- item: items,
- };
-};
diff --git a/lib/routes/mzitu/home.js b/lib/routes/mzitu/home.js
deleted file mode 100644
index b736b3f89fd6c1..00000000000000
--- a/lib/routes/mzitu/home.js
+++ /dev/null
@@ -1,32 +0,0 @@
-const got = require('@/utils/got');
-const { getItem } = require('./util');
-
-module.exports = async (ctx) => {
- const { type = '' } = ctx.params;
- let url;
- let title = '妹子图';
-
- if (type === 'hot') {
- title += '-最热';
- url = 'https://www.mzitu.com/hot/';
- } else if (type === 'best') {
- title += '-推荐';
- url = 'https://www.mzitu.com/best/';
- } else {
- title += '-最新';
- url = 'https://www.mzitu.com/';
- }
-
- const response = await got({
- method: 'get',
- url,
- });
-
- const items = await getItem(ctx, response.data);
-
- ctx.state.data = {
- title,
- link: url,
- item: items,
- };
-};
diff --git a/lib/routes/mzitu/post.js b/lib/routes/mzitu/post.js
deleted file mode 100644
index 7bca9cb9978205..00000000000000
--- a/lib/routes/mzitu/post.js
+++ /dev/null
@@ -1,41 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const { id } = ctx.params;
-
- const link = `http://www.mzitu.com/${id}`;
- const response = await got({
- method: 'get',
- url: link,
- });
- const $ = cheerio.load(response.data);
- const page_lengh = $('div.pagenavi > a:nth-last-child(2) > span').text();
- const title = $('h2.main-title').text();
-
- const pages = Array.from({ length: page_lengh }, (v, i) => i);
-
- ctx.state.data = {
- title,
- link,
- item: await Promise.all(
- pages.map(async (page) => {
- const page_link = link + '/' + (page + 1).toString();
-
- const response = await got({
- method: 'get',
- url: page_link,
- });
- const $ = cheerio.load(response.data);
- const item_link = $('div.main-image img').attr('src');
- const item_title = `${title} (${page + 1})`;
- const description = ``;
- return {
- title: item_title,
- link: page_link,
- description,
- };
- })
- ),
- };
-};
diff --git a/lib/routes/mzitu/tag.js b/lib/routes/mzitu/tag.js
deleted file mode 100644
index 385e6e37eaebd2..00000000000000
--- a/lib/routes/mzitu/tag.js
+++ /dev/null
@@ -1,25 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const { getItem } = require('./util');
-
-module.exports = async (ctx) => {
- let tag = ctx.params.tag;
- tag = tag === undefined || tag === 'undefined' ? '' : tag;
-
- const link = `https://www.mzitu.com/tag/${tag}`;
- const response = await got({
- method: 'get',
- url: link,
- });
- const $ = cheerio.load(response.data);
- const items = await getItem(ctx, response.data);
-
- let name = $('div.currentpath').text();
- name = name.split('»')[1];
-
- ctx.state.data = {
- title: name,
- link,
- item: items,
- };
-};
diff --git a/lib/routes/mzitu/tags.js b/lib/routes/mzitu/tags.js
deleted file mode 100644
index 0b9e67103fdd89..00000000000000
--- a/lib/routes/mzitu/tags.js
+++ /dev/null
@@ -1,23 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const link = 'https://www.mzitu.com/zhuanti';
-
- const response = await got({
- method: 'get',
- url: link,
- });
- const $ = cheerio.load(response.data);
- const list = $('div.postlist > dl > dd').get();
-
- ctx.state.data = {
- title: '妹子图专题',
- link,
- description: '妹子图美女专题栏目,为您精心准备各种美女图片专题,包括名站美女写真,妹子特点分类,美女大全等专题。',
- item: list.map((item) => ({
- title: $(item).find('img').attr('alt'),
- link: $(item).find('a').attr('href'),
- })),
- };
-};
diff --git a/lib/routes/mzitu/util.js b/lib/routes/mzitu/util.js
deleted file mode 100644
index da53899341cfe4..00000000000000
--- a/lib/routes/mzitu/util.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-exports.getItem = (ctx, data) => {
- const $ = cheerio.load(data);
- const list = $('#pins li').get().slice(0, 5);
-
- return Promise.all(
- list.map(async (item) => {
- const title = $(item).find('span > a').text();
- const item_link = $(item).find('span > a').attr('href');
-
- const cache = await ctx.cache.get(item_link);
- let description;
- if (cache) {
- description = cache;
- } else {
- const response = await got({
- method: 'get',
- url: item_link,
- });
- const $ = cheerio.load(response.data);
- const page_lengh = $('div.pagenavi > a:nth-last-child(2) > span').text();
-
- const pages = Array.from({ length: page_lengh }, (v, i) => i);
- const description_list = await Promise.all(
- pages.map(async (page) => {
- const page_link = item_link + '/' + (page + 1).toString();
-
- const response = await got({
- method: 'get',
- url: page_link,
- });
- const $ = cheerio.load(response.data);
-
- return `
`;
- })
- );
-
- description = description_list.join('');
- ctx.cache.set(item_link, description);
- }
-
- return {
- title,
- description,
- link: item_link,
- };
- })
- );
-};
diff --git a/lib/routes/zhutix/latest.js b/lib/routes/zhutix/latest.js
deleted file mode 100644
index 4c20403e72b965..00000000000000
--- a/lib/routes/zhutix/latest.js
+++ /dev/null
@@ -1,41 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const currentUrl = 'https://zhutix.com/';
- const response = await got({
- method: 'get',
- url: currentUrl,
- });
- const $ = cheerio.load(response.data);
- const list = $('#main div.grid-bor div.content-card')
- .slice(0, 10)
- .map((_, item) => {
- item = $(item);
- const a = item.find('a');
- return {
- title: a.text(),
- link: a.attr('href'),
- pubDate: new Date(item.find('i.feng-liulanjilu').parent().text()).toUTCString(),
- };
- })
- .get();
-
- const items = await Promise.all(
- list.map((item) =>
- ctx.cache.tryGet(item.link, async () => {
- const res = await got({ method: 'get', url: item.link });
- const content = cheerio.load(res.data);
-
- item.description = content('#entry-content').html();
- return item;
- })
- )
- );
-
- ctx.state.data = {
- title: '致美化 - 最新主题',
- link: currentUrl,
- item: items,
- };
-};
diff --git a/lib/v2/35photo/actual.js b/lib/v2/35photo/actual.js
deleted file mode 100644
index c9c132fd70ea01..00000000000000
--- a/lib/v2/35photo/actual.js
+++ /dev/null
@@ -1,7 +0,0 @@
-const { rootUrl, ProcessItems } = require('./utils');
-
-module.exports = async (ctx) => {
- const currentUrl = `${rootUrl}/new/actual`;
-
- ctx.state.data = await ProcessItems(currentUrl);
-};
diff --git a/lib/v2/35photo/author.js b/lib/v2/35photo/author.js
deleted file mode 100644
index 10bdbaf8b0fbcb..00000000000000
--- a/lib/v2/35photo/author.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const { rootUrl, ProcessItems } = require('./utils');
-
-module.exports = async (ctx) => {
- const id = ctx.params.id;
-
- const currentUrl = `${rootUrl}/${id}`;
-
- ctx.state.data = await ProcessItems(currentUrl);
-};
diff --git a/lib/v2/35photo/genre.js b/lib/v2/35photo/genre.js
deleted file mode 100644
index 66da8f11e162a4..00000000000000
--- a/lib/v2/35photo/genre.js
+++ /dev/null
@@ -1,10 +0,0 @@
-const { rootUrl, ProcessItems } = require('./utils');
-
-module.exports = async (ctx) => {
- const id = ctx.params.id;
-
- const currentUrl = `${rootUrl}/genre_${id}`;
- const apiUrl = `${rootUrl}/show_block.php?type=getNextPageData&page=genre&community_id=${id}`;
-
- ctx.state.data = await ProcessItems(currentUrl, apiUrl);
-};
diff --git a/lib/v2/35photo/interesting.js b/lib/v2/35photo/interesting.js
deleted file mode 100644
index be4c36d6a80a17..00000000000000
--- a/lib/v2/35photo/interesting.js
+++ /dev/null
@@ -1,7 +0,0 @@
-const { rootUrl, ProcessItems } = require('./utils');
-
-module.exports = async (ctx) => {
- const currentUrl = `${rootUrl}/new/interesting`;
-
- ctx.state.data = await ProcessItems(currentUrl);
-};
diff --git a/lib/v2/35photo/maintainer.js b/lib/v2/35photo/maintainer.js
deleted file mode 100644
index 4d090293353422..00000000000000
--- a/lib/v2/35photo/maintainer.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = {
- '/actual': ['nczitzk'],
- '/author/:id': ['nczitzk'],
- '/genre/:id': ['nczitzk'],
- '/interesting': ['nczitzk'],
- '/map': ['nczitzk'],
- '/new': ['nczitzk'],
-};
diff --git a/lib/v2/35photo/map.js b/lib/v2/35photo/map.js
deleted file mode 100644
index 8e2550ec0b757b..00000000000000
--- a/lib/v2/35photo/map.js
+++ /dev/null
@@ -1,7 +0,0 @@
-const { rootUrl, ProcessItems } = require('./utils');
-
-module.exports = async (ctx) => {
- const currentUrl = `${rootUrl}/new/map`;
-
- ctx.state.data = await ProcessItems(currentUrl);
-};
diff --git a/lib/v2/35photo/new.js b/lib/v2/35photo/new.js
deleted file mode 100644
index ff962b54665618..00000000000000
--- a/lib/v2/35photo/new.js
+++ /dev/null
@@ -1,7 +0,0 @@
-const { rootUrl, ProcessItems } = require('./utils');
-
-module.exports = async (ctx) => {
- const currentUrl = `${rootUrl}/new`;
-
- ctx.state.data = await ProcessItems(currentUrl);
-};
diff --git a/lib/v2/35photo/radar.js b/lib/v2/35photo/radar.js
deleted file mode 100644
index c46af775eb1a88..00000000000000
--- a/lib/v2/35photo/radar.js
+++ /dev/null
@@ -1,43 +0,0 @@
-module.exports = {
- '35photo.pro': {
- _name: '35PHOTO',
- '.': [
- {
- title: 'New photos',
- docs: 'https://docs.rsshub.app/routes/picture#35photo-new-photos',
- source: ['/new', '/'],
- target: '/35photo/new',
- },
- {
- title: 'Featured photos',
- docs: 'https://docs.rsshub.app/routes/picture#35photo-featured-photos',
- source: ['/new/actual', '/'],
- target: '/35photo/actual',
- },
- {
- title: 'New interesting',
- docs: 'https://docs.rsshub.app/routes/picture#35photo-new-interesting',
- source: ['/new/interesting', '/'],
- target: '/35photo/interesting',
- },
- {
- title: 'Photos on the world map',
- docs: 'https://docs.rsshub.app/routes/picture#35photo-photos-on-the-world-map',
- source: ['/new/map', '/'],
- target: '/35photo/map',
- },
- {
- title: 'Genre',
- docs: 'https://docs.rsshub.app/routes/picture#35photo-genre',
- source: ['/'],
- target: (params, url) => `/35photo/genre/${url.match(/genre_(\d+)/)[1]}`,
- },
- {
- title: 'Author',
- docs: 'https://docs.rsshub.app/routes/picture#35photo-author',
- source: ['/:id', '/'],
- target: '/35photo/author/:id',
- },
- ],
- },
-};
diff --git a/lib/v2/35photo/router.js b/lib/v2/35photo/router.js
deleted file mode 100644
index 0975e35a37d255..00000000000000
--- a/lib/v2/35photo/router.js
+++ /dev/null
@@ -1,8 +0,0 @@
-module.exports = function (router) {
- router.get('/actual', require('./actual'));
- router.get('/author/:id', require('./author'));
- router.get('/genre/:id', require('./genre'));
- router.get('/interesting', require('./interesting'));
- router.get('/map', require('./map'));
- router.get('/new', require('./new'));
-};
diff --git a/lib/v2/35photo/utils.js b/lib/v2/35photo/utils.js
deleted file mode 100644
index fc0dac09603ebf..00000000000000
--- a/lib/v2/35photo/utils.js
+++ /dev/null
@@ -1,57 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-const rootUrl = 'https://35photo.pro';
-
-module.exports = {
- rootUrl,
- ProcessItems: async (currentUrl, apiUrl) => {
- let $, response;
-
- response = await got({
- method: 'get',
- url: currentUrl,
- });
-
- const data = response.data;
-
- $ = cheerio.load(data);
-
- const title = $('h1').text();
-
- if (apiUrl) {
- response = await got({
- method: 'get',
- url: `${apiUrl}&lastId=${$('div.countLike').last().attr('photo-id')}`,
- });
-
- $ = cheerio.load(data + response.data.data);
- }
-
- const items = $('.item')
- .toArray()
- .map((item) => {
- item = $(item);
-
- const image = item.find('.showPrevPhoto');
-
- return {
- title: image.attr('title').replace(/Photographer\\'s photo - /, ''),
- link: image.parent().attr('href'),
- author: item.next().find('.userName').text().replace(/© /, ''),
- category: image
- .attr('alt')
- .replace(/photo preview/g, '')
- .split(/,|#/)
- .map((c) => c.trim()),
- description: ``,
- };
- });
-
- return {
- title: `${title} - 35PHOTO`,
- link: currentUrl,
- item: items,
- };
- },
-};
diff --git a/lib/v2/dbmv/index.js b/lib/v2/dbmv/index.js
deleted file mode 100644
index 6d99a209dda22b..00000000000000
--- a/lib/v2/dbmv/index.js
+++ /dev/null
@@ -1,64 +0,0 @@
-const got = require('@/utils/got');
-const cherrio = require('cheerio');
-const { parseDate } = require('@/utils/parse-date');
-const timezone = require('@/utils/timezone');
-
-module.exports = async (ctx) => {
- const { category = '' } = ctx.params;
- let url;
-
- if (category !== '') {
- url = 'https://www.buxiuse.com/?cid=' + category;
- } else {
- url = 'https://www.buxiuse.com';
- }
-
- const response = await got({
- url,
- headers: {
- Referer: 'https://www.buxiuse.com',
- },
- });
-
- const data = response.data;
- const $ = cherrio.load(data);
-
- let resultItem = $('li.span3 img')
- .toArray()
- .map((item) => {
- item = $(item);
- const img_url = item.attr('src');
- return {
- title: item.attr('title'),
- link: item.parent().attr('href'),
- description: ``,
- guid: img_url,
- };
- });
-
- resultItem = await Promise.all(
- resultItem.map((item) =>
- ctx.cache.tryGet(item.link, async () => {
- const detailResponse = await got({
- url: item.link,
- headers: {
- Referer: url,
- },
- });
- const detailData = detailResponse.data;
- const $ = cherrio.load(detailData);
-
- item.author = $('li.name').text();
- item.pubDate = timezone(parseDate($('div.info abbr').attr('title')), +8);
- return item;
- })
- )
- );
-
- ctx.state.data = {
- title: $('title').text(),
- link: url,
- item: resultItem,
- description: '不羞涩 | 真实的图片分享交友社区',
- };
-};
diff --git a/lib/v2/dbmv/maintainer.js b/lib/v2/dbmv/maintainer.js
deleted file mode 100644
index b9119095dbe431..00000000000000
--- a/lib/v2/dbmv/maintainer.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- '/:category?': ['kba977'],
-};
diff --git a/lib/v2/dbmv/radar.js b/lib/v2/dbmv/radar.js
deleted file mode 100644
index 99b51a1762c99a..00000000000000
--- a/lib/v2/dbmv/radar.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- 'buxiuse.com': {
- _name: '不羞涩',
- '.': [
- {
- title: '分类',
- docs: 'https://docs.rsshub.app/routes/picture#bu-xiu-se',
- source: '/',
- target: (_params, url) => `/dbmv${new URL(url).searchParams.has('cid') ? `/${new URL(url).searchParams.get('cid')}` : ''}`,
- },
- ],
- },
-};
diff --git a/lib/v2/dbmv/router.js b/lib/v2/dbmv/router.js
deleted file mode 100644
index 9885c36f134815..00000000000000
--- a/lib/v2/dbmv/router.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = (router) => {
- router.get('/:category?', require('./index'));
-};
diff --git a/lib/v2/google/router.js b/lib/v2/google/router.js
index ff5da905182d8b..b3064cf1ccae8d 100644
--- a/lib/v2/google/router.js
+++ b/lib/v2/google/router.js
@@ -6,6 +6,4 @@ module.exports = function (router) {
router.get('/fonts/:sort?', require('./fonts'));
router.get('/news/:category/:locale', require('./news'));
router.get('/scholar/:query', require('./scholar'));
- router.get('/sites/recentChanges/:id', require('./sitesRecentChanges'));
- router.get('/sites/:id', require('./sites'));
};
diff --git a/lib/v2/google/sitesRecentChanges.js b/lib/v2/google/sitesRecentChanges.js
deleted file mode 100644
index de5d308d631cbb..00000000000000
--- a/lib/v2/google/sitesRecentChanges.js
+++ /dev/null
@@ -1,51 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const { parseDate } = require('@/utils/parse-date');
-
-module.exports = async (ctx) => {
- const id = ctx.params.id;
-
- const rootUrl = 'https://sites.google.com';
- const currentUrl = `${rootUrl}/site/${id}/activity.xml`;
- const response = await got({
- method: 'get',
- url: currentUrl,
- });
-
- const $ = cheerio.load(response.data);
-
- let items = $('entry')
- .toArray()
- .map((item) => {
- item = $(item);
-
- return {
- title: item.find('summary').text(),
- link: item.find('summary a').attr('href'),
- pubDate: parseDate(item.find('updated').text()),
- author: item.find('author name').text(),
- };
- });
-
- items = await Promise.all(
- items.map((item) =>
- ctx.cache.tryGet(item.link, async () => {
- const detailResponse = await got({
- method: 'get',
- url: item.link,
- });
- const content = cheerio.load(detailResponse.data);
-
- item.description = content('#sites-canvas').html();
-
- return item;
- })
- )
- );
-
- ctx.state.data = {
- title: $('feed title').first().text(),
- link: currentUrl,
- item: items,
- };
-};
diff --git a/lib/v2/meituclub/latest.js b/lib/v2/meituclub/latest.js
deleted file mode 100644
index e05eec2b574001..00000000000000
--- a/lib/v2/meituclub/latest.js
+++ /dev/null
@@ -1,41 +0,0 @@
-const path = require('path');
-const cheerio = require('cheerio');
-const got = require('@/utils/got');
-const { art } = require('@/utils/render');
-const { parseDate } = require('@/utils/parse-date');
-const timezone = require('@/utils/timezone');
-
-const HOME_URL = 'https://www.meituclub.com/';
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: HOME_URL,
- });
-
- const data = response.data;
-
- const $ = cheerio.load(data);
- const list = $('#index-tab-main .posts-item.card');
-
- ctx.state.data = {
- title: '妹图社 - 最新',
- link: HOME_URL,
- item: list
- .map((index, item) => {
- item = $(item);
- const img = item.find('.item-thumbnail').find('img');
- const heading = item.find('.item-heading').find('a');
- return {
- title: heading.text(),
- description: art(path.join(__dirname, 'templates/description.art'), {
- src: img.attr('data-src'),
- alt: img.attr('alt'),
- }),
- link: heading.attr('href'),
- pubDate: timezone(parseDate(item.find('.item-meta').find('.icon-circle').attr('title'), 'YYYY-MM-DD HH:mm:ss'), +8),
- };
- })
- .get(),
- };
-};
diff --git a/lib/v2/meituclub/maintainer.js b/lib/v2/meituclub/maintainer.js
deleted file mode 100644
index 0a784e3fc1e64c..00000000000000
--- a/lib/v2/meituclub/maintainer.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- '/latest': ['ocleo1'],
-};
diff --git a/lib/v2/meituclub/radar.js b/lib/v2/meituclub/radar.js
deleted file mode 100644
index c2fbee36df7368..00000000000000
--- a/lib/v2/meituclub/radar.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- 'meituclub.com': {
- _name: '妹图社',
- '.': [
- {
- title: '最新',
- docs: 'https://docs.rsshub.app/routes/picture#mei-tu-she-zui-xin',
- source: ['/'],
- target: '/meituclub/latest',
- },
- ],
- },
-};
diff --git a/lib/v2/meituclub/router.js b/lib/v2/meituclub/router.js
deleted file mode 100644
index c7599855e195b8..00000000000000
--- a/lib/v2/meituclub/router.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = function (router) {
- router.get('/latest', require('./latest'));
-};
diff --git a/lib/v2/meituclub/templates/description.art b/lib/v2/meituclub/templates/description.art
deleted file mode 100644
index c961f7a31ef159..00000000000000
--- a/lib/v2/meituclub/templates/description.art
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/website/docs/routes/picture.mdx b/website/docs/routes/picture.mdx
index db905f42432e56..b86598e33888c0 100644
--- a/website/docs/routes/picture.mdx
+++ b/website/docs/routes/picture.mdx
@@ -165,20 +165,6 @@
-## BabeHub {#babehub}
-
-### Category {#babehub-category}
-
-
- | Home | Most Viewed | Picture Archive | Video Archive |
- | ---- | ----------- | --------------- | ------------- |
- | | most-viewed | picture | video |
-
-
-### Search {#babehub-search}
-
-
-
## Bing Wallpaper {#bing-wallpaper}
### Daily Wallpaper {#bing-wallpaper-daily-wallpaper}
@@ -218,14 +204,6 @@
-## Dilbert Comic Strip {#dilbert-comic-strip}
-
-### Dilbert Comic Strip {#dilbert-comic-strip-dilbert-comic-strip}
-
-
- 通过提取漫画,提供比官方源更佳的阅读体验。
-
-
## E-Hentai {#e-hentai}
For RSS content, specify options in the `routeParams` parameter in query string format to control additional functionality
@@ -247,28 +225,6 @@ For RSS content, specify options in the `routeParams` parameter in query string
-## Elite Babes {#elite-babes}
-
-### Home {#elite-babes-home}
-
-
- | Home | Hot | Popular | Recent |
- | ---- | --- | ------- | ------ |
- | | hot | popular | recent |
-
-
-### Videos {#elite-babes-videos}
-
-
- | Popular | Recent |
- | ------- | ------ |
- | popular | recent |
-
-
-### Search {#elite-babes-search}
-
-
-
## Fantia {#fantia}
### Search {#fantia-search}
@@ -329,12 +285,6 @@ For RSS content, specify options in the `routeParams` parameter in query string
-## GirlImg {#girlimg}
-
-### album {#girlimg-album}
-
-
-
## GoComics {#gocomics}
### Comic Strips {#gocomics-comic-strips}
@@ -353,12 +303,6 @@ For RSS content, specify options in the `routeParams` parameter in query string
-## Hentai Cosplay {#hentai-cosplay}
-
-### 最新图片 {#hentai-cosplay-zui-xin-tu-pian}
-
-
-
## Konachan Anime Wallpapers {#konachan-anime-wallpapers}
:::tip
@@ -378,17 +322,11 @@ For RSS content, specify options in the `routeParams` parameter in query string
- 1 year: [https://rsshub.app/konachan/post/popular\_recent/1y](https://rsshub.app/konachan/post/popular_recent/1y)
-## LoveHeaven {#loveheaven}
-
-### Manga Updates {#loveheaven-manga-updates}
-
-
-
## Mic Mic Idol {#mic-mic-idol}
### Latest {#mic-mic-idol-latest}
-
+
### 标签 {#mic-mic-idol-biao-qian}
@@ -532,28 +470,12 @@ For example [Latest Wallpapers](https://wallhaven.cc/latest), the route turning
- 1 year: [https://rsshub.app/yande.re/post/popular\_recent/1y](https://rsshub.app/yande.re/post/popular_recent/1y)
-## 百度趣画 {#bai-du-qu-hua}
-
-### 更新 {#bai-du-qu-hua-geng-xin}
-
-
-
## 北京天文馆 {#bei-jing-tian-wen-guan}
### 每日一图 {#bei-jing-tian-wen-guan-mei-ri-yi-tu}
-## 不羞涩 {#bu-xiu-se}
-
-### 分类 {#bu-xiu-se-fen-lei}
-
-
- | 大胸妹 | 小翘臀 | 黑丝袜 | 美腿控 | 有颜值 | 大杂烩 |
- | ------ | ------ | ------ | ------ | ------ | ------ |
- | 2 | 6 | 7 | 3 | 4 | 5 |
-
-
## 煎蛋 {#jian-dan}
### 板块 {#jian-dan-ban-kuai}
@@ -576,16 +498,6 @@ For example [Latest Wallpapers](https://wallhaven.cc/latest), the route turning
-## 绝对领域 {#jue-dui-ling-yu}
-
-### 图集文章 {#jue-dui-ling-yu-tu-ji-wen-zhang}
-
-
-
-| 图集 | 文章 |
-| ---- | ---- |
-| tuji | as |
-
## 酷 18 {#ku-18}
### 分站 {#ku-18-fen-zhan}
@@ -610,38 +522,6 @@ For example [Latest Wallpapers](https://wallhaven.cc/latest), the route turning
-## 妹图社 {#mei-tu-she}
-
-### 最新 {#mei-tu-she-zui-xin}
-
-
-
-## 妹子图 {#mei-zi-tu}
-
-### 首页(最新) {#mei-zi-tu-shou-ye-zui-xin}
-
-
-
-### 分类 {#mei-zi-tu-fen-lei}
-
-
- | 性感妹子 | 日本妹子 | 台湾妹子 | 清纯妹子 |
- | -------- | -------- | -------- | -------- |
- | xinggan | japan | taiwan | mm |
-
-
-### 所有专题 {#mei-zi-tu-suo-you-zhuan-ti}
-
-
-
-### 专题详情 {#mei-zi-tu-zhuan-ti-xiang-qing}
-
-
-
-### 详情 {#mei-zi-tu-xiang-qing}
-
-
-
## 喷嚏 {#pen-ti}
### 图卦 {#pen-ti-tu-gua}
@@ -657,15 +537,3 @@ For example [Latest Wallpapers](https://wallhaven.cc/latest), the route turning
### 频道 {#qi-pa-mai-jia-xiu-pin-dao}
-
-## 涂鸦王国 {#tu-ya-wang-guo}
-
-### 用户上传作品和用户喜欢作品 {#tu-ya-wang-guo-yong-hu-shang-chuan-zuo-pin-he-yong-hu-xi-huan-zuo-pin}
-
-
-
-## 致美化 {#zhi-mei-hua}
-
-### 最新主题 {#zhi-mei-hua-zui-xin-zhu-ti}
-
-