mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-04 19:59:54 +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,详见作品中系列的链接']" />
|
||||
|
||||
## JavLibrary
|
||||
|
||||
### 用户文章
|
||||
|
||||
<Route author="junfengP" example="/javlibrary/posts/siccalol" path="/javlibrary/posts/:uid" :paramsDesc="['用户 id,即用户名称']" />
|
||||
|
||||
## Mp4Ba
|
||||
|
||||
### 影视分类
|
||||
|
||||
@@ -2181,4 +2181,7 @@ router.get('/letterboxd/user/diary/:username', require('./routes/letterboxd/user
|
||||
// 网易大神
|
||||
router.get('/netease/ds/:id', require('./routes/netease/ds'));
|
||||
|
||||
// javlibrary
|
||||
router.get('/javlibrary/posts/:uid', require('./routes/javlibrary/posts'));
|
||||
|
||||
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",
|
||||
"art-template": "4.13.2",
|
||||
"cheerio": "1.0.0-rc.3",
|
||||
"cloudscraper": "4.5.0",
|
||||
"co-redis": "2.1.1",
|
||||
"currency-symbol-map": "4.0.4",
|
||||
"dayjs": "1.8.19",
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
const supertest = require('supertest');
|
||||
let server;
|
||||
jest.mock('request-promise-native');
|
||||
|
||||
async function checkBlock(response) {
|
||||
expect(response.status).toBe(403);
|
||||
|
||||
@@ -3,6 +3,7 @@ const Parser = require('rss-parser');
|
||||
const parser = new Parser();
|
||||
const wait = require('../../lib/utils/wait');
|
||||
let server;
|
||||
jest.mock('request-promise-native');
|
||||
|
||||
beforeAll(() => {
|
||||
process.env.CACHE_EXPIRE = 1;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
process.env.NODE_NAME = 'mock';
|
||||
|
||||
const supertest = require('supertest');
|
||||
jest.mock('request-promise-native');
|
||||
const server = require('../../lib/index');
|
||||
const request = supertest(server);
|
||||
const cheerio = require('cheerio');
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
process.env.NODE_NAME = 'mock';
|
||||
|
||||
const supertest = require('supertest');
|
||||
jest.mock('request-promise-native');
|
||||
const server = require('../../lib/index');
|
||||
const request = supertest(server);
|
||||
const config = require('../../lib/config').value;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
process.env.SENTRY = 'https://mock@mock.com/1';
|
||||
|
||||
const supertest = require('supertest');
|
||||
jest.mock('request-promise-native');
|
||||
const server = require('../../lib/index');
|
||||
const request = supertest(server);
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
const supertest = require('supertest');
|
||||
jest.mock('request-promise-native');
|
||||
const server = require('../../lib/index');
|
||||
const request = supertest(server);
|
||||
const Parser = require('rss-parser');
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
const supertest = require('supertest');
|
||||
jest.mock('request-promise-native');
|
||||
const server = require('../../lib/index');
|
||||
const request = supertest(server);
|
||||
const Parser = require('rss-parser');
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
jest.mock('request-promise-native');
|
||||
const RSSHub = require('../lib/pkg');
|
||||
|
||||
describe('pkg', () => {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
process.env.SOCKET = 'socket';
|
||||
|
||||
const supertest = require('supertest');
|
||||
jest.mock('request-promise-native');
|
||||
const server = require('../lib/index');
|
||||
const request = supertest(server);
|
||||
const Parser = require('rss-parser');
|
||||
|
||||
17
yarn.lock
17
yarn.lock
@@ -3031,6 +3031,13 @@ clone-response@^1.0.2:
|
||||
dependencies:
|
||||
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:
|
||||
version "2.1.1"
|
||||
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"
|
||||
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:
|
||||
version "2.88.0"
|
||||
resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
|
||||
|
||||
Reference in New Issue
Block a user