fix(route): add the title to the first article and refactor to V2 (#9532)
This commit is contained in:
parent
6f98d3cee6
commit
56ccda8f72
|
|
@ -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'));
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
};
|
||||
},
|
||||
};
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
module.exports = {
|
||||
'/tugua': ['tgly307'],
|
||||
'/subject/:id': ['xyqfer'],
|
||||
};
|
||||
|
|
@ -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');
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
};
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
module.exports = function (router) {
|
||||
router.get('/tugua', require('./tugua'));
|
||||
router.get('/subject/:id', require('./subject'));
|
||||
};
|
||||
|
|
@ -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);
|
||||
};
|
||||
|
|
@ -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);
|
||||
};
|
||||
|
|
@ -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,
|
||||
};
|
||||
},
|
||||
};
|
||||
Loading…
Reference in New Issue