/
index.ts
109 lines (101 loc) · 3.16 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import InvalidParameterError from '@/errors/types/invalid-parameter';
import { Route } from '@/types';
import cache from '@/utils/cache';
import got from '@/utils/got';
import { load } from 'cheerio';
const get_url = (caty) => `https://${caty}.ithome.com/`;
const config = {
it: {
title: 'IT 资讯',
},
soft: {
title: '软件之家',
},
win10: {
title: 'win10 之家',
},
win11: {
title: 'win11 之家',
},
iphone: {
title: 'iphone 之家',
},
ipad: {
title: 'ipad 之家',
},
android: {
title: 'android 之家',
},
digi: {
title: '数码之家',
},
next: {
title: '智能时代',
},
};
export const route: Route = {
path: '/:caty',
categories: ['new-media'],
example: '/ithome/it',
parameters: { caty: '类别' },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
name: '分类资讯',
maintainers: ['luyuhuang'],
handler,
description: `| it | soft | win10 | win11 | iphone | ipad | android | digi | next |
| ------- | -------- | ---------- | ---------- | ----------- | --------- | ------------ | -------- | -------- |
| IT 资讯 | 软件之家 | win10 之家 | win11 之家 | iphone 之家 | ipad 之家 | android 之家 | 数码之家 | 智能时代 |`,
};
async function handler(ctx) {
const cfg = config[ctx.req.param('caty')];
if (!cfg) {
throw new InvalidParameterError('Bad category. See <a href="https://docs.rsshub.app/routes/new-media#it-zhi-jia">https://docs.rsshub.app/routes/new-media#it-zhi-jia</a>');
}
const current_url = get_url(ctx.req.param('caty'));
const response = await got({
method: 'get',
url: current_url,
});
const $ = load(response.data);
const list = $('#list > div.fl > ul > li > div > h2 > a')
.slice(0, 10)
.map((_, item) => {
item = $(item);
return {
title: item.text(),
link: item.attr('href'),
};
})
.get();
const items = await Promise.all(
list.map((item) =>
cache.tryGet(item.link, async () => {
const res = await got({ method: 'get', url: item.link });
const content = load(res.data);
const post = content('#paragraph');
post.find('img[data-original]').each((_, ele) => {
ele = $(ele);
ele.attr('src', ele.attr('data-original'));
ele.removeAttr('class');
ele.removeAttr('data-original');
});
item.description = post.html();
item.pubDate = new Date(content('#pubtime_baidu').text() + ' GMT+8').toUTCString();
return item;
})
)
);
return {
title: 'IT 之家 - ' + cfg.title,
link: current_url,
image: 'https://img.ithome.com/m/images/logo.png',
item: items,
};
}