From 2ebade668939d1bd63c21e2d26ba8dd5a2e3e6ae Mon Sep 17 00:00:00 2001 From: Derek Date: Wed, 9 Aug 2023 01:23:56 +0800 Subject: [PATCH] fix(route): cnki/journals (#12949) --- docs/journal.md | 2 +- lib/v2/cnki/journals.js | 56 +++++++++++++++++---------------------- lib/v2/cnki/maintainer.js | 2 +- 3 files changed, 27 insertions(+), 33 deletions(-) diff --git a/docs/journal.md b/docs/journal.md index 4d743bb31a..2c4f26eb0f 100644 --- a/docs/journal.md +++ b/docs/journal.md @@ -515,7 +515,7 @@ You can get all short name of a journal from ### 期刊 - + ### 网络首发 diff --git a/lib/v2/cnki/journals.js b/lib/v2/cnki/journals.js index cad8008870..79b3721b97 100644 --- a/lib/v2/cnki/journals.js +++ b/lib/v2/cnki/journals.js @@ -3,51 +3,45 @@ const cheerio = require('cheerio'); const { parseDate } = require('@/utils/parse-date'); const { ProcessItem } = require('./utils'); -const rootUrl = 'https://chn.oversea.cnki.net'; +const rootUrl = 'https://navi.cnki.net'; module.exports = async (ctx) => { const { name } = ctx.params; - const journalUrl = `${rootUrl}/knavi/JournalDetail?pcode=CjFD&pykm=${name}`; + const journalUrl = `${rootUrl}/knavi/journals/${name}/detail`; const title = await got.get(journalUrl).then((res) => cheerio.load(res.data)('head > title').text()); - const yaerListUrl = `${rootUrl}/knavi/JournalDetail/GetJournalYearList?pcode=CJFD&pykm=${name}&pIdx=0`; - const journalsInfo = await got.get(yaerListUrl).then((res) => { + const yearListUrl = `${rootUrl}/knavi/journals/${name}/yearList?pIdx=0`; + + const { code, date } = await got.get(yearListUrl).then((res) => { const $ = cheerio.load(res.data); - const date = $('dd').find('a').first().attr('id').replace('yq', ''); - const year = date.substring(0, 4); - const issue = date.substring(4); + const code = $('.yearissuepage').find('dl').first().find('dd').find('a').first().attr('value'); + const date = parseDate($('.yearissuepage').find('dl').first().find('dd').find('a').first().attr('id').replace('yq', ''), 'YYYYMM'); + return { code, date }; + }); + + const yearIssueUrl = `${rootUrl}/knavi/journals/${name}/papers?yearIssue=${code}&pageIdx=0&pcode=CJFD,CCJD`; + const response = await got.post(yearIssueUrl); + + const $ = cheerio.load(response.data); + const publications = $('dd'); + + const list = publications.map((_, publication) => { + const title = $(publication).find('a').first().text(); + const filename = $(publication).find('b').attr('id'); + const link = `https://cnki.net/kcms/detail/detail.aspx?filename=${filename}&dbcode=CJFD`; return { - year, - issue, - date, + title, + link, + pubDate: date, }; - }); - - const papersUrl = `${rootUrl}/knavi/JournalDetail/GetArticleList?year=${journalsInfo.year}&issue=${journalsInfo.issue}&pykm=${name}&pageIdx=0&pcode=CjFD`; - const list = await got.get(papersUrl).then((res) => { - const $ = cheerio.load(res.data); - const item = $('span.name') - .map((_, item) => { - const url = new URL(`${rootUrl}/${$(item).find('a').attr('href')}`); - const urlParams = new URLSearchParams(url.search); - - return { - title: $(item).find('a').text().trim(), - link: `${rootUrl}/kcms/detail/detail.aspx?dbcode=${urlParams.get('dbCode')}&filename=${urlParams.get('filename')}`, - pubDate: parseDate(journalsInfo.date, 'YYYYMM'), - }; - }) - .get(); - - return item; - }); + }).get(); const items = await Promise.all(list.map((item) => ctx.cache.tryGet(item.link, () => ProcessItem(item)))); ctx.state.data = { title: String(title), - link: `https://navi.cnki.net/knavi/journals/${name}/detail`, + link: journalUrl, item: items, }; }; diff --git a/lib/v2/cnki/maintainer.js b/lib/v2/cnki/maintainer.js index e4e2b0a065..a586b95591 100644 --- a/lib/v2/cnki/maintainer.js +++ b/lib/v2/cnki/maintainer.js @@ -1,5 +1,5 @@ module.exports = { - '/journals/:name': ['Fatpandac'], + '/journals/:name': ['Fatpandac', 'Derekmini'], '/journals/debut/:name': ['Fatpandac'], '/author/:code': ['harveyqiu', 'Derekmini'], };