RSSHub/lib/v2/southcn/nfapp/column.js

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