/
status.ts
72 lines (69 loc) 路 2.09 KB
/
status.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
import { Route } from '@/types';
import got from '@/utils/got';
import { load } from 'cheerio';
import { parseDate } from '@/utils/parse-date';
export const route: Route = {
path: '/status',
categories: ['new-media'],
example: '/pingwest/status',
parameters: {},
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
radar: [
{
source: ['pingwest.com/status', 'pingwest.com/'],
},
],
name: '瀹炴椂瑕侀椈',
maintainers: ['sanmmm'],
handler,
url: 'pingwest.com/status',
};
async function handler() {
const baseUrl = 'https://www.pingwest.com';
const url = `${baseUrl}/api/state/list`;
const response = await got(url, {
searchParams: {
page: 1,
},
headers: {
Referer: baseUrl,
},
});
const $ = load(response.data.data.list);
const items = $('section.item')
.toArray()
.map((ele) => {
const timestamp = ele.attribs['data-t'];
const $item = load(ele);
const rightNode = $item('.news-info');
const tag = rightNode.find('.item-tag-list').text();
const title = rightNode.find('.title').text();
const link = rightNode.find('a').last().attr('href');
let description = rightNode.text();
const imgUrl = $item('.news-img img');
if (imgUrl.length) {
imgUrl.attr('src', imgUrl.attr('src').split('?x-')[0]);
description += `<br>${imgUrl.parent().html()}`;
}
return {
title: title || tag,
link: link.startsWith('http') ? link : `https:${link}`,
description,
pubDate: parseDate(timestamp, 'X'),
category: tag,
};
});
return {
title: '鍝佺帺 - 瀹炴椂瑕侀椈',
description: '鍝佺帺 - 瀹炴椂瑕侀椈',
link: `${baseUrl}/status`,
item: items,
};
}