From 6d898277a027fc435b2181af5c48cfed06ae447c Mon Sep 17 00:00:00 2001
From: DIYgod
Date: Wed, 20 Dec 2023 01:52:09 +0800
Subject: [PATCH] feat: remove notOperational routes - multimedia
---
assets/radar-rules.js | 27 ---
lib/radar-rules.js | 62 -------
lib/router.js | 58 ------
lib/routes/changku/index.js | 39 -----
lib/routes/ddrk/index.js | 2 +-
lib/routes/ddrk/list.js | 2 +-
lib/routes/dysfz/index.js | 20 ---
lib/routes/gaoqingla/latest.js | 37 ----
lib/routes/mp4ba/index.js | 133 --------------
lib/routes/mqube/latest.js | 21 ---
lib/routes/mqube/tag.js | 23 ---
lib/routes/mqube/top.js | 21 ---
lib/routes/mqube/user.js | 25 ---
lib/routes/nfmovies/index.js | 58 ------
lib/routes/ningmeng/song.js | 77 --------
lib/routes/piaohua/hot.js | 37 ----
lib/routes/rs05/rs05.js | 35 ----
lib/routes/s-hentai/index.js | 64 -------
lib/routes/sankakucomplex/post.js | 50 ------
lib/routes/shinybbs/index.js | 60 -------
lib/routes/shinybbs/latest.js | 57 ------
lib/routes/shinybbs/p.js | 38 ----
lib/routes/tencent/video/playlist.js | 46 -----
lib/routes/wanwansub/index.js | 57 ------
lib/routes/wanwansub/info.js | 44 -----
lib/routes/yahoo-jp-tv/index.js | 21 ---
lib/routes/zimuku/index.js | 2 +-
lib/routes/zimuzu/resource.js | 19 --
lib/routes/zimuzu/top.js | 27 ---
lib/v2/aliyundrive/files.js | 59 -------
lib/v2/aliyundrive/maintainer.js | 3 -
lib/v2/aliyundrive/radar.js | 13 --
lib/v2/aliyundrive/router.js | 3 -
lib/v2/gaze/maintainer.js | 3 -
lib/v2/gaze/radar.js | 13 --
lib/v2/gaze/router.js | 3 -
lib/v2/gaze/templates/update.art | 4 -
lib/v2/gaze/update.js | 27 ---
lib/v2/ibc/maintainer.js | 4 -
lib/v2/ibc/maitta.js | 32 ----
lib/v2/ibc/radar.js | 19 --
lib/v2/ibc/radio.js | 73 --------
lib/v2/ibc/router.js | 4 -
lib/v2/ibc/templates/description.art | 6 -
lib/v2/mtime/maintainer.js | 3 -
lib/v2/mtime/news.js | 52 ------
lib/v2/mtime/radar.js | 13 --
lib/v2/mtime/router.js | 3 -
lib/v2/prestige-av/maintainer.js | 3 -
lib/v2/prestige-av/radar.js | 18 --
lib/v2/prestige-av/router.js | 3 -
lib/v2/prestige-av/series.js | 42 -----
lib/v2/tencent/radar.js | 17 --
website/docs/routes/multimedia.mdx | 252 +--------------------------
54 files changed, 11 insertions(+), 1823 deletions(-)
delete mode 100644 lib/routes/changku/index.js
delete mode 100644 lib/routes/dysfz/index.js
delete mode 100644 lib/routes/gaoqingla/latest.js
delete mode 100644 lib/routes/mp4ba/index.js
delete mode 100644 lib/routes/mqube/latest.js
delete mode 100644 lib/routes/mqube/tag.js
delete mode 100644 lib/routes/mqube/top.js
delete mode 100644 lib/routes/mqube/user.js
delete mode 100644 lib/routes/nfmovies/index.js
delete mode 100644 lib/routes/ningmeng/song.js
delete mode 100644 lib/routes/piaohua/hot.js
delete mode 100644 lib/routes/rs05/rs05.js
delete mode 100644 lib/routes/s-hentai/index.js
delete mode 100644 lib/routes/sankakucomplex/post.js
delete mode 100644 lib/routes/shinybbs/index.js
delete mode 100644 lib/routes/shinybbs/latest.js
delete mode 100644 lib/routes/shinybbs/p.js
delete mode 100644 lib/routes/tencent/video/playlist.js
delete mode 100644 lib/routes/wanwansub/index.js
delete mode 100644 lib/routes/wanwansub/info.js
delete mode 100644 lib/routes/yahoo-jp-tv/index.js
delete mode 100644 lib/routes/zimuzu/resource.js
delete mode 100644 lib/routes/zimuzu/top.js
delete mode 100644 lib/v2/aliyundrive/files.js
delete mode 100644 lib/v2/aliyundrive/maintainer.js
delete mode 100644 lib/v2/aliyundrive/radar.js
delete mode 100644 lib/v2/aliyundrive/router.js
delete mode 100644 lib/v2/gaze/maintainer.js
delete mode 100644 lib/v2/gaze/radar.js
delete mode 100644 lib/v2/gaze/router.js
delete mode 100644 lib/v2/gaze/templates/update.art
delete mode 100644 lib/v2/gaze/update.js
delete mode 100644 lib/v2/ibc/maintainer.js
delete mode 100644 lib/v2/ibc/maitta.js
delete mode 100644 lib/v2/ibc/radar.js
delete mode 100644 lib/v2/ibc/radio.js
delete mode 100644 lib/v2/ibc/router.js
delete mode 100644 lib/v2/ibc/templates/description.art
delete mode 100644 lib/v2/mtime/maintainer.js
delete mode 100644 lib/v2/mtime/news.js
delete mode 100644 lib/v2/mtime/radar.js
delete mode 100644 lib/v2/mtime/router.js
delete mode 100644 lib/v2/prestige-av/maintainer.js
delete mode 100644 lib/v2/prestige-av/radar.js
delete mode 100644 lib/v2/prestige-av/router.js
delete mode 100644 lib/v2/prestige-av/series.js
diff --git a/assets/radar-rules.js b/assets/radar-rules.js
index 1b1039d4e8..0cef7ad4dc 100644
--- a/assets/radar-rules.js
+++ b/assets/radar-rules.js
@@ -119,15 +119,6 @@
'govopendata.com': { _name: '新闻联播文字版', cn: [{ title: '新闻联播文字版', docs: 'https://docs.rsshub.app/routes/traditional-media#xin-wen-lian-bo-wen-zi-ban', source: '/xinwenlianbo', target: '/xinwenlianbo/index' }] },
'steampowered.com': { _name: 'Steam', store: [{ title: 'search', docs: 'https://docs.rsshub.app/routes/game#steam', source: '/search/', target: (params, url) => `/steam/search/${new URL(url).searchParams}` }] },
'suzhou.gov.cn': { _name: '苏州市政府', www: [{ title: '政府新闻', docs: 'https://docs.rsshub.app/routes/government#su-zhou-shi-ren-min-zheng-fu', source: '/szsrmzf/:uid/nav_list.', target: '/gov/suzhou/news/:uid' }] },
- 'mqube.net': {
- _name: 'MQube',
- www: [
- { title: '全站最近更新', docs: 'https://docs.rsshub.app/routes/multimedia#mqube', source: '/', target: '/mqube/latest' },
- { title: '全站每日排行', docs: 'https://docs.rsshub.app/routes/multimedia#mqube', source: '/', target: '/mqube/top' },
- { title: '个人最近更新', docs: 'https://docs.rsshub.app/routes/multimedia#mqube', source: '/user/:user', target: '/mqube/user/:user' },
- { title: '标签最近更新', docs: 'https://docs.rsshub.app/routes/multimedia#mqube', source: '/search/tag/:tag', target: '/mqube/tag/:tag' },
- ],
- },
'last.fm': {
_name: 'Last.fm',
www: [
@@ -136,24 +127,6 @@
{ title: '站内 Top 榜单', docs: 'https://docs.rsshub.app/routes/multimedia#last-fm', source: '/charts', target: '/lastfm/top' },
],
},
- 'ddrk.me': {
- _name: '低端影视',
- www: [
- { title: '首页', docs: 'https://docs.rsshub.app/routes/multimedia#di-duan-ying-shi', source: '/', target: '/ddrk/index' },
- { title: '标签', docs: 'https://docs.rsshub.app/routes/multimedia#di-duan-ying-shi', source: '/tag/:tag', target: '/ddrk/tag/:tag' },
- { title: '分类', docs: 'https://docs.rsshub.app/routes/multimedia#di-duan-ying-shi', source: ['/category/:category', '/category/:uplevel/:category'], target: '/ddrk/category/:category' },
- {
- title: '影视剧集更新',
- docs: 'https://docs.rsshub.app/routes/multimedia#di-duan-ying-shi',
- source: ['/:name', '/:name/:season'],
- target: (params) => {
- if (params.name !== 'category' && params.name !== 'tag' && params.name !== 'ddrklogin' && params.name !== 'about' && params.name !== 'deleted') {
- return `/ddrk/update/${params.name}${params.season ? '/' + params.season : ''}`;
- }
- },
- },
- ],
- },
'hackerone.com': { _name: 'HackerOne', '.': [{ title: 'HackerOne Hacker Activity', docs: 'https://docs.rsshub.app/routes/other#hackerone-hacker-activity', source: '/hacktivity', target: '/hackerone/hacktivity' }] },
'cowlevel.net': { _name: '奶牛关', '.': [{ title: '元素文章', docs: 'https://docs.rsshub.app/routes/game#nai-niu-guan', source: ['/element/:id', '/element/:id/article'], target: '/cowlevel/element/:id' }] },
'beijing.gov.cn': { wjw: [{ title: '北京卫生健康委员会', docs: 'https://docs.rsshub.app/routes/government#bei-jing-shi-wei-sheng-jian-kang-wei-yuan-hui', source: '/xwzx_20031/:caty', target: '/gov/beijing/mhc/:caty' }] },
diff --git a/lib/radar-rules.js b/lib/radar-rules.js
index 4469579955..61ccec19be 100644
--- a/lib/radar-rules.js
+++ b/lib/radar-rules.js
@@ -310,35 +310,6 @@ module.exports = {
},
],
},
- 'mqube.net': {
- _name: 'MQube',
- www: [
- {
- title: '全站最近更新',
- docs: 'https://docs.rsshub.app/routes/multimedia#mqube',
- source: '/',
- target: '/mqube/latest',
- },
- {
- title: '全站每日排行',
- docs: 'https://docs.rsshub.app/routes/multimedia#mqube',
- source: '/',
- target: '/mqube/top',
- },
- {
- title: '个人最近更新',
- docs: 'https://docs.rsshub.app/routes/multimedia#mqube',
- source: '/user/:user',
- target: '/mqube/user/:user',
- },
- {
- title: '标签最近更新',
- docs: 'https://docs.rsshub.app/routes/multimedia#mqube',
- source: '/search/tag/:tag',
- target: '/mqube/tag/:tag',
- },
- ],
- },
'last.fm': {
_name: 'Last.fm',
www: [
@@ -362,39 +333,6 @@ module.exports = {
},
],
},
- 'ddrk.me': {
- _name: '低端影视',
- www: [
- {
- title: '首页',
- docs: 'https://docs.rsshub.app/routes/multimedia#di-duan-ying-shi',
- source: '/',
- target: '/ddrk/index',
- },
- {
- title: '标签',
- docs: 'https://docs.rsshub.app/routes/multimedia#di-duan-ying-shi',
- source: '/tag/:tag',
- target: '/ddrk/tag/:tag',
- },
- {
- title: '分类',
- docs: 'https://docs.rsshub.app/routes/multimedia#di-duan-ying-shi',
- source: ['/category/:category', '/category/:uplevel/:category'],
- target: '/ddrk/category/:category',
- },
- {
- title: '影视剧集更新',
- docs: 'https://docs.rsshub.app/routes/multimedia#di-duan-ying-shi',
- source: ['/:name', '/:name/:season'],
- target: (params) => {
- if (params.name !== 'category' && params.name !== 'tag' && params.name !== 'ddrklogin' && params.name !== 'about' && params.name !== 'deleted') {
- return `/ddrk/update/${params.name}${params.season ? '/' + params.season : ''}`;
- }
- },
- },
- ],
- },
'hackerone.com': {
_name: 'HackerOne',
'.': [
diff --git a/lib/router.js b/lib/router.js
index edfa5fb513..be80f28ae5 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -381,10 +381,6 @@ router.get('/iplay/home', lazyloadRouteHandler('./routes/iplay/home'));
// xclient.info
router.get('/xclient/app/:name', lazyloadRouteHandler('./routes/xclient/app'));
-// 电影首发站
-router.get('/dysfz', lazyloadRouteHandler('./routes/dysfz/index'));
-router.get('/dysfz/index', lazyloadRouteHandler('./routes/dysfz/index')); // 废弃
-
// きららファンタジア
router.get('/kirara/news', lazyloadRouteHandler('./routes/kirara/news'));
@@ -392,9 +388,6 @@ router.get('/kirara/news', lazyloadRouteHandler('./routes/kirara/news'));
router.get('/dytt', lazyloadRouteHandler('./routes/dytt/index'));
router.get('/dytt/index', lazyloadRouteHandler('./routes/dytt/index')); // 废弃
-// 人生05电影网
-router.get('/rs05/rs05', lazyloadRouteHandler('./routes/rs05/rs05'));
-
// 趣头条
router.get('/qutoutiao/category/:cid', lazyloadRouteHandler('./routes/qutoutiao/category'));
@@ -454,9 +447,6 @@ router.get('/sogou/doodles', lazyloadRouteHandler('./routes/sogou/doodles'));
// 香港天文台
router.get('/hko/weather', lazyloadRouteHandler('./routes/hko/weather'));
-// sankakucomplex
-router.get('/sankakucomplex/post', lazyloadRouteHandler('./routes/sankakucomplex/post'));
-
// 技术头条
router.get('/blogread/newest', lazyloadRouteHandler('./routes/blogread/newest'));
@@ -477,9 +467,6 @@ router.get('/xiachufang/popular/:timeframe?', lazyloadRouteHandler('./routes/xia
// 经济观察报
router.get('/eeo/:column?/:category?', lazyloadRouteHandler('./routes/eeo/index'));
-// 腾讯视频
-router.get('/tencentvideo/playlist/:id', lazyloadRouteHandler('./routes/tencent/video/playlist'));
-
// Vol
router.get('/vol/:mode?', lazyloadRouteHandler('./routes/vol/lastupdate'));
// 咚漫
@@ -523,10 +510,6 @@ router.get('/cpu/home', lazyloadRouteHandler('./routes/universities/cpu/home'));
router.get('/cpu/jwc', lazyloadRouteHandler('./routes/universities/cpu/jwc'));
router.get('/cpu/yjsy', lazyloadRouteHandler('./routes/universities/cpu/yjsy'));
-// 字幕组
-router.get('/zimuzu/resource/:id?', lazyloadRouteHandler('./routes/zimuzu/resource'));
-router.get('/zimuzu/top/:range/:type', lazyloadRouteHandler('./routes/zimuzu/top'));
-
// 字幕库
router.get('/zimuku/:type?', lazyloadRouteHandler('./routes/zimuku/index'));
@@ -684,9 +667,6 @@ router.get('/vgtime/news', lazyloadRouteHandler('./routes/vgtime/news.js'));
router.get('/vgtime/release', lazyloadRouteHandler('./routes/vgtime/release'));
router.get('/vgtime/keyword/:keyword', lazyloadRouteHandler('./routes/vgtime/keyword'));
-// MP4吧
-router.get('/mp4ba/:param', lazyloadRouteHandler('./routes/mp4ba'));
-
// anitama
router.get('/anitama/:channel?', lazyloadRouteHandler('./routes/anitama/channel'));
@@ -753,9 +733,6 @@ router.get('/bupt/funbox', lazyloadRouteHandler('./routes/universities/bupt/funb
// 广东海洋大学
router.get('/gdoujwc', lazyloadRouteHandler('./routes/universities/gdou/jwc/jwtz'));
-// 中国高清网
-router.get('/gaoqingla/:tag?', lazyloadRouteHandler('./routes/gaoqingla/latest'));
-
// 马良行
router.get('/mlhang', lazyloadRouteHandler('./routes/mlhang/latest'));
@@ -840,9 +817,6 @@ router.get('/bing', lazyloadRouteHandler('./routes/bing/index'));
// Maxjia News - DotA 2
router.get('/maxnews/dota2', lazyloadRouteHandler('./routes/maxnews/dota2'));
-// 柠檬 - 私房歌
-router.get('/ningmeng/song', lazyloadRouteHandler('./routes/ningmeng/song'));
-
// AlgoCasts
router.get('/algocasts', lazyloadRouteHandler('./routes/algocasts/all'));
@@ -1064,9 +1038,6 @@ router.get('/nciae/xsxx', lazyloadRouteHandler('./routes/universities/nciae/xsxx
// cfan
router.get('/cfan/news', lazyloadRouteHandler('./routes/cfan/news'));
-// 奈菲影视
-router.get('/nfmovies/:id?', lazyloadRouteHandler('./routes/nfmovies/index'));
-
// engadget
router.get('/engadget/:lang?', lazyloadRouteHandler('./routes/engadget/home'));
@@ -1216,9 +1187,6 @@ router.get('/chrome/webstore/extensions/:id', lazyloadRouteHandler('./routes/chr
// RTHK
router.get('/rthk-news/:lang/:category', lazyloadRouteHandler('./routes/rthk-news/index'));
-// Yahoo!テレビ
-router.get('/yahoo-jp-tv/:query', lazyloadRouteHandler('./routes/yahoo-jp-tv/index'));
-
// Yahoo! by Author
router.get('/yahoo-author/:author', lazyloadRouteHandler('./routes/yahoo-author/index'));
@@ -1281,12 +1249,6 @@ router.get('/coronavirus/yahoo-japan/:tdfk?', lazyloadRouteHandler('./routes/cor
// 南京林业大学教务处
router.get('/njfu/jwc/:category?', lazyloadRouteHandler('./routes/universities/njfu/jwc'));
-// MQube
-router.get('/mqube/user/:user', lazyloadRouteHandler('./routes/mqube/user'));
-router.get('/mqube/tag/:tag', lazyloadRouteHandler('./routes/mqube/tag'));
-router.get('/mqube/latest', lazyloadRouteHandler('./routes/mqube/latest'));
-router.get('/mqube/top', lazyloadRouteHandler('./routes/mqube/top'));
-
// Letterboxd
router.get('/letterboxd/user/diary/:username', lazyloadRouteHandler('./routes/letterboxd/userdiary'));
router.get('/letterboxd/user/followingdiary/:username', lazyloadRouteHandler('./routes/letterboxd/followingdiary'));
@@ -1490,9 +1452,6 @@ router.get('/umass/amherst/csnews', lazyloadRouteHandler('./routes/umass/amherst
router.get('/umass/amherst/ipoevents', lazyloadRouteHandler('./routes/umass/amherst/ipoevents'));
router.get('/umass/amherst/ipostories', lazyloadRouteHandler('./routes/umass/amherst/ipostories'));
-// 飘花电影网
-router.get('/piaohua/hot', lazyloadRouteHandler('./routes/piaohua/hot'));
-
// 快媒体
router.get('/kuai', lazyloadRouteHandler('./routes/kuai/index'));
router.get('/kuai/:id', lazyloadRouteHandler('./routes/kuai/id'));
@@ -1582,10 +1541,6 @@ router.get('/dcinside/board/:id', lazyloadRouteHandler('./routes/dcinside/board'
// 荔枝FM
router.get('/lizhi/user/:id', lazyloadRouteHandler('./routes/lizhi/user'));
-// 场库
-router.get('/changku', lazyloadRouteHandler('./routes/changku/index'));
-router.get('/changku/cate/:postid', lazyloadRouteHandler('./routes/changku/index'));
-
// 上海市生态环境局
router.get('/gov/shanghai/sthj', lazyloadRouteHandler('./routes/gov/shanghai/sthj'));
@@ -2047,12 +2002,6 @@ router.get('/tingshen', lazyloadRouteHandler('./routes/tingshen/tingshen'));
// 中华人民共和国人力资源和社会保障部
router.get('/gov/mohrss/sbjm/:category?', lazyloadRouteHandler('./routes/gov/mohrss/sbjm'));
-// 深影译站
-router.get('/shinybbs/latest', lazyloadRouteHandler('./routes/shinybbs/latest'));
-router.get('/shinybbs/p/:id', lazyloadRouteHandler('./routes/shinybbs/p'));
-router.get('/shinybbs/page/:id?', lazyloadRouteHandler('./routes/shinybbs/index'));
-router.get('/shinybbs', lazyloadRouteHandler('./routes/shinybbs/index'));
-
// 天眼查
router.get('/tianyancha/hot', lazyloadRouteHandler('./routes/tianyancha/hot'));
@@ -2145,10 +2094,6 @@ router.get('/topbook/today', lazyloadRouteHandler('./routes/topbook/today'));
// Melon
router.get('/melon/chart/:category?', lazyloadRouteHandler('./routes/melon/chart'));
-// 弯弯字幕组
-router.get('/wanwansub/info/:id', lazyloadRouteHandler('./routes/wanwansub/info'));
-router.get('/wanwansub/:id?', lazyloadRouteHandler('./routes/wanwansub/index'));
-
// FIX 字幕侠
// router.get('/zimuxia/portfolio/:id', lazyloadRouteHandler('./routes/zimuxia/portfolio'));
// router.get('/zimuxia/:category?', lazyloadRouteHandler('./routes/zimuxia/index'));
@@ -2239,9 +2184,6 @@ router.get('/uwants/:fid', lazyloadRouteHandler('./routes/uwants'));
// Now新聞
router.get('/now/news/rank', lazyloadRouteHandler('./routes/now/rank'));
-// s-hentai
-router.get('/s-hentai/:id?', lazyloadRouteHandler('./routes/s-hentai'));
-
// etherscan
router.get('/etherscan/transactions/:address', lazyloadRouteHandler('./routes/etherscan/transactions'));
diff --git a/lib/routes/changku/index.js b/lib/routes/changku/index.js
deleted file mode 100644
index e1501c87a0..0000000000
--- a/lib/routes/changku/index.js
+++ /dev/null
@@ -1,39 +0,0 @@
-const got = require('@/utils/got');
-module.exports = async (ctx) => {
- const url = ctx.params.postid ? `https://app.vmovier.com/apiv3/post/getPostInCate?p=1&size=10&cateid=${ctx.params.postid}` : `https://app.vmovier.com/apiv3/index/getIndexPosts/lastid/`;
- const config = {
- headers: {
- 'user-agent': 'VmovierApp 5.7.7 / Android 10 / WIFI / 1080*2175 / 2.75',
- 'content-type': 'application/x-www-form-urlencoded',
- },
- };
- const res = await got({
- method: 'get',
- url,
- });
- const list = res.data.data.list ? res.data.data.list : res.data.data;
- const items = await Promise.all(
- list.map(async (list) => {
- const title = list.title;
- const link = `https://app.vmovier.com/apiv3/post/view?postid=${list.postid}`;
- const description = await ctx.cache.tryGet(link, async () => {
- const res = await got.get(link, config);
- const playurl = res.data.data.content_video[0].progressive[0].url;
- const desc = `
${res.data.data.intro}
`;
- return desc;
- });
- return Promise.resolve({
- title,
- description,
- author: list.creator_username,
- link: `https://www.vmovier.com/${list.postid}`,
- });
- })
- );
- ctx.state.data = {
- title: `${ctx.params.postid ? list[0].cate[0].catename : '每日精选'}-场库`,
- link: url,
- description: '场库_高品质短片分享平台',
- item: items,
- };
-};
diff --git a/lib/routes/ddrk/index.js b/lib/routes/ddrk/index.js
index 70a352a5cd..6ae8af31a7 100644
--- a/lib/routes/ddrk/index.js
+++ b/lib/routes/ddrk/index.js
@@ -5,7 +5,7 @@ module.exports = async (ctx) => {
const name = ctx.params.name;
const season = ctx.params.season;
- let link = `https://ddrk.me/${name}/`;
+ let link = `https://ddys.pro/${name}/`;
if (season) {
link += `${season}/`;
diff --git a/lib/routes/ddrk/list.js b/lib/routes/ddrk/list.js
index 97d8651d3c..7d7407705b 100644
--- a/lib/routes/ddrk/list.js
+++ b/lib/routes/ddrk/list.js
@@ -3,7 +3,7 @@ const cheerio = require('cheerio');
const md5 = require('@/utils/md5');
module.exports = async (ctx) => {
- const url = ctx.params.tag ? `https://ddrk.me/tag/${encodeURIComponent(ctx.params.tag)}/` : ctx.params.category ? `https://ddrk.me/category/${ctx.params.category}/` : 'https://ddrk.me/';
+ const url = ctx.params.tag ? `https://ddys.pro/tag/${encodeURIComponent(ctx.params.tag)}/` : ctx.params.category ? `https://ddrk.me/category/${ctx.params.category}/` : 'https://ddys.pro/';
const response = await got(url);
const $ = cheerio.load(response.data);
diff --git a/lib/routes/dysfz/index.js b/lib/routes/dysfz/index.js
deleted file mode 100644
index d978537331..0000000000
--- a/lib/routes/dysfz/index.js
+++ /dev/null
@@ -1,20 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const responseData = (await got.get(`http://www.wuhaozhan.net/movie/list/?p=1`)).data;
- const $ = cheerio.load(responseData);
- const list = $('.pure-u-16-24').get();
- const data = {
- title: '电影首发站',
- link: 'http://www.wuhaozhan.net/movie/list/',
- description: '高清电影',
- item: list.map((item) => ({
- title: $(item).find('h2').text(),
- description: $(item).find('.l-des').text(),
- pubDate: new Date($(item).find('.dt').text()).toUTCString(),
- link: $(item).find('.l-a').attr('href'),
- })),
- };
- ctx.state.data = data;
-};
diff --git a/lib/routes/gaoqingla/latest.js b/lib/routes/gaoqingla/latest.js
deleted file mode 100644
index 34e73727a9..0000000000
--- a/lib/routes/gaoqingla/latest.js
+++ /dev/null
@@ -1,37 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const tag = ['bluray', '1080p', '720p', '3d', 'webdl'].includes(ctx.params.tag) ? ctx.params.tag : '';
-
- const { data } = await got({
- method: 'get',
- url: `http://gaoqing.la/${tag}`,
- });
-
- const $ = cheerio.load(data);
- const list = $('#post_container > li .thumbnail > a');
-
- let result = list
- .map((_, ele) => {
- const coverImg = $(ele).find('img').attr('src');
- const title = $(ele).attr('title');
- return {
- title,
- link: $(ele).attr('href'),
- description: `
- ${title}
-
- `.trim(),
- };
- })
- .get();
- result = result.slice(0, 10);
-
- ctx.state.data = {
- title: '中国高清网',
- link: 'http://gaoqing.la',
- description: $('meta[name="description"]').attr('content'),
- item: result,
- };
-};
diff --git a/lib/routes/mp4ba/index.js b/lib/routes/mp4ba/index.js
deleted file mode 100644
index 722df02df1..0000000000
--- a/lib/routes/mp4ba/index.js
+++ /dev/null
@@ -1,133 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-const baseUrl = 'http://www.mp4ba.com';
-
-class ParamType {
- static get paramType() {
- return { type: 0, search: 1 };
- }
-
- constructor(param) {
- this._param = param;
-
- if (param.match(/\d{1,2}/)) {
- this._type = ParamType.paramType.type; // 参数为1-2位数字即为类型RSS
- } else {
- this._type = ParamType.paramType.search; // 其他情况为搜索
- }
- }
-
- get param() {
- return this._param;
- }
-
- get type() {
- return this._type;
- }
-
- get url() {
- let url;
- if (!this._url) {
- switch (this._type) {
- case ParamType.paramType.type:
- url = `${baseUrl}/index/index/lists/catid/${this._param}.html`;
- break;
- case ParamType.paramType.search:
- url = `${baseUrl}/index.php?m=search&q=${this._param}`;
- break;
- }
- this._url = url;
- }
- return this._url;
- }
-}
-
-async function buildRss($, paramType, ctx) {
- const $list = (selector) => $('.content').find(selector); // 列表对象
- const title = $('title').text();
- const typeString = title.substring(0, title.indexOf('_'));
- let selectorPath1,
- selectorPath2 = null;
-
- function buildDesc() {
- let desc = '';
- switch (paramType.type) {
- case ParamType.paramType.type:
- desc = `${typeString}类型`;
- selectorPath1 = '.detail .list ul li';
- selectorPath2 = 'a';
- break;
- case ParamType.paramType.search:
- desc = typeString;
- selectorPath1 = '.search .search_content .sousuo';
- selectorPath2 = 'b a';
- break;
- }
- return desc;
- }
-
- function buildItem($) {
- return Promise.all(
- $(selectorPath1)
- .map(async (_, result) => {
- const $ = cheerio.load(result);
- const pubDate = new Date(
- $('span')
- .text()
- .match(/\d{4}-\d{1,2}-\d{1,2}/)
- ).toUTCString();
- const $a = $(selectorPath2);
- const pageUrl = $a.attr('href');
- const { cache } = ctx;
- const title = $a.text();
- const link = pageUrl;
- const guid = pageUrl.match(/(\d+?).html/);
- let description = null;
- const enclosure_type = 'application/x-bittorrent';
- let $magnet = null;
-
- async function getDescription() {
- const key = `Mp4Ba${pageUrl}`;
- const value = await ctx.cache.get(key);
- if (value) {
- description = value;
- const $ = cheerio.load(value);
- $magnet = $('a[href^="magnet:?xt=urn:btih:"]');
- } else {
- const pageData = (await got.get(pageUrl)).data;
- const $page = cheerio.load(pageData);
- const downloadAll = $page('#fadecon > .dow_con:nth-child(1)');
- const downloadBd = $page('#fadecon > .dow_con:nth-child(4)');
- const info_detail = $page('.content .article .box .info_con').find('.info_detail');
- const ar_banner = $page('.content .article .box .info_con').find('.ar_banner');
- $magnet = downloadAll.find('a[href^="magnet:?xt=urn:btih:"]');
- description = info_detail.html() + ar_banner.html() + downloadAll.html() + downloadBd.html();
- cache.set(key, description);
- }
- }
-
- await getDescription();
- const enclosure_url = $magnet.attr('href');
- return { title, link, description, enclosure_url, enclosure_type, guid, pubDate };
- })
- .get()
- );
- }
-
- return {
- title: `${typeString} - 高清MP4吧`,
- link: paramType.url,
- description: buildDesc(),
- item: await buildItem($list),
- };
-}
-
-module.exports = async (ctx) => {
- const { params } = ctx;
- const { param } = params;
- const paramType = new ParamType(param);
- const { data } = await got.get(encodeURI(paramType.url));
- const $ = cheerio.load(data);
- ctx.state.data = await buildRss($, paramType, ctx);
-};
diff --git a/lib/routes/mqube/latest.js b/lib/routes/mqube/latest.js
deleted file mode 100644
index bb0b2b6374..0000000000
--- a/lib/routes/mqube/latest.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const got = require('@/utils/got');
-
-module.exports = async (ctx) => {
- const url = 'https://mqube.net/';
-
- const response = await got.get(url);
-
- const list = JSON.parse(response.data.match(/gon.item_list=(.*?);/)[1]) || [];
-
- ctx.state.data = {
- title: `MQube 新着`,
- link: url,
- item: list.map((item) => ({
- title: item.title,
- author: item.user.name,
- description: `${item.description.replace(/\n/g, '
')}`,
- pubDate: new Date(item.created_at),
- link: `https://mqube.net/play/${item.code}`,
- })),
- };
-};
diff --git a/lib/routes/mqube/tag.js b/lib/routes/mqube/tag.js
deleted file mode 100644
index 8f05744548..0000000000
--- a/lib/routes/mqube/tag.js
+++ /dev/null
@@ -1,23 +0,0 @@
-const got = require('@/utils/got');
-
-module.exports = async (ctx) => {
- const tag = ctx.params.tag;
-
- const url = `https://mqube.net/search/tag/${encodeURIComponent(tag)}`;
-
- const response = await got.get(url);
-
- const list = JSON.parse(response.data.match(/gon.item_list=(.*?);/)[1]) || [];
-
- ctx.state.data = {
- title: `MQube - ${tag}`,
- link: url,
- item: list.map((item) => ({
- title: item.title,
- author: item.user.name,
- description: `
${item.description.replace(/\n/g, '
')}`,
- pubDate: new Date(item.created_at),
- link: `https://mqube.net/play/${item.code}`,
- })),
- };
-};
diff --git a/lib/routes/mqube/top.js b/lib/routes/mqube/top.js
deleted file mode 100644
index b9742fabaf..0000000000
--- a/lib/routes/mqube/top.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const got = require('@/utils/got');
-
-module.exports = async (ctx) => {
- const url = 'https://mqube.net/';
-
- const response = await got.get(url);
-
- const list = JSON.parse(response.data.match(/gon.right_riot_item_lists=(.*?);/)[1]) || [];
-
- ctx.state.data = {
- title: `MQube デイリーランキング`,
- link: url,
- item: list.map((item) => ({
- title: item.title,
- author: item.user.name,
- description: `
${item.description.replace(/\n/g, '
')}`,
- pubDate: new Date(item.created_at),
- link: `https://mqube.net/play/${item.code}`,
- })),
- };
-};
diff --git a/lib/routes/mqube/user.js b/lib/routes/mqube/user.js
deleted file mode 100644
index e4936a4b93..0000000000
--- a/lib/routes/mqube/user.js
+++ /dev/null
@@ -1,25 +0,0 @@
-const got = require('@/utils/got');
-
-module.exports = async (ctx) => {
- const user = ctx.params.user;
-
- const url = `https://mqube.net/user/${user}`;
-
- const response = await got.get(url);
-
- const list = JSON.parse(response.data.match(/gon.item_list=(.*?);/)[1]) || [];
-
- const username = list[0].user.name;
-
- ctx.state.data = {
- title: `MQube - ${username}`,
- link: url,
- item: list.map((item) => ({
- title: item.title,
- author: item.user.name,
- description: `
${item.description.replace(/\n/g, '
')}`,
- pubDate: new Date(item.created_at),
- link: `https://mqube.net/play/${item.code}`,
- })),
- };
-};
diff --git a/lib/routes/nfmovies/index.js b/lib/routes/nfmovies/index.js
deleted file mode 100644
index 29a29260d5..0000000000
--- a/lib/routes/nfmovies/index.js
+++ /dev/null
@@ -1,58 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-const host = 'https://www.nfmovies.com/';
-const mv_slot = 'https://www.nfmovies.com/video/?UID-0-0.html';
-const url_slot = 'https://www.nfmovies.com/list/?ID.html';
-
-const idProps = {
- 0: '首页',
- 1: '电影',
- 2: '电视剧',
- 3: '综艺',
- 4: '动漫',
- 5: '奈菲独家',
-};
-
-module.exports = async (ctx) => {
- const id = ctx.params.id || '0';
- let t_url = '';
- if (id === '0') {
- t_url = host;
- } else if (id === '5') {
- t_url = 'https://www.nfmovies.com/search.php?searchtype=5&order=time&player=%E5%A5%88%E8%8F%B2%E7%8B%AC%E5%AE%B6%E9%AB%98%E6%B8%85%E7%89%87%E6%BA%90';
- } else {
- t_url = url_slot.replace('ID', id);
- }
-
- const response = await got({
- method: 'get',
- url: t_url,
- });
-
- const $ = cheerio.load(response.data);
- const items = [];
- $('.col-md-2').each(function () {
- const item = $(this);
- const link = mv_slot.replace(
- 'UID',
- item
- .find('a')
- .attr('href')
- .match(/\d{4,}/g)
- );
- const src = host + item.children('a').attr('data-original');
- items.push({
- title: item.find('h5').text(),
- description: `

` + item.html(),
- link,
- });
- });
-
- ctx.state.data = {
- title: `${idProps[id]} - 奈菲影视`,
- link: t_url,
- description: `${idProps[id]} - 奈菲影视-永久免费无广告的福利超清影视站,没有套路,完全免费!`,
- item: items,
- };
-};
diff --git a/lib/routes/ningmeng/song.js b/lib/routes/ningmeng/song.js
deleted file mode 100644
index 86e962a0cc..0000000000
--- a/lib/routes/ningmeng/song.js
+++ /dev/null
@@ -1,77 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-const sourceTimezoneOffset = -8;
-module.exports = async (ctx) => {
- const url = 'http://www.ningmeng.name/archives/category/%E7%A7%81%E6%88%BF%E6%AD%8C';
- const res = await got.get(url);
- const $$ = cheerio.load(res.data);
- const postUrls = $$('.site-main .posts-wrapper .grid-item a.u-permalink')
- .slice(0, 3)
- .map((i, el) => $$(el).attr('href'))
- .get();
-
- const postItemGroups = await Promise.all(
- postUrls.map(async (postUrl) => {
- const cache = await ctx.cache.get(postUrl);
- if (cache) {
- return JSON.parse(cache);
- }
-
- const postRes = await got.get(postUrl);
- const $ = cheerio.load(postRes.data);
-
- let time = $('.iconfont.icon-shijian + span.count').text();
- time = time ? new Date(time) : new Date();
- time.setTime(time.getTime() + (sourceTimezoneOffset - time.getTimezoneOffset() / 60) * 60 * 60 * 1000);
- const pubDate = time.toUTCString();
-
- const content = $('.entry-content');
-
- const mp3s = content.find('.karma-by-kadar__simple-player');
- const mp3Urls = mp3s.map((i, el) => $(el).attr('data-src')).get();
-
- const images = content.find('img');
- const imageUrls = images.map((i, el) => $(el).attr('src')).get();
-
- const playerTextRe = /\n*play_circle_filledpause_circle_filledvolume_downvolume_upvolume_off\n*/g;
- const songSplitterRe = /—+.+—+/g;
- const texts = content
- .text()
- .replace(songSplitterRe, '')
- .split(playerTextRe)
- .map((p) => p.trim().split(/\n+/));
-
- const out = mp3Urls.map((mp3Url, i) => {
- const ss = mp3Url.split('/');
- const filename = ss[ss.length - 1].split('.')[0];
- const [title, artist] = filename.split('-');
- const description = [`

`, `
${texts[i][0]}
`, `
${texts[i][1]}
`].join();
-
- return {
- title: unescape(title).trim(),
- author: unescape(artist).trim(),
- link: mp3Url,
- guid: mp3Url,
- description,
- pubDate,
- };
- });
-
- ctx.cache.set(postUrl, JSON.stringify(out));
-
- return out;
- })
- );
-
- let items = [];
- postItemGroups.forEach((group) => {
- items = items.concat(group);
- });
-
- ctx.state.data = {
- title: '柠檬私房歌',
- link: 'http://www.ningmeng.name',
- item: items,
- };
-};
diff --git a/lib/routes/piaohua/hot.js b/lib/routes/piaohua/hot.js
deleted file mode 100644
index a9202691db..0000000000
--- a/lib/routes/piaohua/hot.js
+++ /dev/null
@@ -1,37 +0,0 @@
-const url = require('url');
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const link = 'https://www.piaohua.com/';
- const response = await got({
- method: 'get',
- url: link,
- });
- const $ = cheerio.load(response.data);
- const list = $('ul.ul-imgtxt1.row li')
- .map((_, item) => {
- item = $(item);
- return {
- title: item.find('h3').text(),
- link: url.resolve(link, item.find('a').attr('href')),
- pubDate: new Date(item.find('span').text()).toUTCString(),
- };
- })
- .get();
-
- ctx.state.data = {
- title: '飘花电影网 - 今日推荐',
- link,
- item: await Promise.all(
- list.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('div.m-text1').html();
- return item;
- })
- )
- ),
- };
-};
diff --git a/lib/routes/rs05/rs05.js b/lib/routes/rs05/rs05.js
deleted file mode 100644
index 3cacfb132f..0000000000
--- a/lib/routes/rs05/rs05.js
+++ /dev/null
@@ -1,35 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: 'http://www.wuhaozhan.net/movie/list/',
- headers: {
- Referer: 'http://www.wuhaozhan.net/movie/list/',
- },
- });
-
- const data = response.data;
-
- const $ = cheerio.load(data);
- const list = $('.pure-g .l-box');
- ctx.state.data = {
- title: '人生05电影更新列表',
- link: 'http://www.wuhaozhan.net/movie/list/',
- description: '人生05电影更新列表',
- item:
- list &&
- list
- .map((index, item) => {
- item = $(item);
- return {
- title: item.find('.pr h1 a').text(),
- description: item.find('.pr h2').text() + '
.attr('src') + ')
',
- pubDate: item.find('.pr .dt').text(),
- link: item.find('.l-a').attr('href'),
- };
- })
- .get(),
- };
-};
diff --git a/lib/routes/s-hentai/index.js b/lib/routes/s-hentai/index.js
deleted file mode 100644
index 8aaaa34e29..0000000000
--- a/lib/routes/s-hentai/index.js
+++ /dev/null
@@ -1,64 +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 || 'ready-to-download';
-
- const rootUrl = 'https://s-hentai.org';
- const currentUrl = `${rootUrl}/${id === 'ready-to-download' ? id : `menu/${id}`}`;
-
- const response = await got({
- method: 'get',
- url: currentUrl,
- });
-
- const $ = cheerio.load(response.data);
-
- const list = $('.block-product')
- .slice(0, ctx.query.limit ? parseInt(ctx.query.limit) : 20)
- .map((_, item) => {
- item = $(item);
-
- const a = item.find('.name-product a');
-
- return {
- title: a.text(),
- link: a.attr('href'),
- pubDate: parseDate(item.find('.post-date').text().trim().split(' ')[0], 'YYYY年MM月DD日'),
- };
- })
- .get();
-
- const items = await Promise.all(
- list.map((item) =>
- ctx.cache.tryGet(item.link, async () => {
- const detailResponse = await got({
- method: 'get',
- url: item.link,
- });
-
- const content = cheerio.load(detailResponse.data);
-
- const images = content('#sync1');
- const description = content('#description-deital');
-
- content('.single-support').remove();
-
- item.enclosure_url = content('.file-download-comment a').eq(0).attr('href');
- item.enclosure_type = 'application/x-bittorrent';
-
- item.description = (images ? images.html() : '') + content('.detial-short').html() + (description ? description.html() : '');
- item.category = detailResponse.data.match(/
(.*)<\/a>/g).map((category) => category.match(/>(.*))[1]);
-
- return item;
- })
- )
- );
-
- ctx.state.data = {
- title: `${$('title').text().trim().split('|')[0]} | S-HENTAI.ORG`,
- link: currentUrl,
- item: items,
- };
-};
diff --git a/lib/routes/sankakucomplex/post.js b/lib/routes/sankakucomplex/post.js
deleted file mode 100644
index 63ec1db55e..0000000000
--- a/lib/routes/sankakucomplex/post.js
+++ /dev/null
@@ -1,50 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const response = await got({
- method: 'get',
- url: 'https://idol.sankakucomplex.com/post/atom',
- });
-
- const $ = cheerio.load(response.data);
-
- ctx.state.data = {
- title: 'Posts | Idol Complex - Idol & Cosplay Images',
- link: 'https://idol.sankakucomplex.com/',
- item: $('entry')
- .map((index, item) => {
- item = $(item);
-
- const title = item.find('title').text();
- const link = `https:${item.find('link').attr('href')}`;
- const pubDate = new Date(item.find('updated').text()).toUTCString();
- const author = item.find('author name').text();
- const summary = item.find('summary').text();
- const id = 'x-rss';
- const $2 = cheerio.load(`${item.find('content').html()}
`);
-
- $2('a').each((index, item) => {
- item = $2(item);
- item.attr('href', `https:${item.attr('href')}`);
- });
- $2('img').each((index, item) => {
- item = $2(item);
- item.attr('src', `https:${item.attr('src')}`);
- item.attr('referrerpolicy', 'no-referrer');
- });
-
- const content = $2(`#${id}`).html();
- const description = `${summary}
${content}`;
-
- return {
- title,
- link,
- pubDate,
- author,
- description,
- };
- })
- .get(),
- };
-};
diff --git a/lib/routes/shinybbs/index.js b/lib/routes/shinybbs/index.js
deleted file mode 100644
index f935c9461d..0000000000
--- a/lib/routes/shinybbs/index.js
+++ /dev/null
@@ -1,60 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const id = ctx.params.id || '';
-
- const rootUrl = 'https://sub.shinybbs.vip';
- const currentUrl = `${rootUrl}/?page_id=${id}`;
- const response = await got({
- method: 'get',
- url: currentUrl,
- });
-
- const $ = cheerio.load(response.data);
-
- const list = $('.elementor-button-link, .kb-gallery-item-link')
- .slice(0, 10)
- .map((_, item) => {
- item = $(item);
- return {
- link: item.attr('href'),
- };
- })
- .get();
-
- const items = await Promise.all(
- list.map((item) =>
- ctx.cache.tryGet(item.link, async () => {
- const detailResponse = await got({
- method: 'get',
- url: item.link,
- });
- const content = cheerio.load(detailResponse.data);
-
- content('.elementor-section').last().remove();
- content('.elementor-section').last().remove();
-
- content('.elementor-tabs-wrapper').remove();
-
- item.title = content('.post-title').text();
- item.description = content('.elementor-inner, .post-content').html();
- item.pubDate = new Date(content('.post-date').text().replace(/年|月/g, '-').replace('日', '')).toUTCString();
-
- item.enclosure_type = 'application/x-bittorrent';
-
- const enclosureUrl = content('.elementor-tab-content a').last().attr('href');
-
- item.enclosure_url = enclosureUrl ? enclosureUrl.replace('http://magnet', 'magnet') : '';
-
- return item;
- })
- )
- );
-
- ctx.state.data = {
- title: $('title').text(),
- link: currentUrl,
- item: items,
- };
-};
diff --git a/lib/routes/shinybbs/latest.js b/lib/routes/shinybbs/latest.js
deleted file mode 100644
index 41df9c3685..0000000000
--- a/lib/routes/shinybbs/latest.js
+++ /dev/null
@@ -1,57 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const rootUrl = 'https://sub.shinybbs.vip';
- const currentUrl = `${rootUrl}/?page_id=152`;
- const response = await got({
- method: 'get',
- url: currentUrl,
- });
-
- const $ = cheerio.load(response.data);
-
- const list = $('.wp-block-latest-posts__list li a')
- .slice(0, 10)
- .map((_, item) => {
- item = $(item);
- return {
- title: item.text(),
- link: item.attr('href'),
- pubDate: new Date(item.next('time').attr('datetime')).toUTCString(),
- };
- })
- .get();
-
- const items = await Promise.all(
- list.map((item) =>
- ctx.cache.tryGet(item.link, async () => {
- const detailResponse = await got({
- method: 'get',
- url: item.link,
- });
- const content = cheerio.load(detailResponse.data);
-
- content('.elementor-section').last().remove();
- content('.elementor-section').last().remove();
-
- content('.elementor-tabs-wrapper').remove();
-
- item.description = content('.elementor-inner').html();
- item.enclosure_type = 'application/x-bittorrent';
-
- const enclosureUrl = content('.elementor-tab-content a').last().attr('href');
-
- item.enclosure_url = enclosureUrl ? enclosureUrl.replace('http://magnet', 'magnet') : '';
-
- return item;
- })
- )
- );
-
- ctx.state.data = {
- title: $('title').text(),
- link: currentUrl,
- item: items,
- };
-};
diff --git a/lib/routes/shinybbs/p.js b/lib/routes/shinybbs/p.js
deleted file mode 100644
index 853af59f28..0000000000
--- a/lib/routes/shinybbs/p.js
+++ /dev/null
@@ -1,38 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const id = ctx.params.id;
-
- const rootUrl = 'https://sub.shinybbs.vip';
- const currentUrl = `${rootUrl}/?p=${id}`;
- const response = await got({
- method: 'get',
- url: currentUrl,
- });
-
- const $ = cheerio.load(response.data);
-
- $('.elementor-section').last().remove();
- $('.elementor-section').last().remove();
-
- $('.elementor-tabs-wrapper').remove();
-
- const items = $('.elementor-tab-content a')
- .map((_, item) => {
- item = $(item);
- return {
- title: item.text(),
- link: item.attr('href'),
- enclosure_url: item.attr('href'),
- enclosure_type: 'application/x-bittorrent',
- };
- })
- .get();
-
- ctx.state.data = {
- title: `${$('.post-title').text()} - 深影译站`,
- link: currentUrl,
- item: items.reverse(),
- };
-};
diff --git a/lib/routes/tencent/video/playlist.js b/lib/routes/tencent/video/playlist.js
deleted file mode 100644
index a6cb95df34..0000000000
--- a/lib/routes/tencent/video/playlist.js
+++ /dev/null
@@ -1,46 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const { id } = ctx.params;
- const link = `https://v.qq.com/detail/${id[0]}/${id}.html`;
- const page = await got.get(link);
- const $ = cheerio.load(page.data);
-
- let vtype = 4;
- // 支持地址 https://v.qq.com/detail/8/84842.html
- let items = null;
- if (id[0] === '8') {
- vtype = 1;
- const episodes = await got.get(`https://s.video.qq.com/get_playsource?id=${id}&plat=2&type=${vtype}&data_type=2&video_type=3&range=1&plname=qq&otype=json&num_mod_cnt=20&callback=a&_t=${Date.now()}`);
- const playList = JSON.parse(episodes.data.slice(2, -1)).playlist[0].videoPlayList;
- items = playList.map((video) => {
- const video_id = video.playUrl.split('=')[1];
- const info = {
- title: video.title,
- link: video.playUrl,
- description: `
-
- `,
- };
- return info;
- });
- } else {
- const episodes = await got.get(`https://s.video.qq.com/get_playsource?id=${id}&plat=2&type=${vtype}&data_type=2&video_type=3&range=1&plname=qq&otype=json&num_mod_cnt=20&callback=a&_t=${Date.now()}`);
- const playList = JSON.parse(episodes.data.slice(2, -1)).PlaylistItem.videoPlayList;
- items = playList.map((video) => ({
- title: video.title,
- link: video.playUrl,
- description: `
-
- `,
- }));
- }
-
- ctx.state.data = {
- title: $('title').text(),
- link,
- description: $('meta[name=description]').attr('content'),
- item: items,
- };
-};
diff --git a/lib/routes/wanwansub/index.js b/lib/routes/wanwansub/index.js
deleted file mode 100644
index 3406695d80..0000000000
--- a/lib/routes/wanwansub/index.js
+++ /dev/null
@@ -1,57 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const id = ctx.params.id || '139';
-
- const rootUrl = 'http://wanwansub.com';
- const currentUrl = `${rootUrl}/node/${id}`;
- const response = await got({
- method: 'get',
- url: currentUrl,
- });
-
- const $ = cheerio.load(response.data);
-
- const list = $('.pg-item a')
- .slice(0, 10)
- .map((_, item) => {
- item = $(item);
- return {
- title: item.text(),
- link: `${rootUrl}${item.attr('href')}`,
- };
- })
- .get();
-
- const items = await Promise.all(
- list.map((item) =>
- ctx.cache.tryGet(item.link, async () => {
- const detailResponse = await got({
- method: 'get',
- url: item.link,
- });
- const content = cheerio.load(detailResponse.data);
-
- content('.button').remove();
-
- const links = detailResponse.data.match(/磁力<\/a>/g);
-
- if (links) {
- item.enclosure_type = 'application/x-bittorrent';
- item.enclosure_url = links.pop().match(/磁力<\/a>/)[1];
- }
-
- item.description = content('.content-box').html();
-
- return item;
- })
- )
- );
-
- ctx.state.data = {
- title: $('title').text(),
- link: currentUrl,
- item: items,
- };
-};
diff --git a/lib/routes/wanwansub/info.js b/lib/routes/wanwansub/info.js
deleted file mode 100644
index 7cd978654b..0000000000
--- a/lib/routes/wanwansub/info.js
+++ /dev/null
@@ -1,44 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const id = ctx.params.id;
-
- const rootUrl = 'http://wanwansub.com';
- const currentUrl = `${rootUrl}/info/${id}`;
- const response = await got({
- method: 'get',
- url: currentUrl,
- });
-
- const $ = cheerio.load(response.data);
-
- const items = $('.lightbox-image')
- .nextAll('p')
- .slice(3)
- .map((_, item) => {
- const i = {};
-
- item = $(item);
-
- item.find('a').each(function () {
- if ($(this).text() === '磁力') {
- i.enclosure_url = $(this).attr('href');
- i.enclosure_type = 'application/x-bittorrent';
- }
- });
-
- i.description = `${item.html()}
`;
- i.title = item.text().split(' ')[0];
- i.link = currentUrl;
-
- return i;
- })
- .get();
-
- ctx.state.data = {
- title: $('title').text(),
- link: currentUrl,
- item: items,
- };
-};
diff --git a/lib/routes/yahoo-jp-tv/index.js b/lib/routes/yahoo-jp-tv/index.js
deleted file mode 100644
index 6b29fe9207..0000000000
--- a/lib/routes/yahoo-jp-tv/index.js
+++ /dev/null
@@ -1,21 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const querystring = require('querystring');
-
-module.exports = async (ctx) => {
- const query = querystring.stringify({ q: ctx.params.query });
- const link = `https://tv.yahoo.co.jp/search/?${query}`;
- const response = await got(link);
- const $ = cheerio.load(response.body);
- const [title] = $('.search_result').find('p').text().split(':');
- const item = $('.programlist li')
- .map((index, item) => {
- const $item = $(item);
- const title = `${$item.find('.leftarea').text().replace(/\n/g, '')} ${$item.find('.yjLS').text()}`;
- const link = `https://tv.yahoo.co.jp${$item.find('div.rightarea p.yjLS.pb5p a').attr('href')}`;
- const description = $item.find('p.yjMS:nth-child(3)').text();
- return { title, description, link };
- })
- .get();
- ctx.state.data = { title, link, item };
-};
diff --git a/lib/routes/zimuku/index.js b/lib/routes/zimuku/index.js
index 915f835a19..2031493779 100644
--- a/lib/routes/zimuku/index.js
+++ b/lib/routes/zimuku/index.js
@@ -3,7 +3,7 @@ const cheerio = require('cheerio');
module.exports = async (ctx) => {
const { type = 'mv' } = ctx.params;
- const baseUrl = 'https://www.zimuku.org';
+ const baseUrl = 'https://srtku.com';
const url = `${baseUrl}/newsubs?t=${type}`;
const response = await got(url);
const $ = cheerio.load(response.data);
diff --git a/lib/routes/zimuzu/resource.js b/lib/routes/zimuzu/resource.js
deleted file mode 100644
index 64ec5d8de1..0000000000
--- a/lib/routes/zimuzu/resource.js
+++ /dev/null
@@ -1,19 +0,0 @@
-const parser = require('@/utils/rss-parser');
-
-module.exports = async (ctx) => {
- const { id = 0 } = ctx.params;
- const feed = await parser.parseURL(`http://rss.rrys.tv/rss/feed/${id}`);
- feed.items.map((item) => {
- item.link = null;
- item.enclosure_url = item.magnet;
- item.enclosure_type = 'application/x-bittorrent';
- return item;
- });
-
- ctx.state.data = {
- title: feed.title,
- link: feed.link,
- description: feed.description,
- item: feed.items,
- };
-};
diff --git a/lib/routes/zimuzu/top.js b/lib/routes/zimuzu/top.js
deleted file mode 100644
index babd83b006..0000000000
--- a/lib/routes/zimuzu/top.js
+++ /dev/null
@@ -1,27 +0,0 @@
-const cheerio = require('cheerio');
-const got = require('@/utils/got');
-
-module.exports = async (ctx) => {
- const { range, type } = ctx.params;
-
- const url = `http://www.rrys2019.com/html/top/${range}_${type}_list.html`;
- const response = await got(url);
-
- const $ = cheerio.load(response.data);
- const list = $('li.clearfix');
-
- ctx.state.data = {
- title: `${$('.title').text().trim()}-字幕组`,
- link: url,
- item: list
- .map((_, item) => {
- item = $(item);
- return {
- title: item.find('.info a').first().text(),
- description: item.find('.info p').first().html() + '
' + item.find('.a1 p').html() + '
' + `
`,
- link: item.find('.info a').first().attr('href'),
- };
- })
- .get(),
- };
-};
diff --git a/lib/v2/aliyundrive/files.js b/lib/v2/aliyundrive/files.js
deleted file mode 100644
index c23d2a1678..0000000000
--- a/lib/v2/aliyundrive/files.js
+++ /dev/null
@@ -1,59 +0,0 @@
-const got = require('@/utils/got');
-
-module.exports = async (ctx) => {
- const { share_id, parent_file_id } = ctx.params;
- const url = `https://www.aliyundrive.com/s/${share_id}${parent_file_id ? `/folder/${parent_file_id}` : ''}`;
-
- const headers = {
- referer: 'https://www.aliyundrive.com/',
- origin: 'https://www.aliyundrive.com',
- 'x-canary': 'client=web,app=share,version=v2.3.1',
- };
-
- const shareRes = await got.post('https://api.aliyundrive.com/adrive/v3/share_link/get_share_by_anonymous', {
- params: {
- share_id,
- },
- json: {
- share_id,
- },
- headers,
- });
-
- const tokenRes = await got.post('https://api.aliyundrive.com/v2/share_link/get_share_token', {
- headers,
- json: {
- share_id,
- },
- });
- const share_token = tokenRes.data.share_token;
-
- const listRes = await got.post('https://api.aliyundrive.com/adrive/v2/file/list_by_share', {
- headers: {
- ...headers,
- 'x-share-token': share_token,
- },
- json: {
- limit: 100,
- order_by: 'created_at',
- order_direction: 'DESC',
- parent_file_id: parent_file_id || 'root',
- share_id,
- },
- });
-
- const result = listRes.data.items.map((item) => ({
- title: item.name,
- description: item.name + (item.thumbnail ? `
` : ''),
- link: url,
- pubDate: item.created_at,
- updated: item.updated_at,
- guid: item.file_id,
- }));
-
- ctx.state.data = {
- title: `${shareRes.data.display_name || `${share_id}${parent_file_id ? `-${parent_file_id}` : ''}`}-阿里云盘`,
- link: url,
- item: result,
- };
-};
diff --git a/lib/v2/aliyundrive/maintainer.js b/lib/v2/aliyundrive/maintainer.js
deleted file mode 100644
index c412a619a4..0000000000
--- a/lib/v2/aliyundrive/maintainer.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- '/files/:share_id/:parent_file_id?': ['DIYgod'],
-};
diff --git a/lib/v2/aliyundrive/radar.js b/lib/v2/aliyundrive/radar.js
deleted file mode 100644
index c501f565fc..0000000000
--- a/lib/v2/aliyundrive/radar.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- 'aliyundrive.com': {
- _name: '阿里云盘',
- www: [
- {
- title: '文件列表',
- docs: 'https://docs.rsshub.app/routes/programming#a-li-yun-pan',
- source: ['/s/:share_id', '/s/:share_id/folder/:parent_file_id'],
- target: '/aliyundrive/files/:share_id/:parent_file_id?',
- },
- ],
- },
-};
diff --git a/lib/v2/aliyundrive/router.js b/lib/v2/aliyundrive/router.js
deleted file mode 100644
index faa28adf49..0000000000
--- a/lib/v2/aliyundrive/router.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = (router) => {
- router.get('/files/:share_id/:parent_file_id?', require('./files'));
-};
diff --git a/lib/v2/gaze/maintainer.js b/lib/v2/gaze/maintainer.js
deleted file mode 100644
index 863472a9b4..0000000000
--- a/lib/v2/gaze/maintainer.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- '/update/:mid': ['zytomorrow'],
-};
diff --git a/lib/v2/gaze/radar.js b/lib/v2/gaze/radar.js
deleted file mode 100644
index cca5edb5ec..0000000000
--- a/lib/v2/gaze/radar.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- 'gaze.run': {
- _name: '注视影视',
- '.': [
- {
- title: '更新通知',
- docs: 'https://docs.rsshub.app/routes//multimedia#gaze-run',
- source: ['/play/:mid'],
- target: (params) => `/gaze/update/${params.mid}`,
- },
- ],
- },
-};
diff --git a/lib/v2/gaze/router.js b/lib/v2/gaze/router.js
deleted file mode 100644
index 49eaf43c52..0000000000
--- a/lib/v2/gaze/router.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = function (router) {
- router.get('/update/:mid', require('./update'));
-};
diff --git a/lib/v2/gaze/templates/update.art b/lib/v2/gaze/templates/update.art
deleted file mode 100644
index 919f938ec1..0000000000
--- a/lib/v2/gaze/templates/update.art
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/lib/v2/gaze/update.js b/lib/v2/gaze/update.js
deleted file mode 100644
index ad59a69a9d..0000000000
--- a/lib/v2/gaze/update.js
+++ /dev/null
@@ -1,27 +0,0 @@
-const got = require('@/utils/got');
-const { art } = require('@/utils/render');
-const path = require('path');
-const { parseDate } = require('@/utils/parse-date');
-const timezone = require('@/utils/timezone');
-
-// 站长提供的API
-const rootUrl = 'https://gaze.run/3e47b75000b0924b6c9ba5759a7cf15d';
-
-module.exports = async (ctx) => {
- const mid = ctx.params.mid;
- const response = await got.post(rootUrl, { form: { mid } });
- const data = response.data.data;
-
- ctx.state.data = {
- title: `gaze.run影视更新通知 - ${data.name}`,
- link: `https://gaze.run/play/${mid}`,
- item: [
- {
- title: `${data.name}-第${data.episodes}集`,
- description: art(path.resolve(__dirname, './templates/update.art'), { data }),
- link: `https://gaze.run/play/${mid}`,
- pubDate: timezone(parseDate(data.update_time), +8),
- },
- ],
- };
-};
diff --git a/lib/v2/ibc/maintainer.js b/lib/v2/ibc/maintainer.js
deleted file mode 100644
index ff579a5d34..0000000000
--- a/lib/v2/ibc/maintainer.js
+++ /dev/null
@@ -1,4 +0,0 @@
-module.exports = {
- '/maitta': ['fengkx'],
- '/radio/:id?': ['nczitzk'],
-};
diff --git a/lib/v2/ibc/maitta.js b/lib/v2/ibc/maitta.js
deleted file mode 100644
index 3a06ba04e8..0000000000
--- a/lib/v2/ibc/maitta.js
+++ /dev/null
@@ -1,32 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const url = 'https://www.ibc.co.jp/radio/maitta/audio/';
-const { parseDate } = require('@/utils/parse-date');
-
-module.exports = async (ctx) => {
- const res = await got(url);
- const $ = cheerio.load(res.data);
- const items = $('.up').toArray();
- ctx.state.data = {
- title: 'IBCラジオ イヤーマイッタマイッタ|IBC岩手放送',
- link: 'http://www.ibc.co.jp/radio/maitta/audio',
- description: $('meta[name=description]').attr('content'),
- itunes_author: '水越アナと大塚アナ',
- image: 'https://cdn.ibc.co.jp/radio/maitta/audio/images/header.png',
- language: 'ja',
- item: items.map((item) => {
- item = $(item);
- const link = new URL(item.find('a').attr('href'), url).href;
- const uid = link.match(/\/(\d+)\/$/)[1];
- return {
- title: item.find('h3').text(),
- description: item.find('.audio_intro').text().trim(),
- link,
- pubDate: parseDate(item.find('.onair_date').text().split('日')[0].replace(/年|月/g, '-')),
- itunes_item_image: 'https://assets.blubrry.com/coverart/300/357155.png',
- enclosure_url: `https://media-data.cdn.ibc.co.jp/out/sound/28_${uid}/28_${uid}.mp3`, // 音频链接
- enclosure_type: 'audio/mpeg',
- };
- }),
- };
-};
diff --git a/lib/v2/ibc/radar.js b/lib/v2/ibc/radar.js
deleted file mode 100644
index bfc531e011..0000000000
--- a/lib/v2/ibc/radar.js
+++ /dev/null
@@ -1,19 +0,0 @@
-module.exports = {
- 'ibc.co.jp': {
- _name: 'IBC 岩手放送',
- '.': [
- {
- title: 'イヤーマイッタマイッタ',
- docs: 'https://docs.rsshub.app/routes/multimedia#ibc-yan-shou-fang-song',
- source: ['/radio/maitta/audio', '/'],
- target: '/ibc/maitta',
- },
- {
- title: 'ラジオ',
- docs: 'https://docs.rsshub.app/routes/multimedia#ibc-yan-shou-fang-song',
- source: ['/radio/:id/audio', '/'],
- target: '/ibc/radio/:id?',
- },
- ],
- },
-};
diff --git a/lib/v2/ibc/radio.js b/lib/v2/ibc/radio.js
deleted file mode 100644
index 3b10610e39..0000000000
--- a/lib/v2/ibc/radio.js
+++ /dev/null
@@ -1,73 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const timezone = require('@/utils/timezone');
-const { parseDate } = require('@/utils/parse-date');
-const { art } = require('@/utils/render');
-const path = require('path');
-
-module.exports = async (ctx) => {
- const id = ctx.params.id ?? 'maitta';
- const limit = ctx.query.limit ? parseInt(ctx.query.limit) : 150;
-
- const rootUrl = 'https://www.ibc.co.jp';
- const currentUrl = `${rootUrl}/radio/${id}/audio/`;
-
- let response = await got({
- method: 'get',
- url: currentUrl,
- });
-
- let $ = cheerio.load(response.data);
-
- const image = $('meta[property="og:image"]').attr('content');
-
- let radioId = $('link[title="RSS"]').attr('href')?.split('/rss/').pop().replace(/\/$/, '') ?? '';
-
- let items = $('.audio_list section').toArray();
-
- if (!radioId) {
- const item = $(items[0]);
-
- response = await got({
- method: 'get',
- url: new URL(item.find('a').attr('href'), rootUrl).href,
- });
-
- $ = cheerio.load(response.data);
-
- radioId = $('audio')
- .attr('src')
- .match(/\/sound\/(\d+)_/)[1];
- }
-
- items = items.slice(0, limit).map((item) => {
- item = $(item);
-
- const link = new URL(item.find('a').attr('href'), rootUrl).href;
- const audioId = link.match(/\/aitem\/(\d+)/)[1];
- const audio = `https://media-data.cdn.ibc.co.jp/out/sound/${radioId}_${audioId}/${radioId}_${audioId}.mp3`;
-
- return {
- link,
- title: item.find('h3').text(),
- pubDate: timezone(parseDate(item.find('.update_date').text(), 'YYYY年MM月DD日'), +9),
- enclosure_url: audio,
- enclosure_type: 'audio/mpeg',
- itunes_item_image: image,
- description: art(path.join(__dirname, 'templates/description.art'), {
- description: item.find('.audio_intro').text(),
- audio,
- }),
- };
- });
-
- ctx.state.data = {
- title: $('title').text() || `IBC岩手放送|${$('.programinfo h3').text()}`,
- link: currentUrl,
- item: items,
- description: $('meta[property="og:description"]').attr('content'),
- itunes_author: 'IBC岩手放送',
- image,
- allowEmpty: true,
- };
-};
diff --git a/lib/v2/ibc/router.js b/lib/v2/ibc/router.js
deleted file mode 100644
index 775e1b992e..0000000000
--- a/lib/v2/ibc/router.js
+++ /dev/null
@@ -1,4 +0,0 @@
-module.exports = (router) => {
- router.get('/maitta', require('./maitta'));
- router.get('/radio/:id?', require('./radio'));
-};
diff --git a/lib/v2/ibc/templates/description.art b/lib/v2/ibc/templates/description.art
deleted file mode 100644
index 565c5f2f8b..0000000000
--- a/lib/v2/ibc/templates/description.art
+++ /dev/null
@@ -1,6 +0,0 @@
-{{ if description }}
-{{ description }}
-{{ /if }}
-{{ if audio }}
-
-{{ /if }}
\ No newline at end of file
diff --git a/lib/v2/mtime/maintainer.js b/lib/v2/mtime/maintainer.js
deleted file mode 100644
index 80ea9ed532..0000000000
--- a/lib/v2/mtime/maintainer.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- '/news': ['TsSmartTT'],
-};
diff --git a/lib/v2/mtime/news.js b/lib/v2/mtime/news.js
deleted file mode 100644
index fa48d54ba0..0000000000
--- a/lib/v2/mtime/news.js
+++ /dev/null
@@ -1,52 +0,0 @@
-const got = require('@/utils/got');
-const cheerio = require('cheerio');
-const timezone = require('@/utils/timezone');
-const { parseDate } = require('@/utils/parse-date');
-const asyncPool = require('tiny-async-pool');
-
-module.exports = async (ctx) => {
- const link = 'http://news.mtime.com';
- const response = await got(link, {
- https: {
- rejectUnauthorized: false,
- },
- });
- const $ = cheerio.load(response.data);
- const list = $('ul.left-cont.fix li')
- .toArray()
- .map((item) => {
- item = $(item);
- return {
- title: item.find('h4 a').text(),
- link: item.find('h4 a').attr('href'),
- };
- });
-
- const items = [];
- for await (const item of asyncPool(4, list, (item) =>
- ctx.cache.tryGet(item.link, async () => {
- const detailResponse = await got(item.link);
- const content = cheerio.load(detailResponse.data);
-
- content('.DRE-subject-wrapper').remove();
-
- item.author = content('.editor').text().replace('编辑:', '');
- item.description = content('.body').first().html();
- item.pubDate = timezone(parseDate(content('.userCreateTime').text()), 8);
- item.category = content('.keyword a')
- .toArray()
- .map((item) => content(item).text());
-
- return item;
- })
- )) {
- items.push(item);
- }
-
- ctx.state.data = {
- title: $('head title').text().trim(),
- link,
- image: 'http://static1.mtime.cn/favicon.ico',
- item: items,
- };
-};
diff --git a/lib/v2/mtime/radar.js b/lib/v2/mtime/radar.js
deleted file mode 100644
index 968a6d07a8..0000000000
--- a/lib/v2/mtime/radar.js
+++ /dev/null
@@ -1,13 +0,0 @@
-module.exports = {
- 'mtime.com': {
- _name: '时光网',
- news: [
- {
- title: '时光新闻',
- docs: 'https://docs.rsshub.app/routes/multimedia#shi-guang-wang',
- source: '/',
- target: '/mtime/news',
- },
- ],
- },
-};
diff --git a/lib/v2/mtime/router.js b/lib/v2/mtime/router.js
deleted file mode 100644
index 69a5972f6a..0000000000
--- a/lib/v2/mtime/router.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = function (router) {
- router.get('/news', require('./news'));
-};
diff --git a/lib/v2/prestige-av/maintainer.js b/lib/v2/prestige-av/maintainer.js
deleted file mode 100644
index d80b41bf19..0000000000
--- a/lib/v2/prestige-av/maintainer.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- '/series/:mid/:sort?': ['minimalistrojan'],
-};
diff --git a/lib/v2/prestige-av/radar.js b/lib/v2/prestige-av/radar.js
deleted file mode 100644
index d2db6d0e65..0000000000
--- a/lib/v2/prestige-av/radar.js
+++ /dev/null
@@ -1,18 +0,0 @@
-module.exports = {
- 'prestige-av.com': {
- _name: 'Prestige 蚊香社',
- '.': [
- {
- title: '系列作品',
- docs: 'https://docs.rsshub.app/routes/multimedia#prestige-wen-xiang-she',
- source: ['/goods/goods_list.php'],
- target: (_params, url) => {
- const link = new URL(url);
- if (link.searchParams.get('mode') === 'series') {
- return link.searchParams.has('sort') ? `/prestige-av/series/${link.searchParams.get('mid')}/${link.searchParams.get('sort')}` : `/prestige-av/series/${link.searchParams.get('mid')}`;
- }
- },
- },
- ],
- },
-};
diff --git a/lib/v2/prestige-av/router.js b/lib/v2/prestige-av/router.js
deleted file mode 100644
index c0f6782948..0000000000
--- a/lib/v2/prestige-av/router.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = (router) => {
- router.get('/series/:mid/:sort?', require('./series'));
-};
diff --git a/lib/v2/prestige-av/series.js b/lib/v2/prestige-av/series.js
deleted file mode 100644
index 2897d5acc6..0000000000
--- a/lib/v2/prestige-av/series.js
+++ /dev/null
@@ -1,42 +0,0 @@
-const cheerio = require('cheerio');
-
-module.exports = async (ctx) => {
- const browser = await require('@/utils/puppeteer')();
-
- const id = ctx.params.mid;
- const sort = ctx.params.sort ?? 'near';
-
- const page = await browser.newPage();
- const link = `https://www.prestige-av.com/goods/goods_list.php?mode=series&mid=${id}&count=100&sort=${sort}`;
- await page.setRequestInterception(true);
- page.on('request', (request) => {
- request.resourceType() === 'document' || request.resourceType() === 'script' ? request.continue() : request.abort();
- });
- await page.goto(link);
- await page.waitForSelector('.buttons');
- await page.click('#AC');
- await page.waitForSelector('#body_goods');
- const html = await page.evaluate(() => document.documentElement.innerHTML);
- browser.close();
-
- const $ = cheerio.load(html);
- const list = $('div#body_goods li');
-
- ctx.state.data = {
- title: `【Prestige】${$('div[class=search_title_layout_01]').children('h1').first().text().replace('シリーズ ▶ ', '').replace(/\s*/g, '')}`,
- description: $('meta[name=Description]').attr('content'),
- link: `https://www.prestige-av.com/goods/goods_list.php?mode=series&mid=${id}&sort=${sort}`,
- item:
- list &&
- list
- .map((index, item) => {
- item = $(item);
- return {
- title: item.find('span.title').text().replace(/\s*/g, ''),
- description: item.find('div.spec_layout').children('p').first().text().replace(/\s*/g, '') + '
' + `
`,
- link: item.find('a').attr('href'),
- };
- })
- .get(),
- };
-};
diff --git a/lib/v2/tencent/radar.js b/lib/v2/tencent/radar.js
index 69567bfa01..ce16e6f3ee 100644
--- a/lib/v2/tencent/radar.js
+++ b/lib/v2/tencent/radar.js
@@ -37,23 +37,6 @@ module.exports = {
target: '/tencent/pvp/newsindex/all',
},
],
- v: [
- {
- title: '视频 - 播放列表',
- docs: 'https://docs.rsshub.app/routes/multimedia#teng-xun-shi-pin',
- source: '/x/cover/:id',
- target: (params) => {
- const id = params.id.match('(.*).html')[1];
- return id ? `/tencentvideo/playlist/${id}` : '';
- },
- },
- {
- title: '视频 - 播放列表',
- docs: 'https://docs.rsshub.app/routes/multimedia#teng-xun-shi-pin',
- source: '/x/cover/:id/:detail',
- target: '/tencentvideo/playlist/:id',
- },
- ],
'wiki.connect': [
{
title: 'QQ 互联 SDK 更新日志',
diff --git a/website/docs/routes/multimedia.mdx b/website/docs/routes/multimedia.mdx
index b2942a5615..f6f5b4f347 100644
--- a/website/docs/routes/multimedia.mdx
+++ b/website/docs/routes/multimedia.mdx
@@ -485,22 +485,6 @@ Official RSS: [https://eztv.io/ezrss.xml](https://eztv.io/ezrss.xml)
-## IBC 岩手放送 {#ibc-yan-shou-fang-song}
-
-### イヤーマイッタマイッタ {#ibc-yan-shou-fang-song-%E3%82%A4%E3%83%A4%E3%83%BC%E3%83%9E%E3%82%A4%E3%83%83%E3%82%BF%E3%83%9E%E3%82%A4%E3%83%83%E3%82%BF}
-
-
-
-### ラジオ {#ibc-yan-shou-fang-song-%E3%83%A9%E3%82%B8%E3%82%AA}
-
-
- :::tip
- If you subscribe to [イヤーマイッタマイッタ](https://www.ibc.co.jp/radio/maitta/audio), the URL is `https://www.ibc.co.jp/radio/maitta/audio`. Intercept `maitta` between `https://www.ibc.co.jp/radio/` and `/audio/` as an argument, then the route will be [`/ibc/radio/maitta`](https://rsshub.app/ibc/radio/maitta).
-
- If you subscribe to [火曜ワイド「境界トラブル解決ラジオ!](https://www.ibc.co.jp/radio/TochiKyokai/audio), the URL is `https://www.ibc.co.jp/radio/TochiKyokai/audio`. Intercept `TochiKyokai` between `https://www.ibc.co.jp/radio/` and `/audio/` as an argument, then the route is [`/ibc/radio/TochiKyokai`](https://rsshub.app/ibc/radio/TochiKyokai).
- :::
-
-
## JavBus {#javbus}
:::warning
@@ -873,48 +857,6 @@ JavDB 有多个备用域名,本路由默认使用永久域名 `https://javdb.c
| uploads | favorites | listens | stream |
-## Mp4Ba {#mp4ba}
-
-### 影视分类 {#mp4ba-ying-shi-fen-lei}
-
-
- **类型参考这里**
-
- | 电影 | 连续剧 | 动画 | 综艺 | 纪录片 |
- | ---- | ------ | ---- | ---- | ------ |
- | 6 | 7 | 15 | 20 | 24 |
-
- | 动作片 | 喜剧片 | 爱情片 | 科幻片 | 恐怖片 |
- | ------ | ------ | ------ | ------ | ------ |
- | 8 | 9 | 10 | 11 | 12 |
-
- | 剧情片 | 战争片 | 国产剧 | 港台剧 | 日韩剧 | 欧美剧 |
- | ------ | ------ | ------ | ------ | ------ | ------ |
- | 13 | 14 | 16 | 17 | 18 | 19 |
-
-
-### 影视搜索 {#mp4ba-ying-shi-sou-suo}
-
-
-
-## MQube {#mqube}
-
-### 全站最近更新 {#mqube-quan-zhan-zui-jin-geng-xin}
-
-
-
-### 全站每日排行 {#mqube-quan-zhan-mei-ri-pai-hang}
-
-
-
-### 个人最近更新 {#mqube-ge-ren-zui-jin-geng-xin}
-
-
-
-### 标签最近更新 {#mqube-biao-qian-zui-jin-geng-xin}
-
-
-
## Netflav {#netflav}
### Index {#netflav-index}
@@ -1055,38 +997,6 @@ JavDB 有多个备用域名,本路由默认使用永久域名 `https://javdb.c
- `jp` (Japanese), for Pornhub in Japan [https://jp.pornhub.com](https://jp.pornhub.com) etc.
-## PRESTIGE (プレステージ 蚊香社) {#prestige-%E3%83%97%E3%83%AC%E3%82%B9%E3%83%86%E3%83%BC%E3%82%B8-wen-xiang-she}
-
-### シリーズ {#prestige-%E3%83%97%E3%83%AC%E3%82%B9%E3%83%86%E3%83%BC%E3%82%B8-wen-xiang-she-%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA}
-
-
- | 人気順 | 新着順 | 発売日順 | タイトル順 | 価格の安い順 | 価格の高い順 |
- | ------- | ------ | -------- | ---------- | ------------ | ------------ |
- | popular | near | date | title | low | high |
-
-
-## rs05 人生 05 电影 {#rs05-ren-sheng-05-dian-ying}
-
-### rs05 电影列表 {#rs05-ren-sheng-05-dian-ying-rs05-dian-ying-lie-biao}
-
-
-
-## s-hentai {#s-hentai}
-
-### Category {#s-hentai-category}
-
-
- | Doujin | HCG | Games・Animes | Voices・ASMR | Ready to Download |
- | ------ | --- | ------------- | ------------ | ----------------- |
- | 1 | 2 | 3 | 4 | ready-to-download |
-
-
-## Sankaku Complex {#sankaku-complex}
-
-### Post {#sankaku-complex-post}
-
-
-
## sexinsex {#sexinsex}
### 分区帖子 {#sexinsex-fen-qu-tie-zi}
@@ -1135,7 +1045,7 @@ JavDB 有多个备用域名,本路由默认使用永久域名 `https://javdb.c
### 字幕 {#sub-hd-zi-mu}
-
+
| 最新字幕 | 热门字幕 | 剧集字幕 | 电影字幕 |
| -------- | -------- | -------- | -------- |
| new | top | tv | movie |
@@ -1213,24 +1123,12 @@ Refer to [https://developers.themoviedb.org/3/getting-started/languages](https:/
-## Yahoo! テレビ {#yahoo!-%E3%83%86%E3%83%AC%E3%83%93}
-
-### 番組検索 {#yahoo!-%E3%83%86%E3%83%AC%E3%83%93-fan-zu-jian-suo}
-
-
-
## 阿基米德 FM {#a-ji-mi-de-fm}
### 播客 {#a-ji-mi-de-fm-bo-ke}
-## 阿里云盘 {#a-li-yun-pan}
-
-### 文件列表 {#a-li-yun-pan-wen-jian-lie-biao}
-
-
-
## 爱奇艺 {#ai-qi-yi}
### 用户视频 {#ai-qi-yi-yong-hu-shi-pin}
@@ -1345,55 +1243,23 @@ Refer to [https://developers.themoviedb.org/3/getting-started/languages](https:/
:::
-## 场库 {#chang-ku}
-
-### 今日精选 {#chang-ku-jin-ri-jing-xuan}
-
-
-
-### 分类 {#chang-ku-fen-lei}
-
-
- | 创意 | 励志 | 搞笑 | 广告 | 汽车 | 旅行 |
- | ---- | ---- | ---- | ---- | ---- | ---- |
- | 6 | 7 | 8 | 13 | 92 | 11 |
-
- | 爱情 | 剧情 | 运动 | 动画 | 音乐 | 科幻 |
- | ---- | ---- | ---- | ---- | ---- | ---- |
- | 12 | 17 | 10 | 16 | 18 | 23 |
-
- | 预告 | 记录 | 混剪 | 游戏 | 时尚 | 实验 |
- | ---- | ---- | ---- | ---- | ---- | ---- |
- | 43 | 24 | 44 | 104 | 88 | 45 |
-
- | 生活 |
- | ---- |
- | 78 |
-
-
## 低端影视 {#di-duan-ying-shi}
### 影视剧集更新 {#di-duan-ying-shi-ying-shi-ju-ji-geng-xin}
-
+
### 首页 {#di-duan-ying-shi-shou-ye}
-
+
### 分类 {#di-duan-ying-shi-fen-lei}
-
+
### 标签 {#di-duan-ying-shi-biao-qian}
-
-
-## 电影首发站 {#dian-ying-shou-fa-zhan}
-
-### 电影 {#dian-ying-shou-fa-zhan-dian-ying}
-
-
+
## 电影天堂 {#dian-ying-tian-tang}
@@ -1405,7 +1271,7 @@ Refer to [https://developers.themoviedb.org/3/getting-started/languages](https:/
### 最新电影 {#gao-qing-dian-tai-zui-xin-dian-ying}
-
+
## 故事 FM {#gu-shi-fm}
@@ -1453,22 +1319,6 @@ Refer to [https://developers.themoviedb.org/3/getting-started/languages](https:/
-## 奈菲影视 {#nai-fei-ying-shi}
-
-### 分区 {#nai-fei-ying-shi-fen-qu}
-
-
- | 首页 | 电影 | 电视剧 | 综艺 | 动漫 | 奈菲独家 |
- | ---- | ---- | ------ | ---- | ---- | -------- |
- | 0 | 1 | 2 | 3 | 4 | 5 |
-
-
-## 柠檬 私房歌 (ningmeng.name) {#ning-meng-si-fang-ge-ningmeng-name}
-
-### 私房歌 {#ning-meng-si-fang-ge-ningmeng-name-si-fang-ge}
-
-
-
## 片源网 {#pian-yuan-wang}
### 最新资源 {#pian-yuan-wang-zui-xin-zi-yuan}
@@ -1485,12 +1335,6 @@ Refer to [https://developers.themoviedb.org/3/getting-started/languages](https:/
搜索路由模仿 jackett 的搜索 api, 以提供给 nastools 使用,填写在 nastools 配置 indexer 中
-## 飘花电影网 {#piao-hua-dian-ying-wang}
-
-### 今日热门 {#piao-hua-dian-ying-wang-jin-ri-re-men}
-
-
-
## 蜻蜓 FM {#qing-ting-fm}
### 专辑 {#qing-ting-fm-zhuan-ji}
@@ -1549,60 +1393,12 @@ Refer to [https://developers.themoviedb.org/3/getting-started/languages](https:/
-## 深影译站 {#shen-ying-yi-zhan}
-
-### 首页 {#shen-ying-yi-zhan-shou-ye}
-
-
-
-### 剧集类型 {#shen-ying-yi-zhan-ju-ji-lei-xing}
-
-
- | 英美剧 | 日韩剧 | 小语种 |
- | ------ | ------ | ------ |
- | 62 | 140 | 2 |
-
-
-### 最新作品 {#shen-ying-yi-zhan-zui-xin-zuo-pin}
-
-
-
-### 指定剧集 {#shen-ying-yi-zhan-zhi-ding-ju-ji}
-
-
-
-## 时光网 {#shi-guang-wang}
-
-### 时光新闻 {#shi-guang-wang-shi-guang-xin-wen}
-
-
-
-## 腾讯视频 {#teng-xun-shi-pin}
-
-### 播放列表 {#teng-xun-shi-pin-bo-fang-lie-biao}
-
-
-
## 听听 FM {#ting-ting-fm}
### 节目 {#ting-ting-fm-jie-mu}
-## 弯弯字幕组 {#wan-wan-zi-mu-zu}
-
-### 分类 {#wan-wan-zi-mu-zu-fen-lei}
-
-
- | ALL | 英语小分队 | 日语小分队 | 韩语小分队 | 葡语小分队 | 西语小分队 | 法语小分队 | 意语小分队 | 德语小分队 | 泰语小分队 | 其他语种 |
- | --- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | ---------- | -------- |
- | 139 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 153 | 117 | 154 |
-
-
-### 剧集 {#wan-wan-zi-mu-zu-ju-ji}
-
-
-
## 网易云音乐 {#wang-yi-yun-yin-yue}
:::tip
@@ -1731,16 +1527,6 @@ Refer to [https://developers.themoviedb.org/3/getting-started/languages](https:/
| nba | zuqiu |
-## 中国高清网 {#zhong-guo-gao-qing-wang}
-
-### 电影 {#zhong-guo-gao-qing-wang-dian-ying}
-
-
-
-| 全部 | 蓝光 | 1080P | 720P | 3D | WEB-DL |
-| ---- | ------ | ----- | ---- | -- | ------ |
-| 留空 | bluray | 1080p | 720p | 3d | webdl |
-
## 中文播客榜 {#zhong-wen-bo-ke-bang}
:::tip
@@ -1767,12 +1553,6 @@ Refer to [https://developers.themoviedb.org/3/getting-started/languages](https:/
-## 注视影视 {#zhu-shi-ying-shi}
-
-### 更新通知 {#zhu-shi-ying-shi-geng-xin-tong-zhi}
-
-
-
## 追新番 {#zhui-xin-fan}
### 最近更新 {#zhui-xin-fan-zui-jin-geng-xin}
@@ -1783,7 +1563,7 @@ Refer to [https://developers.themoviedb.org/3/getting-started/languages](https:/
### 字幕列表 {#zi-mu-ku-zi-mu-lie-biao}
-
+
类型
| 最新电影 | 最新美剧 |
@@ -1791,27 +1571,11 @@ Refer to [https://developers.themoviedb.org/3/getting-started/languages](https:/
| mv | tv |
-## 字幕组(ZiMuZu.tv) {#zi-mu-zu-zimuzu-tv}
-
-### 影视 {#zi-mu-zu-zimuzu-tv-ying-shi}
-
-:::tip
-跟官方提供的 RSS 相比:官方使用了不规范的 magnet 字段,无法被 BT 客户端识别并自动下载,其他数据相同
-:::
-
-
-
-### 排行榜 {#zi-mu-zu-zimuzu-tv-pai-hang-bang}
-
-
- 例如,路由 `/zimuzu/top/week/movie` 应该输出 [http://www.rrys2019.com/html/top/week\_movie\_list.html](http://www.rrys2019.com/html/top/week_movie_list.html) 的排行榜单
-
-
## 综艺秀 {#zong-yi-xiu}
### 综艺 {#zong-yi-xiu-zong-yi}
-
+
地区
| 台湾 | 韩国 | 大陆 |