Skip to content

Commit

Permalink
feat(route): update dykszx (#16855)
Browse files Browse the repository at this point in the history
* feat(route): update dykszx

* feat(route): update dykszx

* Update lib/routes/dykszx/news.ts
  • Loading branch information
zytomorrow authored Sep 23, 2024
1 parent f378dab commit 9e8ae47
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 60 deletions.
60 changes: 0 additions & 60 deletions lib/routes-deprecated/dykszx/news.js

This file was deleted.

8 changes: 8 additions & 0 deletions lib/routes/dykszx/namespace.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import type { Namespace } from '@/types';

export const namespace: Namespace = {
name: '德阳人事考试网',
url: 'www.dykszx.com',
categories: ['government'],
description: '德阳人事考试网',
};
88 changes: 88 additions & 0 deletions lib/routes/dykszx/news.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import { Route } from '@/types';
import { load } from 'cheerio';
import { parseDate } from '@/utils/parse-date';
import timezone from '@/utils/timezone';
import got from '@/utils/got';
import cache from '@/utils/cache';

const HOST = 'https://www.dykszx.com';

const getContent = async (href) => {
const newsPage = `${HOST}${href}`;
const response = await got.get(newsPage);
const $ = load(response.data);
const newsTime =
$('body > div:nth-child(3) > div.page.w > div.shuxing.w')
.text()
.trim()
.match(/时间:(.*?)点击/g)?.[0] || '';
// 移除二维码
$('.sjlook').remove();
const content = $('#show-body').html() || '';
return { newsTime, content, newsPage };
};

const newsTypeObj = {
all: { selector: '#nrs > li > b', name: '新闻中心' },
gwy: { selector: 'body > div:nth-child(3) > div:nth-child(8) > ul > li', name: '公务员考试' },
sydw: { selector: 'body > div:nth-child(3) > div:nth-child(9) > ul > li', name: '事业单位考试' },
zyzc: { selector: 'body > div:nth-child(3) > div:nth-child(10) > ul > li', name: '执(职)业资格、职称考试' },
other: { selector: 'body > div:nth-child(3) > div:nth-child(11) > ul > li', name: '其他考试' },
};

async function handler(ctx) {
const newsType = ctx.req.param('newsType') || 'all';
const response = await got(HOST);
const data = response.data;
const $ = load(data);
const newsList = $(newsTypeObj[newsType].selector).toArray();

const newsDetail = await Promise.all(
newsList.map((item) => {
const href = item.children[0].attribs.href;
return cache.tryGet(href, async () => {
const newsContent = await getContent(href);
return {
title: item.children[0].children[0].data,
description: newsContent.content,
link: newsContent.newsPage,
pubDate: timezone(parseDate(newsContent.newsTime, '时间:YYYY-MM-DD HH:mm:ss'), +8),
};
});
})
);
return {
title: `考试新闻发布(${newsTypeObj[newsType].name})`,
link: HOST,
description: `德阳人事考试网 考试新闻发布 (${newsTypeObj[newsType].name})`,
item: newsDetail,
};
}

export const route: Route = {
path: '/news/:newsType?',
categories: ['government'],
example: '/dykszx/news',
parameters: { newsType: '考试类型。默认新闻中心(all)' },
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
radar: [
{
source: ['www.dykszx.com/'],
target: '/news/all',
},
],
name: '考试新闻发布',
maintainers: ['zytomorrow'],
handler,
url: 'https://www.dykszx.com/*',
description: `| 新闻中心 | 公务员考试 | 事业单位 | (职)业资格、职称考试 | 其他 |
| :------: | :------: | :------: |:------: |:------: |
| all | gwy | sydw | zyzc | other |`,
};

0 comments on commit 9e8ae47

Please sign in to comment.