70 lines
2.3 KiB
JavaScript
70 lines
2.3 KiB
JavaScript
const got = require('@/utils/got');
|
|
const cheerio = require('cheerio');
|
|
const { parseDate } = require('@/utils/parse-date');
|
|
const { join } = require('path');
|
|
const { art } = require('@/utils/render');
|
|
|
|
module.exports = async (ctx) => {
|
|
const { id } = ctx.params;
|
|
const authorArticleAPI = `https://v2.sohu.com/author-page-api/author-articles/pc/${id}`;
|
|
|
|
const response = await got(authorArticleAPI);
|
|
const list = response.data.data.pcArticleVOS.map((item) => ({
|
|
title: item.title,
|
|
link: item.link.startsWith('http') ? item.link : `https://${item.link}`,
|
|
pubDate: parseDate(item.publicTime),
|
|
}));
|
|
let author, link;
|
|
|
|
const items = await Promise.all(
|
|
list.map((e) =>
|
|
ctx.cache.tryGet(e.link, async () => {
|
|
const { data: response } = await got(e.link);
|
|
const $ = cheerio.load(response);
|
|
|
|
if (!author) {
|
|
const meta = $('span[data-role="original-link"]');
|
|
author = meta.find('a').text();
|
|
// can't get author's link on server, so use the RSSHub link
|
|
// link = meta.attr('href').split('==')[0];
|
|
}
|
|
|
|
if (
|
|
$('script')
|
|
.text()
|
|
.match(/window\.sohu_mp\.article_video/)
|
|
) {
|
|
const videoSrc = $('script')
|
|
.text()
|
|
.match(/\s*url: "(.*?)",/)?.[1];
|
|
e.description = art(join(__dirname, 'templates/video.art'), {
|
|
poster: $('script')
|
|
.text()
|
|
.match(/cover: "(.*?)",/)?.[1],
|
|
src: videoSrc,
|
|
type: videoSrc?.split('.').pop().toLowerCase(),
|
|
});
|
|
} else {
|
|
const article = $('#mp-editor');
|
|
|
|
article.find('#backsohucom, p[data-role="editor-name"]').each((i, e) => {
|
|
$(e).remove();
|
|
});
|
|
|
|
e.description = article.html();
|
|
}
|
|
|
|
e.author = author;
|
|
|
|
return e;
|
|
})
|
|
)
|
|
);
|
|
|
|
ctx.state.data = {
|
|
title: `搜狐号 - ${author}`,
|
|
link,
|
|
item: items,
|
|
};
|
|
};
|