add 腾讯大家的作者与专栏 (#1537)

closes #1535
This commit is contained in:
Chenyang Shi
2019-02-13 14:29:14 +08:00
committed by DIYgod
parent 8d85ed995d
commit ba3ef16542
4 changed files with 110 additions and 0 deletions

View File

@@ -2703,6 +2703,8 @@ Example: `https://store.steampowered.com/search/?specials=1&term=atelier` 中的
### 腾讯大家
<route name="首页" author="xyqfer" example="/dajia" path="/dajia"/>
<route name="作者作品" author="LogicJake" example="/dajia/author/404" path="/dajia/author/:uid" :paramsDesc="['作者id']"/>
<route name="专栏" author="LogicJake" example="/dajia/zhuanlan/404" path="/dajia/zhuanlan/:uid" :paramsDesc="['专栏id']"/>
### 抽屉

View File

@@ -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'));

View File

@@ -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,
};
};

View File

@@ -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,
};
};