diff --git a/docs/shopping.md b/docs/shopping.md index eae0a16575..caba5c7a34 100644 --- a/docs/shopping.md +++ b/docs/shopping.md @@ -347,3 +347,14 @@ For instance, in + +## 麦当劳 + +### 麦当劳活动资讯 + + +| 全部分类 | 社会责任 | 人员品牌 | 产品故事 | 优惠 | 品牌文化 | 活动速报 | +| -------- | ------- | --- | ------- | ------ | ------- | -------- | +| news_list | responsibility | brand | product | sales | culture | event | + + diff --git a/lib/router.js b/lib/router.js index 0db1c19aae..f99dcd25dd 100644 --- a/lib/router.js +++ b/lib/router.js @@ -3786,6 +3786,10 @@ router.get('/nace/blog/:sort?', require('./routes/nace/blog')); // Caixin Latest router.get('/caixin/latest', require('./routes/caixin/latest')); + +// Mcdonalds +router.get('/mcdonalds/:category', require('./routes/mcdonalds/news')); + // Pincong 品葱 router.get('/pincong/category/:category?/:sort?', require('./routes/pincong/index')); router.get('/pincong/hot/:category?', require('./routes/pincong/hot')); @@ -3811,4 +3815,5 @@ router.get('/simpread/changelog', require('./routes/simpread/changelog')); // Radio Free Asia router.get('/rfa/:language?/:channel?/:subChannel?', require('./routes/rfa/index')); + module.exports = router; diff --git a/lib/routes/mcdonalds/news.js b/lib/routes/mcdonalds/news.js new file mode 100644 index 0000000000..f62e83a77b --- /dev/null +++ b/lib/routes/mcdonalds/news.js @@ -0,0 +1,51 @@ +const got = require('@/utils/got'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const category_param = ctx.params.category || 'news_list'; + const categories = category_param.split('+'); + const baseUrl = "https://www.mcdonalds.com.cn/news/"; + + const get_news_list = async (cates) => await Promise.all( + cates.map(async (cate) => { + const response = await got.get(baseUrl + cate); + const $ = cheerio.load(response.data); + // console.log($('title').text()); + const news = $('.news_list .box-container > div').slice(0, 10).map((idx, item) => { + item = $(item); + return item.find('a[target]').attr('href'); + }) + .get(); + // console.log(news); + return Promise.resolve(news); + }) + ); + const all_news = [].concat.apply([], await get_news_list(categories)); + + const out = await Promise.all( + all_news.map(async (news_url) => { + const news_detail = await ctx.cache.tryGet(news_url, async () => { + const result = await got.get(news_url); + const $ = cheerio.load(result.data); + +// console.log($('h3 ~ time').text(), news_url); + + return { + title: $('h3').text(), + link: news_url, + // author: author, + pubDate: new Date($('h3 ~ time').text()).toUTCString(), + description: $('.cmsPage').html(), + }; + }); + return Promise.resolve(news_detail); + }) + ); + + ctx.state.data = { + title: '麦当劳资讯', + link: baseUrl, + item: out, + }; + +};