fix(route): add the title to the first article and refactor to V2 (#9532)

This commit is contained in:
Fatpandac 2022-04-13 18:09:17 +08:00 committed by GitHub
parent 6f98d3cee6
commit 56ccda8f72
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 114 additions and 77 deletions

View File

@ -133,8 +133,8 @@ router.get('/plainlaw/archives', lazyloadRouteHandler('./routes/plainlaw/archive
// router.get('/jandan/:sub_model', lazyloadRouteHandler('./routes/jandan/pic'));
// 喷嚏
router.get('/dapenti/tugua', lazyloadRouteHandler('./routes/dapenti/tugua'));
router.get('/dapenti/subject/:id', lazyloadRouteHandler('./routes/dapenti/subject'));
// router.get('/dapenti/tugua', lazyloadRouteHandler('./routes/dapenti/tugua'));
// router.get('/dapenti/subject/:id', lazyloadRouteHandler('./routes/dapenti/subject'));
// Dockone
router.get('/dockone/weekly', lazyloadRouteHandler('./routes/dockone/weekly'));

View File

@ -1,73 +0,0 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
const iconv = require('iconv-lite');
const { parseDate } = require('@/utils/parse-date');
const timezone = require('@/utils/timezone');
module.exports = {
parseFeed: async ({ subjectid }) => {
const url = `https://www.dapenti.com/blog/blog.asp?name=xilei&subjectid=${subjectid}`;
const listRes = await got({
method: 'get',
url,
headers: {
Referer: url,
},
// 喷嚏网编码为GBK需要转码
// 转码需要设定返回数据的格式其可选项是arraybuffer,blob,document,json,text,stream
// 默认为json
responseType: 'buffer',
});
// 转码
const data = iconv.decode(listRes.data, 'gb2312');
const $ = cheerio.load(data);
// 只取最近的三个取全文rss
const list = $('li', 'ul').slice(0, 3).get();
const result_item = await Promise.all(
list.map(async (item) => {
const el = $(item);
const url = `https://www.dapenti.com/blog/${el.find('a').attr('href')}`;
const original_data = await got({
method: 'get',
url,
headers: {
Referer: url,
},
responseType: 'buffer',
});
const convert_data = iconv.decode(original_data.data, 'gbk');
const description = cheerio.load(convert_data, {
decodeEntities: false,
})('body > table > tbody > tr > td.oblog_t_2 > div > table > tbody > tr:nth-child(2) > td');
const pubInfo = description.find('span span.oblog_text').text().split('发布于');
description.find('table, .adsbygoogle').remove();
// remove header
const count = subjectid.toString() === '70' ? 8 : 3;
for (let index = 0; index < count; index++) {
description.children().first().remove();
}
// remove footer
for (let index = 0; index < 8; index++) {
description.children().last().remove();
}
const single = {
title: el.text(),
author: pubInfo[0].trim(),
description: description.html(),
pubDate: timezone(parseDate(pubInfo[1].trim()), +8),
link: url,
};
return single;
})
);
return {
title: `喷嚏-${subjectid}`,
link: url,
item: result_item,
};
},
};

View File

@ -0,0 +1,4 @@
module.exports = {
'/tugua': ['tgly307'],
'/subject/:id': ['xyqfer'],
};

27
lib/v2/dapenti/radar.js Normal file
View File

@ -0,0 +1,27 @@
module.exports = {
'dapenti.com': {
_name: '喷嚏',
'.': [
{
title: '图卦',
docs: 'https://docs.rsshub.app/picture.html#pen-ti',
source: ['/blog/blog.asp'],
target: (params, url) => {
if (new URL(url).searchParams.get('subjectid') === '70') {
return '/dapenti/tugua';
}
},
},
{
title: '主题',
docs: 'https://docs.rsshub.app/picture.html#pen-ti',
source: ['/blog/blog.asp'],
target: (params, url) => {
if (new URL(url).searchParams.get('subjectid')) {
return '/dapenti/subject/' + new URL(url).searchParams.get('subjectid');
}
},
},
],
},
};

4
lib/v2/dapenti/router.js Normal file
View File

@ -0,0 +1,4 @@
module.exports = function (router) {
router.get('/tugua', require('./tugua'));
router.get('/subject/:id', require('./subject'));
};

View File

@ -1,5 +1,5 @@
const utils = require('./utils');
module.exports = async (ctx) => {
ctx.state.data = await utils.parseFeed({ subjectid: ctx.params.id });
ctx.state.data = await utils.parseFeed({ subjectid: ctx.params.id }, ctx);
};

View File

@ -1,5 +1,5 @@
const utils = require('./utils');
module.exports = async (ctx) => {
ctx.state.data = await utils.parseFeed({ subjectid: 70 });
ctx.state.data = await utils.parseFeed({ subjectid: 70 }, ctx);
};

75
lib/v2/dapenti/utils.js Normal file
View File

@ -0,0 +1,75 @@
const got = require('@/utils/got');
const cheerio = require('cheerio');
const iconv = require('iconv-lite');
const { parseDate } = require('@/utils/parse-date');
const timezone = require('@/utils/timezone');
module.exports = {
parseFeed: async ({ subjectid }, ctx) => {
const url = `https://www.dapenti.com/blog/blog.asp?name=xilei&subjectid=${subjectid}`;
const listRes = await got({
method: 'get',
url,
headers: {
Referer: url,
},
// 喷嚏网编码为GBK需要转码
// 转码需要设定返回数据的格式其可选项是arraybuffer,blob,document,json,text,stream
// 默认为json
responseType: 'buffer',
});
// 转码
const data = iconv.decode(listRes.data, 'gb2312');
const $ = cheerio.load(data);
// 只取最近的三个取全文rss
const list = $('li', 'ul').slice(0, 3).get();
const result_item = await Promise.all(
list.map((item) =>
ctx.cache.tryGet(`https://www.dapenti.com/blog/${$(item).find('a').attr('href')}`, async () => {
const el = $(item);
const url = `https://www.dapenti.com/blog/${el.find('a').attr('href')}`;
const original_data = await got({
method: 'get',
url,
headers: {
Referer: url,
},
responseType: 'buffer',
});
const convert_data = iconv.decode(original_data.data, 'gbk');
const description = cheerio.load(convert_data, {
decodeEntities: false,
})('body > table > tbody > tr > td.oblog_t_2 > div > table > tbody > tr:nth-child(2) > td');
const pubInfo = description.find('span span.oblog_text').text().split('发布于');
description.find('table, .adsbygoogle').remove();
// remove header
const count = subjectid.toString() === '70' ? 7 : 3;
for (let index = 0; index < count; index++) {
description.children().first().remove();
}
// remove footer
for (let index = 0; index < 8; index++) {
description.children().last().remove();
}
const single = {
title: el.text(),
author: pubInfo[0].trim(),
description: description.html(),
pubDate: timezone(parseDate(pubInfo[1]?.trim()), +8),
link: url,
};
return single;
})
)
);
return {
title: `喷嚏-${subjectid}`,
link: url,
item: result_item,
};
},
};