diff --git a/lib/routes/visualstudio/code-blog.ts b/lib/routes/visualstudio/code-blog.ts new file mode 100644 index 000000000..75954badb --- /dev/null +++ b/lib/routes/visualstudio/code-blog.ts @@ -0,0 +1,67 @@ +import { Route, DataItem, Data, ViewType } from '@/types'; +import cache from '@/utils/cache'; +import ofetch from '@/utils/ofetch'; +import parser from '@/utils/rss-parser'; +import { load } from 'cheerio'; + +export const route: Route = { + path: '/code/blog', + categories: ['programming'], + example: '/visualstudio/code/blog', + url: 'code.visualstudio.com', + parameters: {}, + features: { + requireConfig: false, + requirePuppeteer: false, + antiCrawler: false, + supportBT: false, + supportPodcast: false, + supportScihub: false, + }, + radar: [ + { + source: ['code.visualstudio.com/'], + target: '/code/blog', + }, + ], + name: 'Code Blog', + maintainers: ['cscnk52'], + handler, + description: 'Provides a better reading experience (full articles) over the official ones.', + view: ViewType.Notifications, +}; + +async function handler() { + const feed = await parser.parseURL('https://code.visualstudio.com/feed.xml'); + + const items = await Promise.all( + feed.items.map((item) => + cache.tryGet(item.link as string, async () => { + const data = await ofetch(item.link as string); + const $ = load(data); + + // remove title and time + $('main h1').first().remove(); + $('main p').first().remove(); + + item.content = $('main').html() as string; + + return { + title: item.title, + link: item.link, + description: item.content, + pubDate: item.pubDate, + author: item.creator, + } as DataItem; + }) + ) + ); + + return { + title: feed.title, + link: feed.link, + description: feed.description, + item: items, + language: 'en', + } as Data; +} diff --git a/lib/routes/visualstudio/namespace.ts b/lib/routes/visualstudio/namespace.ts new file mode 100644 index 000000000..240c31c5d --- /dev/null +++ b/lib/routes/visualstudio/namespace.ts @@ -0,0 +1,7 @@ +import { Namespace } from '@/types'; + +export const namespace: Namespace = { + name: 'Visual Studio', + url: 'visualstudio.com', + lang: 'en', +};