mirror of
https://github.com/DIYgod/RSSHub.git
synced 2025-12-16 02:42:57 +08:00
add tieba module
This commit is contained in:
@@ -37,4 +37,7 @@ router.get('/jianshu/user/:id', require('./routes/jianshu/user'));
|
|||||||
router.get('/zhihu/collection/:id', require('./routes/zhihu/collection'));
|
router.get('/zhihu/collection/:id', require('./routes/zhihu/collection'));
|
||||||
router.get('/zhihu/people/activities/:id', require('./routes/zhihu/activities'));
|
router.get('/zhihu/people/activities/:id', require('./routes/zhihu/activities'));
|
||||||
|
|
||||||
module.exports = router;
|
// // 贴吧
|
||||||
|
router.get('/tieba/forum/:kw', require('./routes/tieba/forum'));
|
||||||
|
|
||||||
|
module.exports = router;
|
||||||
|
|||||||
90
routes/tieba/forum.js
Normal file
90
routes/tieba/forum.js
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
const axios = require('axios');
|
||||||
|
const art = require('art-template');
|
||||||
|
const path = require('path');
|
||||||
|
const cheerio = require('cheerio');
|
||||||
|
const config = require('../../config');
|
||||||
|
|
||||||
|
function isNormalTime (time) {
|
||||||
|
return /^(\d{2}):(\d{2})$/.test(time);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isNormalDate (time) {
|
||||||
|
return /^(\d{1,2})-(\d{1,2})$/.test(time);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isDate (time) {
|
||||||
|
return /^(\d{4})-(\d{1,2})-(\d{1,2})$/.test(time);
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPubDate (time) {
|
||||||
|
const now = new Date();
|
||||||
|
const year = now.getFullYear();
|
||||||
|
const month = now.getMonth() + 1;
|
||||||
|
const date = now.getDate();
|
||||||
|
if (isNormalTime(time)) {
|
||||||
|
return new Date(`${year}-${month}-${date} ${time}`);
|
||||||
|
}
|
||||||
|
if (isNormalDate(time)) {
|
||||||
|
return new Date(`${year}-${time}`);
|
||||||
|
}
|
||||||
|
if (isDate(time)) {
|
||||||
|
return new Date();
|
||||||
|
}
|
||||||
|
return now;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = async (ctx) => {
|
||||||
|
const { kw } = ctx.params;
|
||||||
|
// PC端:https://tieba.baidu.com/f?kw=${encodeURIComponent(kw)}
|
||||||
|
// 移动端接口:https://tieba.baidu.com/mo/q/m?kw=${encodeURIComponent(kw)}&lp=5024&forum_recommend=1&lm=0&cid=0&has_url_param=1&pn=0&is_ajax=1
|
||||||
|
|
||||||
|
const { data } = await axios({
|
||||||
|
method: 'get',
|
||||||
|
url: `https://tieba.baidu.com/f?kw=${encodeURIComponent(kw)}`,
|
||||||
|
headers: {
|
||||||
|
'User-Agent': config.ua,
|
||||||
|
Referer: 'https://tieba.baidu.com/',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const threadListHTML = cheerio.
|
||||||
|
load(data)('code[id="pagelet_html_frs-list/pagelet/thread_list"]').
|
||||||
|
html().
|
||||||
|
replace(/<!--|-->/g, '');
|
||||||
|
|
||||||
|
const $ = cheerio.load(threadListHTML);
|
||||||
|
const list = $('#thread_list > .j_thread_list[data-field]');
|
||||||
|
|
||||||
|
ctx.body = art(path.resolve(__dirname, '../../views/rss.art'), {
|
||||||
|
title: `${kw}吧`,
|
||||||
|
link: `https://tieba.baidu.com/f?kw=${encodeURIComponent(kw)}`,
|
||||||
|
lastBuildDate: new Date().toUTCString(),
|
||||||
|
item:
|
||||||
|
list &&
|
||||||
|
list.
|
||||||
|
map((index, element) => {
|
||||||
|
const item = $(element);
|
||||||
|
const tid = item.data('field').id; // prettier-ignore
|
||||||
|
const time = item.find('.threadlist_reply_date').text().trim(); // prettier-ignore
|
||||||
|
const title = item.find('a.j_th_tit').text().trim(); // prettier-ignore
|
||||||
|
const details = item.find('.threadlist_abs').text().trim(); // prettier-ignore
|
||||||
|
const author = item.find('.frs-author-name').text().trim(); // prettier-ignore
|
||||||
|
const medias = item.
|
||||||
|
find('.threadlist_media img').
|
||||||
|
map((index, element) => {
|
||||||
|
const item = $(element);
|
||||||
|
return `<img referrerpolicy="no-referrer" src="${item.attr('bpic')}">`; // prettier-ignore
|
||||||
|
}).
|
||||||
|
get().
|
||||||
|
join('');
|
||||||
|
|
||||||
|
return {
|
||||||
|
title,
|
||||||
|
description: `<p>${details}</p><p>${medias}</p><p>作者:${author}</p>`,
|
||||||
|
pubDate: getPubDate(time).toUTCString(),
|
||||||
|
link: `https://tieba.baidu.com/p/${tid}`,
|
||||||
|
};
|
||||||
|
}).
|
||||||
|
get(),
|
||||||
|
});
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user