diff --git a/docs/new-media.md b/docs/new-media.md index 30396ae6c4..c1176e6f54 100644 --- a/docs/new-media.md +++ b/docs/new-media.md @@ -2128,3 +2128,13 @@ QueryString: ### 全文 + +## 游戏葡萄 +无文章正文,仅有目录索引。 +### 全部文章 + + + +### 分类 +例子对应[深度分类](http://youxiputao.com/article/index/id/13) + diff --git a/lib/router.js b/lib/router.js index be075f911a..1356b2c5f1 100644 --- a/lib/router.js +++ b/lib/router.js @@ -3789,6 +3789,9 @@ router.get('/nace/blog/:sort?', require('./routes/nace/blog')); // Caixin Latest router.get('/caixin/latest', require('./routes/caixin/latest')); +// 游戏葡萄 +router.get('/gamegrape/:id?', require('./routes/gamegrape/index')); + // 阳光高考 router.get('/chsi/zszcgd/:category?', require('./routes/chsi/zszcgd')); diff --git a/lib/routes/gamegrape/index.js b/lib/routes/gamegrape/index.js new file mode 100644 index 0000000000..5601a8722e --- /dev/null +++ b/lib/routes/gamegrape/index.js @@ -0,0 +1,49 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); +const BASE_URL = 'http://youxiputao.com'; +function getNum(str) { + const result = str.match(/(\d{1,2}).*/); + if (result) { + return parseInt(result[1]); + } +} +function resolveRelativeTime(relativeTime) { + const result = /\S* · (\d{1,2}天)?(\d{1,2}小时)?(\d{1,2}分钟)?/.exec(relativeTime); + let day, hour, min; + if (result[1]) { + day = getNum(result[1]); + } + if (result[2]) { + hour = getNum(result[2]); + } + if (result[3]) { + min = getNum(result[3]); + } + return (((day || 0) * 24 + (hour || 0)) * 60 + (min || 0)) * 60 * 1000; +} +module.exports = async (ctx) => { + const { id } = ctx.params; + const feed_url = `${BASE_URL}/article/${id ? `index/id/${id}` : ''}`; + const resp = await got({ url: feed_url }); + const { data } = resp; + const $ = cheerio.load(data); + const feed_title = $('title').text(); + const list = $('.news-info-box') + .map((_, item) => { + item = $(item); + const txt_author_pubDate = $(item.find('div > p > span')[1]).text(); + return { + title: item.parent().find('h4').text(), + link: BASE_URL + item.find('a.cover').attr('href'), + author: `${txt_author_pubDate}`.replace(/ · \S*$/, ''), + description: $(item.find('div > p')[0]).text(), + pubDate: Date.now() - resolveRelativeTime(txt_author_pubDate), + }; + }) + .get(); + ctx.state.data = { + title: feed_title, + link: feed_url, + item: list, + }; +};