mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-05 04:11:26 +08:00
feat: add route javlibrary (#3797)
This commit is contained in:
@@ -118,6 +118,12 @@ pageClass: routes
|
|||||||
|
|
||||||
<Route author="MegrezZhu CoderTonyChan Felix2yu" example="/javbus/western/series/20" path="/javbus/western/series/:seriesid" :paramsDesc="['系列id,详见作品中系列的链接']" />
|
<Route author="MegrezZhu CoderTonyChan Felix2yu" example="/javbus/western/series/20" path="/javbus/western/series/:seriesid" :paramsDesc="['系列id,详见作品中系列的链接']" />
|
||||||
|
|
||||||
|
## JavLibrary
|
||||||
|
|
||||||
|
### 用户文章
|
||||||
|
|
||||||
|
<Route author="junfengP" example="/javlibrary/posts/siccalol" path="/javlibrary/posts/:uid" :paramsDesc="['用户 id,即用户名称']" />
|
||||||
|
|
||||||
## Mp4Ba
|
## Mp4Ba
|
||||||
|
|
||||||
### 影视分类
|
### 影视分类
|
||||||
|
|||||||
@@ -2181,4 +2181,7 @@ router.get('/letterboxd/user/diary/:username', require('./routes/letterboxd/user
|
|||||||
// 网易大神
|
// 网易大神
|
||||||
router.get('/netease/ds/:id', require('./routes/netease/ds'));
|
router.get('/netease/ds/:id', require('./routes/netease/ds'));
|
||||||
|
|
||||||
|
// javlibrary
|
||||||
|
router.get('/javlibrary/posts/:uid', require('./routes/javlibrary/posts'));
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
35
lib/routes/javlibrary/posts.js
Normal file
35
lib/routes/javlibrary/posts.js
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
const cheerio = require('cheerio');
|
||||||
|
const dateUtil = require('@/utils/date');
|
||||||
|
const cloudscraper = require('cloudscraper');
|
||||||
|
const API = 'http://www.javlibrary.com/cn/userposts.php?u=';
|
||||||
|
|
||||||
|
module.exports = async (ctx) => {
|
||||||
|
const uid = ctx.params.uid;
|
||||||
|
const link = API + uid;
|
||||||
|
const response = await cloudscraper.get(link);
|
||||||
|
const $ = cheerio.load(response);
|
||||||
|
const list = $('div#rightcolumn table.comment');
|
||||||
|
|
||||||
|
ctx.state.data = {
|
||||||
|
title: `Javlibrary - ${uid} 发表的文章`,
|
||||||
|
link: link,
|
||||||
|
item:
|
||||||
|
list &&
|
||||||
|
list
|
||||||
|
.map((index, item) => {
|
||||||
|
item = $(item);
|
||||||
|
// 文章内容只能抓取到 td.t textarea,若含有图片则替换[img]image-link[/img] => <img src="image-link" />
|
||||||
|
let comments = item.find('td.t textarea').text();
|
||||||
|
comments = comments.replace(new RegExp('\\[img\\]', 'g'), '<img src="').replace(new RegExp('\\[\\/img\\]', 'g'), '" />');
|
||||||
|
return {
|
||||||
|
title: item.find('td > strong').text(),
|
||||||
|
link: item.find('td > strong > a').attr('href'),
|
||||||
|
description: `<table>${item.find('table.videoinfo').html()}</table>
|
||||||
|
<p>${comments}</p>`,
|
||||||
|
pubDate: dateUtil(item.find('td.date')),
|
||||||
|
guid: item.find('td > strong > a').attr('href'),
|
||||||
|
};
|
||||||
|
})
|
||||||
|
.get(),
|
||||||
|
};
|
||||||
|
};
|
||||||
@@ -65,6 +65,7 @@
|
|||||||
"aes-js": "3.1.2",
|
"aes-js": "3.1.2",
|
||||||
"art-template": "4.13.2",
|
"art-template": "4.13.2",
|
||||||
"cheerio": "1.0.0-rc.3",
|
"cheerio": "1.0.0-rc.3",
|
||||||
|
"cloudscraper": "4.5.0",
|
||||||
"co-redis": "2.1.1",
|
"co-redis": "2.1.1",
|
||||||
"currency-symbol-map": "4.0.4",
|
"currency-symbol-map": "4.0.4",
|
||||||
"dayjs": "1.8.19",
|
"dayjs": "1.8.19",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
const supertest = require('supertest');
|
const supertest = require('supertest');
|
||||||
let server;
|
let server;
|
||||||
|
jest.mock('request-promise-native');
|
||||||
|
|
||||||
async function checkBlock(response) {
|
async function checkBlock(response) {
|
||||||
expect(response.status).toBe(403);
|
expect(response.status).toBe(403);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ const Parser = require('rss-parser');
|
|||||||
const parser = new Parser();
|
const parser = new Parser();
|
||||||
const wait = require('../../lib/utils/wait');
|
const wait = require('../../lib/utils/wait');
|
||||||
let server;
|
let server;
|
||||||
|
jest.mock('request-promise-native');
|
||||||
|
|
||||||
beforeAll(() => {
|
beforeAll(() => {
|
||||||
process.env.CACHE_EXPIRE = 1;
|
process.env.CACHE_EXPIRE = 1;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
process.env.NODE_NAME = 'mock';
|
process.env.NODE_NAME = 'mock';
|
||||||
|
|
||||||
const supertest = require('supertest');
|
const supertest = require('supertest');
|
||||||
|
jest.mock('request-promise-native');
|
||||||
const server = require('../../lib/index');
|
const server = require('../../lib/index');
|
||||||
const request = supertest(server);
|
const request = supertest(server);
|
||||||
const cheerio = require('cheerio');
|
const cheerio = require('cheerio');
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
process.env.NODE_NAME = 'mock';
|
process.env.NODE_NAME = 'mock';
|
||||||
|
|
||||||
const supertest = require('supertest');
|
const supertest = require('supertest');
|
||||||
|
jest.mock('request-promise-native');
|
||||||
const server = require('../../lib/index');
|
const server = require('../../lib/index');
|
||||||
const request = supertest(server);
|
const request = supertest(server);
|
||||||
const config = require('../../lib/config').value;
|
const config = require('../../lib/config').value;
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
process.env.SENTRY = 'https://mock@mock.com/1';
|
process.env.SENTRY = 'https://mock@mock.com/1';
|
||||||
|
|
||||||
const supertest = require('supertest');
|
const supertest = require('supertest');
|
||||||
|
jest.mock('request-promise-native');
|
||||||
const server = require('../../lib/index');
|
const server = require('../../lib/index');
|
||||||
const request = supertest(server);
|
const request = supertest(server);
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
const supertest = require('supertest');
|
const supertest = require('supertest');
|
||||||
|
jest.mock('request-promise-native');
|
||||||
const server = require('../../lib/index');
|
const server = require('../../lib/index');
|
||||||
const request = supertest(server);
|
const request = supertest(server);
|
||||||
const Parser = require('rss-parser');
|
const Parser = require('rss-parser');
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
const supertest = require('supertest');
|
const supertest = require('supertest');
|
||||||
|
jest.mock('request-promise-native');
|
||||||
const server = require('../../lib/index');
|
const server = require('../../lib/index');
|
||||||
const request = supertest(server);
|
const request = supertest(server);
|
||||||
const Parser = require('rss-parser');
|
const Parser = require('rss-parser');
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
jest.mock('request-promise-native');
|
||||||
const RSSHub = require('../lib/pkg');
|
const RSSHub = require('../lib/pkg');
|
||||||
|
|
||||||
describe('pkg', () => {
|
describe('pkg', () => {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
process.env.SOCKET = 'socket';
|
process.env.SOCKET = 'socket';
|
||||||
|
|
||||||
const supertest = require('supertest');
|
const supertest = require('supertest');
|
||||||
|
jest.mock('request-promise-native');
|
||||||
const server = require('../lib/index');
|
const server = require('../lib/index');
|
||||||
const request = supertest(server);
|
const request = supertest(server);
|
||||||
const Parser = require('rss-parser');
|
const Parser = require('rss-parser');
|
||||||
|
|||||||
17
yarn.lock
17
yarn.lock
@@ -3031,6 +3031,13 @@ clone-response@^1.0.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
mimic-response "^1.0.0"
|
mimic-response "^1.0.0"
|
||||||
|
|
||||||
|
cloudscraper@4.5.0:
|
||||||
|
version "4.5.0"
|
||||||
|
resolved "https://registry.npm.taobao.org/cloudscraper/download/cloudscraper-4.5.0.tgz#884108d82ca870a5b02819b834c599e4725aaf50"
|
||||||
|
integrity sha1-iEEI2CyocKWwKBm4NMWZ5HJar1A=
|
||||||
|
dependencies:
|
||||||
|
request-promise "^4.2.4"
|
||||||
|
|
||||||
co-redis@2.1.1:
|
co-redis@2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/co-redis/-/co-redis-2.1.1.tgz#8bc3717977c9ee5bfb6b28f39ae01bcf724d2dde"
|
resolved "https://registry.yarnpkg.com/co-redis/-/co-redis-2.1.1.tgz#8bc3717977c9ee5bfb6b28f39ae01bcf724d2dde"
|
||||||
@@ -9852,6 +9859,16 @@ request-promise@^4.2.2:
|
|||||||
stealthy-require "^1.1.1"
|
stealthy-require "^1.1.1"
|
||||||
tough-cookie "^2.3.3"
|
tough-cookie "^2.3.3"
|
||||||
|
|
||||||
|
request-promise@^4.2.4:
|
||||||
|
version "4.2.5"
|
||||||
|
resolved "https://registry.npm.taobao.org/request-promise/download/request-promise-4.2.5.tgz?cache=0&sync_timestamp=1572828627911&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest-promise%2Fdownload%2Frequest-promise-4.2.5.tgz#186222c59ae512f3497dfe4d75a9c8461bd0053c"
|
||||||
|
integrity sha1-GGIixZrlEvNJff5NdanIRhvQBTw=
|
||||||
|
dependencies:
|
||||||
|
bluebird "^3.5.0"
|
||||||
|
request-promise-core "1.1.3"
|
||||||
|
stealthy-require "^1.1.1"
|
||||||
|
tough-cookie "^2.3.3"
|
||||||
|
|
||||||
request@^2.68.0, request@^2.87.0, request@^2.88.0:
|
request@^2.68.0, request@^2.87.0, request@^2.88.0:
|
||||||
version "2.88.0"
|
version "2.88.0"
|
||||||
resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
|
resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
|
||||||
|
|||||||
Reference in New Issue
Block a user