feat: add route javlibrary (#3797)

This commit is contained in:
junfengP
2020-02-01 19:46:32 +08:00
committed by GitHub
parent eec4fe626c
commit dae512feb9
14 changed files with 71 additions and 0 deletions

View File

@@ -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
### 影视分类 ### 影视分类

View File

@@ -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;

View 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(),
};
};

View File

@@ -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",

View File

@@ -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);

View File

@@ -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;

View File

@@ -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');

View File

@@ -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;

View File

@@ -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);

View File

@@ -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');

View File

@@ -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');

View File

@@ -1,3 +1,4 @@
jest.mock('request-promise-native');
const RSSHub = require('../lib/pkg'); const RSSHub = require('../lib/pkg');
describe('pkg', () => { describe('pkg', () => {

View File

@@ -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');

View File

@@ -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"