Skip to content
Open
Show file tree
Hide file tree
Changes from 11 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 77 additions & 0 deletions lib/routes/hex2077/daily.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
import { load, type CheerioAPI } from 'cheerio';

Check failure

Code scanning / oxlint

simple-import-sort(imports) Error

Run autofix to sort these imports!
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
import type { Route, DataItem } from '@/types';
import ofetch from '@/utils/ofetch';
import { parseDate } from '@/utils/parse-date';

const BASE = 'https://hex2077.dev';

const SECTION_NAMES = [
'产品与功能更新',
'前沿研究',
'行业展望与社会影响',
'开源TOP项目',
'社媒分享',
];

function extractSection($: CheerioAPI, sectionName: string): string[] {
const ol = $(`h3[id="${sectionName}"]`).nextAll('ol').first();
if (!ol.length) {
return [];
}

return ol
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
.find('> li')
.toArray()
.map((liEl) => $(liEl as any).text().trim().replaceAll(/\s+/g, ' '))
.filter(Boolean);
}

export const route: Route = {
name: 'AI 日报',
categories: ['programming'],
path: '/daily',
example: '/hex2077/daily',
maintainers: ['fc525260'],
handler: async (ctx) => {

Check failure

Code scanning / oxlint

eslint(no-unused-vars) Error

Parameter 'ctx' is declared but never used. Unused parameters should start with a '_'.
Consider removing this parameter.
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
// Step 1: fetch listing page
const listingHtml = await ofetch<string>(BASE + '/docs/');
const $ = load(listingHtml);

const paths: string[] = $('a[href^="/docs/20"]')
.toArray()
.map((el) => $(el as any).attr('href') || '')
.filter((href) => /^\/docs\/\d{4}-\d{2}\/\d{4}-\d{2}-\d{2}\/$/.test(href))
.toSorted((a, b) => b.localeCompare(a));
const latestPath = paths[0];
if (!latestPath) {
throw new Error('未找到日报文章');
}

const dateLabel = latestPath.match(/\d{4}-\d{2}-\d{2}/)?.[0] || '';
const articleUrl = BASE + latestPath;

// Step 2: fetch article page
const detailHtml = await ofetch<string>(articleUrl);
const $d = load(detailHtml);

// Step 3: build RSS items - all sections combined
const allItems: DataItem[] = SECTION_NAMES.flatMap((sectionDisplay, si) => {

Check failure

Code scanning / oxlint

eslint(no-unused-vars) Error

Parameter 'si' is declared but never used. Unused parameters should start with a '_'.
Consider removing this parameter.
Comment thread
github-advanced-security[bot] marked this conversation as resolved.
Fixed
const sectionItems = extractSection($d, sectionDisplay);
return sectionItems.map((text, i) => ({
title: `[${sectionDisplay}] ${text}`,
description: text,
link: articleUrl,
guid: `${latestPath}${sectionDisplay}-${i}`,
pubDate: parseDate(dateLabel),
}));
});

return {
title: `hex2077 AI日报 · 全文 (${dateLabel})`,
link: BASE + '/docs/',
description: 'hex2077 每日 AI 资讯日报 - 全 5 个栏目',
language: 'zh-CN',
item: allItems,
};
},
};
9 changes: 9 additions & 0 deletions lib/routes/hex2077/namespace.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import type { Namespace } from '@/types';

export const namespace: Namespace = {
name: 'hex2077 AI 日报',
url: 'hex2077.dev/docs',
lang: 'zh-CN',
description:
'hex2077.dev 每日发布的 AI 资讯日报,涵盖产品功能、前沿研究、行业影响、开源项目等。',
};
Loading