feat(route): add 掘金专栏 (#7889)

* feat(route): add 掘金专栏

* fix: 时间处理
This commit is contained in:
2021-08-12 17:06:18 +08:00
committed by GitHub
parent b965e54298
commit 250c1add7f
3 changed files with 36 additions and 3 deletions

View File

@@ -133,6 +133,7 @@ router.get('/juejin/posts/:id', require('./routes/juejin/posts'));
router.get('/juejin/collections/:userId', require('./routes/juejin/favorites')); router.get('/juejin/collections/:userId', require('./routes/juejin/favorites'));
router.get('/juejin/collection/:collectionId', require('./routes/juejin/collection')); router.get('/juejin/collection/:collectionId', require('./routes/juejin/collection'));
router.get('/juejin/shares/:userId', require('./routes/juejin/shares')); router.get('/juejin/shares/:userId', require('./routes/juejin/shares'));
router.get('/juejin/column/:id', require('./routes/juejin/column'));
// 自如 // 自如
router.get('/ziroom/room/:city/:iswhole/:room/:keyword', require('./routes/ziroom/room')); router.get('/ziroom/room/:city/:iswhole/:room/:keyword', require('./routes/ziroom/room'));

View File

@@ -0,0 +1,31 @@
const got = require('@/utils/got');
const util = require('./utils');
module.exports = async (ctx) => {
const { id } = ctx.params;
const detail = await got({
method: 'get',
url: `https://api.juejin.cn/content_api/v1/column/detail?column_id=${id}`,
});
const response = await got({
method: 'post',
url: 'https://api.juejin.cn/content_api/v1/column/articles_cursor',
json: {
column_id: id,
limit: 20,
cursor: '0',
sort: 0,
},
});
const { data } = response.data;
const detailData = detail.data.data;
const columnName = detailData && detailData.column_version && detailData.column_version.title;
const resultItems = await util.ProcessFeed(data, ctx.cache);
ctx.state.data = {
title: `掘金专栏-${columnName}`,
link: `https://juejin.cn/column/${id}`,
description: `掘金专栏-${columnName}`,
item: resultItems,
};
};

View File

@@ -1,4 +1,6 @@
const got = require('@/utils/got'); const got = require('@/utils/got');
const { parseDate } = require('@/utils/parse-date');
const timezone = require('@/utils/timezone');
const cheerio = require('cheerio'); const cheerio = require('cheerio');
// 加载文章页 // 加载文章页
@@ -30,14 +32,13 @@ async function load(link) {
const ProcessFeed = async (list, caches) => const ProcessFeed = async (list, caches) =>
await Promise.all( await Promise.all(
list.map(async (item) => { list.map(async (item) => {
// 解析时间补偿时区offset const pubdate = timezone(parseDate(parseInt(item.article_info.ctime) * 1000), +8);
const pubdate = new Date(parseInt(item.article_info.ctime) * 1000 - 8 * 60 * 60 * 1000);
const link = `https://juejin.cn/post/${item.article_id}`; const link = `https://juejin.cn/post/${item.article_id}`;
// 列表上提取到的信息 // 列表上提取到的信息
const single = { const single = {
title: item.article_info.title, title: item.article_info.title,
description: `${(item.content || item.summaryInfo || '无描述').replace(/[\x00-\x08\x0b-\x0c\x0e-\x1f\x7f]/g, '')}`, description: `${(item.content || item.summaryInfo || '无描述').replace(/[\x00-\x08\x0b-\x0c\x0e-\x1f\x7f]/g, '')}`,
pubDate: pubdate.toUTCString(), pubDate: pubdate,
author: item.author_user_info.user_name, author: item.author_user_info.user_name,
link, link,
}; };