diff --git a/docs/README.md b/docs/README.md index ceebc5c38a..5bce90321c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2703,6 +2703,8 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的 ### 腾讯大家 + + ### 抽屉 diff --git a/lib/router.js b/lib/router.js index 4d93d2ebff..eb3ced7271 100644 --- a/lib/router.js +++ b/lib/router.js @@ -467,6 +467,8 @@ router.get('/aqk/:category', require('./routes/aqk/category')); // 腾讯大家 router.get('/dajia', require('./routes/tencent/dajia/index')); +router.get('/dajia/author/:uid', require('./routes/tencent/dajia/author')); +router.get('/dajia/zhuanlan/:uid', require('./routes/tencent/dajia/zhuanlan')); // 腾讯游戏开发者社区 router.get('/gameinstitute/community/:tag?', require('./routes/tencent/gameinstitute/community')); diff --git a/lib/routes/tencent/dajia/author.js b/lib/routes/tencent/dajia/author.js new file mode 100644 index 0000000000..d253709b41 --- /dev/null +++ b/lib/routes/tencent/dajia/author.js @@ -0,0 +1,52 @@ +const axios = require('../../../utils/axios'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const uid = ctx.params.uid; + const link = `http://dajia.qq.com/author_personal.htm#!/${uid}`; + + const info_api = `http://i.match.qq.com/ninjayc/dajiazuozheye?action=zuojia&authorid=${uid}`; + const info_response = await axios.get(info_api); + const author_name = info_response.data.data.author.name; + const description = info_response.data.data.author.description; + + const article_api = `http://i.match.qq.com/ninjayc/dajiawenzhanglist?action=wz&authorid=${uid}`; + const response = await axios.get(article_api); + const list = response.data.data; + + const out = await Promise.all( + list.map(async (info) => { + const title = info.n_title; + const date = info.n_publishtime; + const itemUrl = info.n_mobile_url; + + const cache = await ctx.cache.get(itemUrl); + if (cache) { + return Promise.resolve(JSON.parse(cache)); + } + + const response = await axios.get(itemUrl); + const $ = cheerio.load(response.data); + const description = $('#articleContent') + .html() + .replace(/src="\//g, 'src="http:/') + .trim(); + + const single = { + title: title, + link: itemUrl, + description: description, + pubDate: new Date(date).toUTCString(), + }; + ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60); + return Promise.resolve(single); + }) + ); + + ctx.state.data = { + title: `${author_name}的文章——腾讯大家`, + link: link, + description: description, + item: out, + }; +}; diff --git a/lib/routes/tencent/dajia/zhuanlan.js b/lib/routes/tencent/dajia/zhuanlan.js new file mode 100644 index 0000000000..7f462daae1 --- /dev/null +++ b/lib/routes/tencent/dajia/zhuanlan.js @@ -0,0 +1,54 @@ +const axios = require('../../../utils/axios'); +const cheerio = require('cheerio'); + +module.exports = async (ctx) => { + const uid = ctx.params.uid; + const link = `http://dajia.qq.com/tanzi_diceng.htm#!/${uid}`; + + const info_api = `http://i.match.qq.com/ninjayc/dajialanmu?action=lanmu&channelid=${uid}`; + const info_response = await axios.get(info_api); + const name = info_response.data.data.channel.n_cname; + const description = info_response.data.data.channel.n_describe; + + const article_api = `http://i.match.qq.com/ninjayc/dajiawenzhanglist?action=wz&channelid=${uid}`; + const response = await axios.get(article_api); + const list = response.data.data; + + const out = await Promise.all( + list.map(async (info) => { + const title = info.n_title; + const date = info.n_publishtime; + const itemUrl = info.n_mobile_url; + const author = info.name; + + const cache = await ctx.cache.get(itemUrl); + if (cache) { + return Promise.resolve(JSON.parse(cache)); + } + + const response = await axios.get(itemUrl); + const $ = cheerio.load(response.data); + const description = $('#articleContent') + .html() + .replace(/src="\//g, 'src="http:/') + .trim(); + + const single = { + title: title, + link: itemUrl, + description: description, + author: author, + pubDate: new Date(date).toUTCString(), + }; + ctx.cache.set(itemUrl, JSON.stringify(single), 24 * 60 * 60); + return Promise.resolve(single); + }) + ); + + ctx.state.data = { + title: `${name}——腾讯大家`, + link: link, + description: description, + item: out, + }; +};