Skip to content

Commit

Permalink
feat(route): APNIC Blog 全文 RSS (#17839)
Browse files Browse the repository at this point in the history
  • Loading branch information
p3psi-boo authored Dec 17, 2024
1 parent eb95f5b commit 0bc647c
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 0 deletions.
61 changes: 61 additions & 0 deletions lib/routes/apnic/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
import { Route } from '@/types';

import cache from '@/utils/cache';
import got from '@/utils/got';
import { load } from 'cheerio';
import { parseDate } from '@/utils/parse-date';

export const route: Route = {
path: '/blog',
categories: ['blog'],
example: '/apnic/blog',
url: 'blog.apnic.net',
name: 'Blog',
maintainers: ['p3psi-boo'],
handler,
};

async function handler() {
const baseUrl = 'https://blog.apnic.net';
const feedUrl = `${baseUrl}/feed/`;

const response = await got(feedUrl);
const $ = load(response.data, { xmlMode: true });

// 从 RSS XML 中直接提取文章信息
const list = $('item')
.toArray()
.map((item) => {
const $item = $(item);
return {
title: $item.find('title').text(),
link: $item.find('link').text(),
author: $item.find(String.raw`dc\:creator`).text(),
category:
$item
.find('category')
.text()
.match(/>([^<]+)</)?.[1] || '',
pubDate: parseDate($item.find('pubDate').text()),
};
});

const items = await Promise.all(
list.map((item) =>
cache.tryGet(item.link, async () => {
const { data: articleData } = await got(item.link);
const $article = load(articleData);

// 获取文章正文内容
item.description = $article('.entry-content').html();
return item;
})
)
);

return {
title: 'APNIC Blog',
link: baseUrl,
item: items,
};
}
8 changes: 8 additions & 0 deletions lib/routes/apnic/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: 'APNIC',
url: 'blog.apnic.net',
description: 'Asia-Pacific Network Information Centre',
lang: 'en',
};

0 comments on commit 0bc647c

Please sign in to comment.