rsshub
Version:
Make RSS Great Again!
67 lines (56 loc) • 1.89 kB
text/typescript
import { DataItem, Route } from '@/types';
import ofetch from '@/utils/ofetch';
import { load } from 'cheerio';
/**
* OpenGithub - Github开源项目精选
* colType:0 | 1 | 2 | 3
*/
enum COL_TYPE {
HANDPICK,
SPECIAL,
WEEKLY,
MONTHLY,
}
const RESULT_DESC_MAP = {
[COL_TYPE.HANDPICK]: 'OpenGithub - Github开源项目精选 - 精选文章',
[COL_TYPE.SPECIAL]: 'OpenGithub - Github开源项目精选 - 专栏',
[COL_TYPE.WEEKLY]: 'OpenGithub - Github开源项目精选 - 周刊',
[COL_TYPE.MONTHLY]: 'OpenGithub - Github开源项目精选 - 月刊',
};
export const route: Route = {
path: '/collection/:colType',
categories: ['blog'],
example: '/itc/collection/1',
radar: [
{
source: ['open.itc.cn/'],
},
],
name: '合集',
maintainers: ['cnkmmk'],
handler,
};
async function handler(ctx) {
const url = 'https://open.itc.cn';
const colType = ctx.req.param('colType');
const result = {
title: RESULT_DESC_MAP[colType] ?? 'NULL',
link: url,
description: RESULT_DESC_MAP[colType] ?? 'NULL',
item: [] as DataItem[],
};
const response = await ofetch(`${url}/github/collection/list?colType=${colType}`);
const $ = load(response);
result.item = [...$('.tab-pane > .row > .card')].map((item) => {
const date = $(item).find('.d-flex.mt-3.ms-sm-auto').text()?.split(':')?.[1];
const dataObject = date ? new Date(date) : undefined;
return {
title: $(item).find('a.btn-link').text(),
description: $(item).find('.d-sm-inline-block').text(),
link: $(item).find('a.btn-link').attr('href') || '',
pubDate: dataObject,
category: [...$(item).find('.nav.nav-stack.small li')].map((sub) => $(sub).find('.badge').text()),
};
});
return result;
}