mirror of
https://github.com/DIYgod/RSSHub.git
synced 2026-09-24 23:12:34 +08:00
feat(route): add 香港高登 (#8109)
Co-authored-by: DIYgod <diy.d.god@gmail.com>
This commit is contained in:
@@ -2644,6 +2644,56 @@ column 为 third 时可选的 category:
|
||||
|
||||
</Route>
|
||||
|
||||
## 香港高登
|
||||
|
||||
### 頻道
|
||||
|
||||
<Route author="nczitzk" example="/hkgolden/BW" path="/hkgolden/:id?/:limit?/:sort?" :paramsDesc="['頻道,见下表,默认为吹水台,可在对应频道页的 URL 中找到', '類型,见下表,默认为全部', '排序,见下表,默认为最後回應時間']">
|
||||
|
||||
頻道
|
||||
|
||||
| 吹水台 | 高登熱 | 最新 | 時事台 | 娛樂台 |
|
||||
| ------ | ------ | ---- | ------ | ------ |
|
||||
| BW | HT | NW | CA | ET |
|
||||
|
||||
| 體育台 | 財經台 | 學術台 | 講故台 | 創意台 |
|
||||
| ------ | ------ | ------ | ------ | ------ |
|
||||
| SP | FN | ST | SY | EP |
|
||||
|
||||
| 硬件台 | 電訊台 | 軟件台 | 手機台 | Apps 台 |
|
||||
| ------ | ------ | ------ | ------ | ------- |
|
||||
| HW | IN | SW | MP | AP |
|
||||
|
||||
| 遊戲台 | 飲食台 | 旅遊台 | 潮流台 | 動漫台 |
|
||||
| ------ | ------ | ------ | ------ | ------ |
|
||||
| GM | ED | TR | CO | AN |
|
||||
|
||||
| 玩具台 | 音樂台 | 影視台 | 攝影台 | 汽車台 |
|
||||
| ------ | ------ | ------ | ------ | ------ |
|
||||
| TO | MU | VI | DC | TS |
|
||||
|
||||
| 上班台 | 感情台 | 校園台 | 親子台 | 寵物台 |
|
||||
| ------ | ------ | ------ | ------ | ------ |
|
||||
| WK | LV | SC | BB | PT |
|
||||
|
||||
| 站務台 | 電台 | 活動台 | 買賣台 | 直播台 | 成人台 | 考古台 |
|
||||
| ------ | ---- | ------ | ------ | ------ | ------ | ------ |
|
||||
| MB | RA | AC | BS | JT | AU | OP |
|
||||
|
||||
排序
|
||||
|
||||
| 最後回應時間 | 發表時間 | 熱門 |
|
||||
| ------------ | -------- | ---- |
|
||||
| 0 | 1 | 2 |
|
||||
|
||||
類型
|
||||
|
||||
| 全部 | 正式 | 公海 |
|
||||
| ---- | ---- | ---- |
|
||||
| -1 | 1 | 0 |
|
||||
|
||||
</Route>
|
||||
|
||||
## 香港討論區
|
||||
|
||||
### 版塊
|
||||
|
||||
@@ -4210,6 +4210,9 @@ router.get('/right/forum/:id?', lazyloadRouteHandler('./routes/right/forum'));
|
||||
// 香港經濟日報
|
||||
router.get('/hket/:category?', lazyloadRouteHandler('./routes/hket/index'));
|
||||
|
||||
// 香港高登
|
||||
router.get('/hkgolden/:id?/:limit?/:sort?', lazyloadRouteHandler('./routes/hkgolden'));
|
||||
|
||||
// 香港討論區
|
||||
router.get('/discuss/:fid', lazyloadRouteHandler('./routes/discuss'));
|
||||
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
const got = require('@/utils/got');
|
||||
const { parseDate } = require('@/utils/parse-date');
|
||||
const dayjs = require('dayjs');
|
||||
|
||||
const channels = {
|
||||
BW: '吹水台',
|
||||
HT: '高登熱',
|
||||
NW: '最 新',
|
||||
CA: '時事台',
|
||||
ET: '娛樂台',
|
||||
SP: '體育台',
|
||||
FN: '財經台',
|
||||
ST: '學術台',
|
||||
SY: '講故台',
|
||||
EP: '創意台',
|
||||
HW: '硬件台',
|
||||
IN: '電訊台',
|
||||
SW: '軟件台',
|
||||
MP: '手機台',
|
||||
AP: 'Apps台',
|
||||
GM: '遊戲台',
|
||||
ED: '飲食台',
|
||||
TR: '旅遊台',
|
||||
CO: '潮流台',
|
||||
AN: '動漫台',
|
||||
TO: '玩具台',
|
||||
MU: '音樂台',
|
||||
VI: '影視台',
|
||||
DC: '攝影台',
|
||||
TS: '汽車台',
|
||||
WK: '上班台',
|
||||
LV: '感情台',
|
||||
SC: '校園台',
|
||||
BB: '親子台',
|
||||
PT: '寵物台',
|
||||
MB: '站務台',
|
||||
RA: '電 台',
|
||||
AC: '活動台',
|
||||
BS: '買賣台',
|
||||
JT: '直播台',
|
||||
AU: '成人台',
|
||||
OP: '考古台',
|
||||
};
|
||||
|
||||
const limits = {
|
||||
'-1': '全部',
|
||||
1: '正式',
|
||||
0: '公海',
|
||||
};
|
||||
|
||||
const sorts = {
|
||||
0: '最後回應時間',
|
||||
1: '發表時間',
|
||||
2: '熱門',
|
||||
};
|
||||
|
||||
module.exports = async (ctx) => {
|
||||
const id = ctx.params.id || 'BW';
|
||||
const sort = ctx.params.sort || '0';
|
||||
const limit = ctx.params.limit || '-1';
|
||||
|
||||
const rootUrl = 'https://forum.hkgolden.com';
|
||||
const apiRootUrl = 'https://api.hkgolden.com';
|
||||
const apiUrl = `${apiRootUrl}/v1/topics/HT/1?sort=${sort}&limit=${limit}`;
|
||||
|
||||
const response = await got({
|
||||
method: 'get',
|
||||
url: apiUrl,
|
||||
});
|
||||
|
||||
const list = response.data.data.list.slice(0, ctx.query.limit ? parseInt(ctx.query.limit) : 30).map((item) => ({
|
||||
link: item.id,
|
||||
title: item.title,
|
||||
author: item.authorName,
|
||||
pubDate: parseDate(item.orderDate),
|
||||
}));
|
||||
|
||||
const items = await Promise.all(
|
||||
list.map((item) =>
|
||||
ctx.cache.tryGet(item.link, async () => {
|
||||
const detailResponse = await got({
|
||||
method: 'get',
|
||||
url: `${apiRootUrl}/v1/view/${item.link}`,
|
||||
});
|
||||
|
||||
const data = detailResponse.data.data;
|
||||
|
||||
item.link = `${rootUrl}/thread/${item.id}`;
|
||||
item.description =
|
||||
`<table border="1" cellspacing="0"><tr><td>${data.authorName} (${dayjs(data.messageDate).format('YYYY-MM-DD hh:mm:ss')})</td></tr>` +
|
||||
`<tr><td>${data.content.replace(/src="\/faces/g, 'src="https://assets.hkgolden.com/faces')}</td></tr>`;
|
||||
|
||||
for (const reply of data.replies) {
|
||||
item.description +=
|
||||
`<tr><td>${reply.authorName} (${dayjs(reply.replyDate).format('YYYY-MM-DD hh:mm:ss')})</td></tr>` + `<tr><td>${reply.content.replace(/src="\/faces/g, 'src="https://assets.hkgolden.com/faces')}</td></tr>`;
|
||||
}
|
||||
|
||||
item.description += '</table>';
|
||||
|
||||
return item;
|
||||
})
|
||||
)
|
||||
);
|
||||
|
||||
ctx.state.data = {
|
||||
title: `${channels[id]} (${sorts[sort]}|${limits[limit]}) - 香港高登`,
|
||||
link: `${rootUrl}/channel/${id}`,
|
||||
item: items,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user