From a538a9c0d69d0565af0fa86cb9951777779db821 Mon Sep 17 00:00:00 2001 From: junfengP <840282629@qq.com> Date: Fri, 8 Mar 2019 11:23:38 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E7=94=B5=E5=BD=B1=E5=A4=A9=E5=A0=82?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=85=A8=E6=96=87=E6=8A=93=E5=8F=96=20(#1697?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit let list = $('.co_content8 table tr').get(); list.splice(0, 1); 原因如下: 页面内含有两个 .co_content8 table 仅第一个 table内 第一个 tr 元素是广告 const list = $('.co_content8 table tr:not(:first-child)').get(); 会丢失第二个table的第一个tr元素 --- lib/routes/dytt/index.js | 57 +++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 15 deletions(-) diff --git a/lib/routes/dytt/index.js b/lib/routes/dytt/index.js index c89bfd63f4..90b1db9446 100644 --- a/lib/routes/dytt/index.js +++ b/lib/routes/dytt/index.js @@ -1,6 +1,24 @@ const axios = require('../../utils/axios'); const cheerio = require('cheerio'); const iconv = require('iconv-lite'); + +async function load(link, ctx) { + const cache = await ctx.cache.get(link); + if (cache) { + return cache; + } + const response = await axios.get(link, { + responseType: 'arraybuffer', + }); + response.data = iconv.decode(response.data, 'gb2312'); + + const $ = cheerio.load(response.data); + + const description = $('div#Zoom').html(); + await ctx.cache.set(link, description, 24 * 60 * 60); + return description; +} + module.exports = async (ctx) => { const response = await axios.get('http://www.dytt8.net', { responseType: 'arraybuffer', @@ -9,25 +27,34 @@ module.exports = async (ctx) => { const $ = cheerio.load(response.data); const list = $('.co_content8 table tr').get(); + // 页面含有2个.co_content8 table + // 仅第一个table内第一个tr元素是广告连接 + // 去除该广告连接 + list.splice(0, 1); + // const list = $('.co_content8 table tr:not(:first-child)').get(); + const process = await Promise.all( + list.map(async (item) => { + const link = $(item).find('a:nth-of-type(2)'); + const itemUrl = 'http://www.dytt8.net' + link.attr('href'); + const other = await load(itemUrl, ctx); + return { + title: link.text(), + description: other, + pubDate: new Date( + $(item) + .find('font') + .text() + ).toUTCString(), + link: itemUrl, + }; + }) + ); + const data = { title: '电影天堂', link: 'http://www.dytt8.net', description: '电影天堂RSS', - item: list - .map((item) => { - const link = $(item).find('a:nth-of-type(2)'); - return { - title: link.text(), - description: link.text(), - pubDate: new Date( - $(item) - .find('font') - .text() - ).toUTCString(), - link: 'http://www.dytt8.net' + link.attr('href'), - }; - }) - .slice(1), + item: process, }; ctx.state.data = data;