From fe6117a4210787f2fe8b3fc737cbfb657b25e129 Mon Sep 17 00:00:00 2001
From: DIYgod
Date: Thu, 21 Dec 2023 02:46:58 +0800
Subject: [PATCH] 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 a633fc396..0eb14c176 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 d145a3f44..000000000
--- 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 335c30c5f..000000000
--- 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 1dae3f9fa..000000000
--- 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 38be4f9a5..000000000
--- 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 e4cae5bcb..000000000
--- 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 83118a3dd..000000000
--- 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 7f782b795..000000000
--- 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 125f22f51..000000000
--- 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 a5d14d59d..000000000
--- 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 8997135b5..000000000
--- 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 86c149be6..000000000
--- 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 cad3101c3..000000000
--- 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 96177b0bc..000000000
--- 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 7af3bef98..000000000
--- 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 b736b3f89..000000000
--- 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 7bca9cb99..000000000
--- 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 385e6e37e..000000000
--- 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 0b9e67103..000000000
--- 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 da5389934..000000000
--- 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 `.attr('src')})
`;
- })
- );
-
- 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 4c20403e7..000000000
--- 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 c9c132fd7..000000000
--- 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 10bdbaf8b..000000000
--- 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 66da8f11e..000000000
--- 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 be4c36d6a..000000000
--- 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 4d0902933..000000000
--- 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 8e2550ec0..000000000
--- 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 ff962b546..000000000
--- 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 c46af775e..000000000
--- 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 0975e35a3..000000000
--- 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 fc0dac096..000000000
--- 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 6d99a209d..000000000
--- 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 b9119095d..000000000
--- 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 99b51a176..000000000
--- 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 9885c36f1..000000000
--- 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 ff5da9051..b3064cf1c 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 de5d308d6..000000000
--- 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 e05eec2b5..000000000
--- 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 0a784e3fc..000000000
--- 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 c2fbee36d..000000000
--- 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 c7599855e..000000000
--- 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 c961f7a31..000000000
--- 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 db905f424..b86598e33 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}
-
-