RSSHub/lib/v2/cnki/author.js

46 lines
1.5 KiB
JavaScript

const utils = require('./utils');
const got = require('@/utils/got');
const cheerio = require('cheerio');
const rootUrl = 'https://chn.oversea.cnki.net/kcms/detail/frame/knetlist.aspx?infotype=4&codetype=1&vl=&';
const authorPageRootUrl = 'https://kns.cnki.net/kcms/detail/knetsearch.aspx?sfield=au&';
module.exports = async (ctx) => {
const { code } = ctx.params;
const authorPageUrl = `${authorPageRootUrl}code=${code}`;
const res = await got(authorPageUrl);
const $ = cheerio.load(res.data);
const authorName = $('#showname').text();
const companyName = $('body > div.wrapper > div.main > div.container.full-screen > div > div:nth-child(3) > h3:nth-child(2) > span > a').text();
const url = `${rootUrl}code=${code}`;
const list = await got
.get(url, {
headers: {
Referer: authorPageUrl,
},
})
.then((res) => {
const $ = cheerio.load(res.data);
const list = $('.bignum')
.children()
.map((_, e) => ({
title: $(e).find('a').first().text().trim(),
link: 'https://chn.oversea.cnki.net' + $(e).find('a').first().attr('href'),
}))
.get();
return list;
});
const items = await Promise.all(list.map((item) => ctx.cache.tryGet(item.link, () => utils.ProcessItem(item))));
ctx.state.data = {
title: `知网 ${authorName} ${companyName}`,
link: authorPageUrl,
item: items,
};
};