46 lines
2.2 KiB
JavaScript
46 lines
2.2 KiB
JavaScript
const got = require('@/utils/got');
|
|
const timezone = require('@/utils/timezone');
|
|
const { parseDate } = require('@/utils/parse-date');
|
|
const { art } = require('@/utils/render');
|
|
const path = require('path');
|
|
const { parseArticle } = require('./utils');
|
|
|
|
module.exports = async (ctx) => {
|
|
const columnId = ctx.params.column ?? 38;
|
|
|
|
const getColumnDetail = `https://api.nfapp.southcn.com/nanfang_if/getColumn?columnId=${columnId}`;
|
|
const { data: responseColumn } = await got(getColumnDetail);
|
|
const columnName = responseColumn.columnName === '' ? `南方+` : `南方+ - ${responseColumn.columnName}`;
|
|
const columnLink = responseColumn.linkUrl === '' ? `https://m.nfapp.southcn.com/${columnId}` : responseColumn.linkUrl;
|
|
|
|
/* Notes of columnLink:
|
|
1) 南方号 uses responseColumn.linkUrl, e.g. https://static.nfapp.southcn.com/nfh/shareNFNum/index.html?nfhId=3392;
|
|
2) 栏目/频道's responseColumn.linkUrl is empty, we use its subpage on 南方+ mobile site, e.g. https://m.nfapp.southcn.com/38;
|
|
3) But https://m.nfapp.southcn.com/${columnId} may still be invalid for some higher-level columns, e.g. 20.
|
|
*/
|
|
|
|
const getArticleList = `https://api.nfapp.southcn.com/nfplus-manuscript-web/article/list?columnId=${columnId}&nfhSubCount=1&pageNum=1&pageSize=20`; // this api only returns up to 20 articles
|
|
const { data: responseArticle } = await got(getArticleList);
|
|
const list = responseArticle.data.list
|
|
.filter((i) => i.articleType === 0)
|
|
.map((item) => ({
|
|
title: '【' + item.columnName + '】' + item.title,
|
|
description: art(path.join(__dirname, '../templates/description.art'), {
|
|
thumb: item.picMiddle,
|
|
description: item.summary === '详见内文' ? '' : item.summary,
|
|
}),
|
|
pubDate: timezone(parseDate(item.updateTime), +8),
|
|
link: `http://pc.nfapp.southcn.com/${item.columnId}/${item.articleId}.html`,
|
|
articleId: item.articleId,
|
|
shareUrl: item.shareUrl,
|
|
}));
|
|
|
|
const items = await Promise.all(list.map((item) => parseArticle(item, ctx.cache.tryGet)));
|
|
|
|
ctx.state.data = {
|
|
title: columnName,
|
|
link: columnLink,
|
|
item: items,
|
|
};
|
|
};
|