diff --git a/docs/traditional-media.md b/docs/traditional-media.md index 82ddfff69..afb193186 100644 --- a/docs/traditional-media.md +++ b/docs/traditional-media.md @@ -201,6 +201,8 @@ category 对应的关键词有 + + ## 人民日报 diff --git a/lib/router.js b/lib/router.js index 235b3841c..5fec58db4 100755 --- a/lib/router.js +++ b/lib/router.js @@ -1086,6 +1086,9 @@ router.get('/mpaypass/news', require('./routes/mpaypass/news')); // 新浪科技探索 router.get('/sina/discovery/:type', require('./routes/sina/discovery')); +// 新浪科技滚动新闻 +router.get('/sina/rollnews', require('./routes/sina/rollnews')); + // Animen router.get('/animen/news/:type', require('./routes/animen/news')); diff --git a/lib/routes/sina/rollnews.js b/lib/routes/sina/rollnews.js new file mode 100644 index 000000000..59128a45a --- /dev/null +++ b/lib/routes/sina/rollnews.js @@ -0,0 +1,40 @@ +const axios = require('../../utils/axios'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const response = await axios.get(`https://feed.mix.sina.com.cn/api/roll/get?pageid=372&lid=2431&k=&num=50&page=1&r=${Math.random()}&callback=&_=${new Date().getTime()}`); + const list = response.data.result.data; + + const out = await Promise.all( + list.map(async (data) => { + const title = data.title; + const date = data.intime * 1000; + const link = data.url; + + const description = await ctx.cache.tryGet( + `sina-rollnews: ${link}`, + async () => { + const response = await axios.get(link); + const $ = cheerio.load(response.data); + + return $('.article').html(); + }, + 3 * 60 * 60 + ); + + const single = { + title: title, + link, + description: description, + pubDate: new Date(date).toUTCString(), + }; + return Promise.resolve(single); + }) + ); + + ctx.state.data = { + title: '新浪科技滚动新闻', + link: 'https://tech.sina.com.cn/roll/rollnews.shtml#pageid=372&lid=2431&k=&num=50&page=1', + item: out, + }; +};