64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import type { Route } from '@/types';
|
||
import got from '@/utils/got';
|
||
import { parseDate } from '@/utils/parse-date';
|
||
|
||
export const route: Route = {
|
||
path: '/interview/:jobId',
|
||
categories: ['bbs'],
|
||
example: '/nowcoder/interview/11200',
|
||
parameters: {
|
||
jobId: '岗位 ID,如 11200(全部)、11002(Java)',
|
||
},
|
||
features: {
|
||
requireConfig: false,
|
||
requirePuppeteer: false,
|
||
antiCrawler: false,
|
||
supportBT: false,
|
||
supportPodcast: false,
|
||
supportScihub: false,
|
||
},
|
||
radar: [
|
||
{
|
||
source: ['www.nowcoder.com/interview/'],
|
||
},
|
||
],
|
||
name: '牛客面试经验',
|
||
description: '牛客面试经验',
|
||
maintainers: ['xia0ne'],
|
||
handler,
|
||
url: 'nowcoder.com/',
|
||
};
|
||
async function handler(ctx) {
|
||
const jobId = ctx.req.param('jobId');
|
||
|
||
const link = `https://gw-c.nowcoder.com/api/sparta/job-experience/experience/job/list?_=${Date.now()}`;
|
||
const payload = {
|
||
jobId,
|
||
level: 3,
|
||
order: 3,
|
||
page: 1,
|
||
};
|
||
|
||
const responseBody = (await got.post(link, { json: payload })).data;
|
||
if (responseBody.code !== 0) {
|
||
throw new Error(`接口错误,错误代码:${responseBody.code},错误原因:${responseBody.msg}`);
|
||
}
|
||
|
||
const items = (responseBody.data.records ?? [])
|
||
.map((r) => r?.momentData)
|
||
.filter((m) => m?.uuid)
|
||
.map((m) => ({
|
||
title: m.title || m.content || '面经',
|
||
description: m.content ?? '',
|
||
link: `https://www.nowcoder.com/feed/main/detail/${m.uuid}`,
|
||
pubDate: parseDate(m.createdAt),
|
||
}));
|
||
|
||
return {
|
||
title: '牛客网-面试经验',
|
||
link: 'https://www.nowcoder.com/interview/',
|
||
description: '牛客网面试经验',
|
||
item: items,
|
||
};
|
||
}
|