Files
RSSHub/lib/v2/lkong/forum.js
Ethan Shen 2949bb4f21 fix(route): 龙空 (#9096)
* fix(route): 龙空

* fix: throw login required error
2022-02-14 21:25:43 +08:00

55 lines
1.7 KiB
JavaScript

const got = require('@/utils/got');
const { parseDate } = require('@/utils/parse-date');
const { art } = require('@/utils/render');
const path = require('path');
const { viewForum, viewThread } = require('./query');
module.exports = async (ctx) => {
const id = ctx.params.id ?? '8';
const digest = ctx.params.digest;
const rootUrl = 'https://www.lkong.com';
const apiUrl = 'https://api.lkong.com/api';
const currentUrl = `${rootUrl}/forum/${id}`;
const response = await got({
method: 'post',
url: apiUrl,
json: viewForum(id),
});
let items = response.data.data[digest ? 'hots' : 'threads'].map((item) => ({
guid: item.tid,
title: item.title,
link: `${rootUrl}/thread/${item.tid}`,
}));
items = await Promise.all(
items.map((item) =>
ctx.cache.tryGet(item.link, async () => {
const detailResponse = await got({
method: 'post',
url: apiUrl,
json: viewThread(item.guid, 1),
});
item.author = detailResponse.data.data.thread.author.name;
item.pubDate = parseDate(detailResponse.data.data.thread.dateline);
item.description = art(path.join(__dirname, 'templates/content.art'), {
content: JSON.parse(detailResponse.data.data.posts[0].content),
});
return item;
})
)
);
ctx.state.data = {
title: `${response.data.data.forum.name} - 龙空`,
link: currentUrl,
item: items,
description: response.data.data.forumCount.info,
};
};