Install
openclaw skills install rsshub-route-generator分析任意网站结构,自动生成符合 RSSHub 规范的路由 TypeScript 代码及栏目和文章选择器配置。
openclaw skills install rsshub-route-generator深度分析网站结构,生成 RSSHub 路由代码
本技能用于分析任意网站结构,并生成符合 RSSHub 规范的路由代码文件。生成的路由支持:
当用户发送以下内容时激活本技能:
页面结构探测
web_fetch 获取页面 HTML 内容ul、div.list、div.news-list、article)h1-h6、a、div.title)time、span.date、[datetime])span.category、a.tag)栏目识别
链接模式分析
/news/2024/01/xxx.html)根据分析结果生成 TypeScript 代码文件,遵循以下规范:
import { Route } from '@/types';
import got from '@/utils/got';
import { load } from 'cheerio';
import { parseDate } from '@/utils/parse-date';
export const route: Route = {
path: '/{category}',
categories: ['{category}'],
example: '/{site}/{category}',
parameters: {
category: '分类名称,默认为 all',
},
features: {
requireConfig: false,
requirePuppeteer: false,
antiCrawler: false,
supportBT: false,
supportPodcast: false,
supportScihub: false,
},
radar: [
{
source: ['{domain}/'],
target: '/{category}',
},
],
name: '{网站名称}',
maintainers: [],
handler,
url: '{domain}',
description: `{网站描述}`,
};
async function handler(ctx) {
const category = ctx.req.param('category') || 'all';
const baseUrl = '{website_url}';
// 构建请求 URL
const url = category === 'all'
? `${baseUrl}/`
: `${baseUrl}/${category}/`;
// 获取页面内容
const response = await got({ method: 'get', url });
const $ = load(response.data);
// 解析文章列表
const items = $('{list_selector}').map((_, element) => {
const $el = $(element);
return {
title: $el.find('{title_selector}').text().trim(),
link: new URL($el.find('{link_selector}').attr('href'), baseUrl).href,
pubDate: parseDate($el.find('{date_selector}').text().trim(), 'YYYY-MM-DD'),
category: $el.find('{category_selector}').text().trim(),
};
}).get();
// 获取全文内容(可选)
const fulltextItems = await Promise.all(
items.slice(0, 10).map(async (item) => {
try {
const detailResponse = await got({ method: 'get', url: item.link });
const detail$ = load(detailResponse.data);
item.description = detail$('{content_selector}').html();
return item;
} catch {
return item;
}
})
);
return {
title: '{website_title}',
link: baseUrl,
description: '{website_description}',
item: fulltextItems,
language: 'zh-cn',
};
}
生成的路由文件保存到工作目录,命名格式:
rsshub-routes/{domain}/{route-name}.tsrsshub-routes/{domain}/namespace.ts(如需)## 网站结构分析
### 基本信息
- 域名:{domain}
- 网站标题:{title}
- 语言:{language}
### 栏目结构
| 栏目名 | URL 模式 | 列表选择器 |
|--------|----------|-----------|
| 栏目1 | /news/ | div.news-list li |
| 栏目2 | /notice/ | ul.article-list li |
### 文章结构
- 标题选择器:{title_selector}
- 链接选择器:{link_selector}
- 日期选择器:{date_selector}
- 分类选择器:{category_selector}
- 内容选择器:{content_selector}
### 生成路由
```typescript
{generated_code}
### 2. 路由文件
生成完整的 `.ts` 文件,可直接复制到 RSSHub 项目使用。
## 常见选择器模式参考
### 政府网站
```javascript
// 列表项
$('ul.list li', 'div.news-list li', 'table tr')
// 标题
$('a[title]', 'h3 a', '.title a')
// 日期
$('span.date', '.time', '[datetime]')
// 内容
$('#content', '.article-content', '.main-content')
// 列表
$('.news-list li', '.article-list .item', 'div.container ul li')
// 正文
$('.article-body', '.content', '.post-content')
// 帖子列表
$('.thread-list tr', '.topic-item', '.post-list .item')
// 内容
$('.thread-content', '.post-body', '.message')
ofetch 并配置合理的缓存 keypMap 控制并发(建议 3-5)Map 或 Set 去重limit 参数,默认 20 条fulltext 参数控制是否获取全文用户输入:
为 https://example.com/news/ 生成 RSSHub 路由
技能执行: