From e52c82971fec25a8dec8ec5652f00a8d0df28143 Mon Sep 17 00:00:00 2001 From: terrytw <24227628+terrytw@users.noreply.github.com> Date: Sat, 15 Jul 2023 16:45:47 +0800 Subject: [PATCH] fix(route): NMPA get accurate pubdate (#12801) * Update generic.js * Update index.js * fix: nmpa ditch puppeteer --------- --- docs/government.md | 4 ++-- lib/v2/gov/nifdc/index.js | 19 ++----------------- lib/v2/gov/nmpa/generic.js | 32 +++++--------------------------- 3 files changed, 9 insertions(+), 46 deletions(-) diff --git a/docs/government.md b/docs/government.md index 87c1e4478..9b3e16866 100644 --- a/docs/government.md +++ b/docs/government.md @@ -331,7 +331,7 @@ pageClass: routes ### 通用 - + ::: tip 提示 @@ -347,7 +347,7 @@ pageClass: routes ### 通用 - + ::: tip 提示 diff --git a/lib/v2/gov/nifdc/index.js b/lib/v2/gov/nifdc/index.js index 54531e33d..2a266c3f0 100644 --- a/lib/v2/gov/nifdc/index.js +++ b/lib/v2/gov/nifdc/index.js @@ -36,29 +36,16 @@ module.exports = async (ctx) => { }; }); - const browser = await require('@/utils/puppeteer')(); - items = await Promise.all( items.map((item) => ctx.cache.tryGet(item.link, async () => { if (/^https:\/\/www\.nmpa\.gov\.cn\//.test(item.link)) { - const page = await browser.newPage(); - await page.setRequestInterception(true); - - page.on('request', (request) => { - request.resourceType() === 'document' || request.resourceType() === 'script' ? request.continue() : request.abort(); - }); - - await page.goto(item.link, { - waitUntil: 'domcontentloaded', - }); - await page.waitForSelector('.text'); - const html = await page.evaluate(() => document.documentElement.innerHTML); - await page.close(); + const { data: html } = await got(item.link); const content = cheerio.load(html); item.description = content('.text').html(); + item.pubDate = timezone(parseDate($('meta[name="PubDate"]').attr('content')), +8); } else { const detailResponse = await got({ method: 'get', @@ -76,8 +63,6 @@ module.exports = async (ctx) => { ) ); - await browser.close(); - ctx.state.data = { title: $('title').text().replace(/----/, ' - '), link: currentUrl, diff --git a/lib/v2/gov/nmpa/generic.js b/lib/v2/gov/nmpa/generic.js index a57cd61d2..125dcb996 100644 --- a/lib/v2/gov/nmpa/generic.js +++ b/lib/v2/gov/nmpa/generic.js @@ -1,28 +1,18 @@ const cheerio = require('cheerio'); +const timezone = require('@/utils/timezone'); const { parseDate } = require('@/utils/parse-date'); const { finishArticleItem } = require('@/utils/wechat-mp'); const config = require('@/config').value; const baseUrl = 'https://www.nmpa.gov.cn'; +const got = require('@/utils/got'); module.exports = async (ctx) => { const path = ctx.params[0]; const url = `${baseUrl}/${path.endsWith('/') ? path.slice(0, -1) : path}/index.html`; - const browser = await require('@/utils/puppeteer')({ stealth: true }); const data = await ctx.cache.tryGet( url, async () => { - const page = await browser.newPage(); - await page.setRequestInterception(true); - page.on('request', (request) => { - request.resourceType() === 'document' || request.resourceType() === 'script' ? request.continue() : request.abort(); - }); - await page.goto(url, { - waitUntil: 'domcontentloaded', - }); - await page.waitForSelector('.list'); - - const html = await page.evaluate(() => document.documentElement.innerHTML); - await page.close(); + const { data: html } = await got(url); const $ = cheerio.load(html); return { @@ -48,20 +38,10 @@ module.exports = async (ctx) => { data.items.map((item) => { if (/^https:\/\/www\.nmpa\.gov\.cn\//.test(item.link)) { return ctx.cache.tryGet(item.link, async () => { - const page = await browser.newPage(); - await page.setRequestInterception(true); - page.on('request', (request) => { - request.resourceType() === 'document' || request.resourceType() === 'script' ? request.continue() : request.abort(); - }); - await page.goto(item.link, { - waitUntil: 'domcontentloaded', - }); - await page.waitForSelector('.text'); - - const html = await page.evaluate(() => document.documentElement.innerHTML); - await page.close(); + const { data: html } = await got(item.link); const $ = cheerio.load(html); item.description = $('.text').html(); + item.pubDate = timezone(parseDate($('meta[name="PubDate"]').attr('content')), +8); return item; }); } else if (/^https:\/\/mp\.weixin\.qq\.com\//.test(item.link)) { @@ -72,8 +52,6 @@ module.exports = async (ctx) => { }) ); - await browser.close(); - ctx.state.data = { title: data.title, description: data.description,