From 9175f05b22de5a1bb33e1f16f97ad1dda3c42b02 Mon Sep 17 00:00:00 2001 From: DIYgod Date: Mon, 23 Dec 2024 18:16:29 +0800 Subject: [PATCH] feat: add obsidian plugins route --- lib/routes/obsidian/plugins.ts | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 lib/routes/obsidian/plugins.ts diff --git a/lib/routes/obsidian/plugins.ts b/lib/routes/obsidian/plugins.ts new file mode 100644 index 00000000000000..83198bfacd388c --- /dev/null +++ b/lib/routes/obsidian/plugins.ts @@ -0,0 +1,41 @@ +import { Route } from '@/types'; + +import ofetch from '@/utils/ofetch'; + +export const route: Route = { + path: '/plugins', + name: 'Obsidian Plugins', + maintainers: ['DIYgod'], + categories: ['program-update'], + example: '/obsidian/plugins', + handler, +}; + +async function handler() { + const data = JSON.parse(await ofetch('https://raw.githubusercontent.com/obsidianmd/obsidian-releases/refs/heads/master/community-plugins.json')) as { + id: string; + name: string; + author: string; + description: string; + repo: string; + }[]; + const stats = JSON.parse(await ofetch('https://raw.githubusercontent.com/obsidianmd/obsidian-releases/HEAD/community-plugin-stats.json')) as { + [key: string]: { + downloads: number; + updated: number; + }; + }; + + return { + title: 'Obsidian Plugins', + link: `https://obsidian.md/plugins`, + item: data.map((item) => ({ + title: item.name, + description: `${item.description}

Downloads: ${stats[item.id].downloads}`, + link: `https://github.com/${item.repo}`, + guid: item.id, + pubDate: new Date(stats[item.id].updated), + author: item.author, + })), + }; +}