From 4b665de4872f33a4ce3192ac710b5a1e3d58d96a Mon Sep 17 00:00:00 2001 From: Ethan Shen <42264778+nczitzk@users.noreply.github.com> Date: Wed, 15 Oct 2025 01:58:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(route):=20add=20=E7=AB=8B=E5=88=9B?= =?UTF-8?q?=E5=BC=80=E6=BA=90=E5=B9=BF=E5=9C=BA=20(#20258)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(route): add 立创开源广场 * fix description --- lib/routes/oshwhub/explore.ts | 1256 ++++++++++++++++-- lib/routes/oshwhub/templates/description.art | 208 ++- 2 files changed, 1301 insertions(+), 163 deletions(-) diff --git a/lib/routes/oshwhub/explore.ts b/lib/routes/oshwhub/explore.ts index 702e18d66..fc505089d 100644 --- a/lib/routes/oshwhub/explore.ts +++ b/lib/routes/oshwhub/explore.ts @@ -1,143 +1,1183 @@ -import { Route } from '@/types'; +import { type Data, type DataItem, type Route, ViewType } from '@/types'; -import cache from '@/utils/cache'; -import got from '@/utils/got'; -import { load } from 'cheerio'; -import path from 'node:path'; import { art } from '@/utils/render'; -import timezone from '@/utils/timezone'; +import cache from '@/utils/cache'; +import ofetch from '@/utils/ofetch'; import { parseDate } from '@/utils/parse-date'; + +import { type CheerioAPI, load } from 'cheerio'; +import { type Context } from 'hono'; import MarkdownIt from 'markdown-it'; +import path from 'node:path'; + +const originOptions = [ + { + label: '全部版本', + value: 'all', + }, + { + label: '专业版', + value: 'pro', + }, + { + label: '标准版', + value: 'std', + }, +]; + +const flattenTree = (items: any[]): any[] => items.flatMap((item) => [item, ...flattenTree(item.children || [])]); + +const findUuidsByNames = (data: any[], names: string[]): string[] => { + const allItems = flattenTree(data); + return names.flatMap((name) => allItems.filter((item) => item.name === name || item.uuid === name).map((item) => item.uuid)).filter(Boolean); +}; + +const findNamesByUuids = (data: any[], uuids: string[]): string[] => { + const allItems = flattenTree(data); + return uuids.flatMap((uuid) => allItems.filter((item) => item.uuid === uuid || item.name === uuid).map((item) => item.name)).filter(Boolean); +}; + +const escapeHTML = (input) => { + if (input === undefined) { + return ''; + } + const str = String(input); + const escapeMap = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + }; + return str.replaceAll(/[&<>"']/g, (char) => escapeMap[char] || char); +}; + +const formatObject = (obj) => { + if (typeof obj !== 'object' || obj === null) { + return escapeHTML(obj); + } + + let result = ''; + for (const key in obj) { + if (obj[key] !== null && obj[key] !== '') { + result += `
${escapeHTML(key)}: ${escapeHTML(obj[key])}
`; + } + } + + return result || '无数据'; +}; + const md = MarkdownIt({ html: true, linkify: true, }); -const requestImages = (url, tryGet) => - tryGet(url, async () => { - const response = await got({ - method: 'get', - url, +art.defaults.imports.escapeHTML = escapeHTML; +art.defaults.imports.formatObject = formatObject; + +export const handler = async (ctx: Context): Promise => { + const { type = 'new', origin = 'all', projectTag } = ctx.req.param(); + const limit: number = Number.parseInt(ctx.req.query('limit') ?? '15', 10); + + const baseUrl: string = 'https://oshwhub.com'; + const apiUrl: string = new URL('api/project', baseUrl).href; + const apiTagUrl: string = new URL('api/project_tags', baseUrl).href; + const targetUrl: string = new URL('explore', baseUrl).href; + + const targetResponse = await ofetch(targetUrl); + const $: CheerioAPI = load(targetResponse); + const language = $('html').attr('lang') ?? 'zh'; + + const tagResponse = await ofetch(apiTagUrl); + const projectTagsData = tagResponse.result; + + const response = await ofetch(apiUrl, { + query: { + page: 1, + pageSize: limit, + type, + origin, + projectTag: findUuidsByNames(projectTagsData, projectTag?.split(/,/) ?? []), + public: true, + }, + }); + + let items: DataItem[] = []; + + items = response.result.lists.slice(0, limit).map((item): DataItem => { + const title: string = item.name; + const image: string | undefined = item.thumb?.startsWith('https:') ? item.thumb : `https:${item.thumb}`; + const description: string | undefined = art(path.join(__dirname, 'templates/description.art'), { + images: image + ? [ + { + src: image, + alt: title, + }, + ] + : undefined, + intro: item.introduction, }); + const pubDate: number | string = item.created_at; + const linkUrl: string | undefined = item.path; + const categories: string[] = [originOptions.find((opt) => opt.value === item.origin)?.label ?? undefined].filter(Boolean) as string[]; + const authors: DataItem['author'] = item.owner + ? [ + { + name: item.owner.name, + url: new URL(item.owner.username, baseUrl).href, + avatar: item.owner.avatar ? `https:${item.owner.avatar}` : undefined, + }, + ] + : undefined; + const guid: string = item.uuid ? `oshwhub-${item.uuid}` : ''; + const updated: number | string = item.updated_at ?? pubDate; - const images = {}; - const boms = []; + const processedItem: DataItem = { + title, + description, + pubDate: pubDate ? parseDate(pubDate) : undefined, + link: linkUrl ? new URL(item.link, baseUrl).href : undefined, + categories, + author: authors, + guid, + id: guid, + content: { + html: description, + text: description, + }, + image, + banner: image, + updated: updated ? parseDate(updated) : undefined, + language, + uuid: item.uuid, + }; - const imgData = response.data; + return processedItem; + }); - if (imgData?.result?.boards) { - for (const board of imgData.result.boards) { - const name = board.name; - if (images[name] === undefined) { - images[name] = []; - } - - if (board.schematic?.documents) { - for (const val of board.schematic.documents) { - if (val.thumb) { - images[name].push(val.thumb); - } - } - } - - if (board.pcb_info?.thumb) { - images[name].push(board.pcb_info.thumb); - } - if (board.pcb_info?.boms?.boms) { - boms.push(...JSON.parse(board.pcb_info.boms.boms)); - } + items = await Promise.all( + items.map((item) => { + if (!item.link || !item.guid) { + return item; } - } - return { images, boms }; - }); -export const route: Route = { - path: '/:sortType?', - categories: ['other'], - example: '/oshwhub', - parameters: { sortType: 'sortType' }, - features: { - requireConfig: false, - requirePuppeteer: false, - antiCrawler: false, - supportBT: false, - supportPodcast: false, - supportScihub: false, - }, - name: 'OpenSource Square', - maintainers: ['tylinux'], - handler, -}; + return cache.tryGet(item.link, async (): Promise => { + const projectId = item.guid.replace(/^oshwhub-/, ''); + const detailUrl = new URL(`api/project/${projectId}`, baseUrl).href; + const detailResponse = await ofetch(detailUrl); -async function handler(ctx) { - const baseUrl = 'https://oshwhub.com'; - const sortType = ctx.req.param('sortType') ?? 'updatedTime'; + const result = detailResponse.result; + const title: string = result.name; + const pubDateStr: string | undefined = result.oshwhub_publish_at; + const linkUrl: string | undefined = result.path; - const url = `${baseUrl}/explore?projectSort=${sortType}`; - const response = await got({ - method: 'get', - url, - }); + const origin: string | undefined = originOptions.find((opt) => opt.value === result.origin)?.label ?? undefined; + const tags: string[] = findNamesByUuids(projectTagsData, result.project_tags ?? []); - const html = response.data; - const $ = load(html); - const title = $('title').text(); - const projects = $('a[class="project-link"]'); + const categories: string[] = [...new Set([...(item.category ?? []), origin ?? undefined, ...tags, result.license].filter(Boolean) as string[])]; + const authors: DataItem['author'] = [ + ...new Map( + [result.owner, result.creator, ...result.members].map((author) => { + const item = { + name: author.nickname, + url: new URL(author.username, baseUrl).href, + avatar: author.avatar ? `https:${author.avatar}` : undefined, + }; + return [`${item.name}|${item.url}`, item]; + }) + ).values(), + ]; + const guid: string = result.uuid ? `oshwhub-${result.uuid}` : item.guid || ''; + const image: string | undefined = result.thumb?.startsWith('https:') ? result.thumb : `https:${result.thumb}`; + const upDatedStr: string | undefined = result.updated_at || pubDateStr; - const items = await Promise.all( - projects.map((id, item) => { - const detailUrl = `${baseUrl}${item.attribs.href}`; - return cache.tryGet(detailUrl, async () => { - const response = await got({ - method: 'get', - url: detailUrl, - }); + const attachments = result.attachments; - const html = response.data; - const $$ = load(html); - const projectDetail = $$('div[class="projects-left-top"]'); - - const title = $$(projectDetail).find('span[class="title"]').text(); - const author = $$(projectDetail).find('div[class="member-items"] > ul > li > a > span').first().text().trim(); - const publishTime = $$(projectDetail).find('div[class="establish-time"] > span').text(); - const pubDate = timezone(parseDate(publishTime.trim().split('\n')[1].trim(), 'YYYY/MM/DD HH:mm:ss'), 0); - - const coverImg = $$(projectDetail).find('div[class="img-cover"] > img').attr('src')?.trim(); - const introduction = $$(projectDetail).find('p[class="introduction"]').text().trim(); - const content = $$(projectDetail).find('div[class*="html-content"]').attr('data-markdown'); - - // request images - const dataUuid = $$('div[class="projects-detail"]').attr()['data-uuid']; - const { images, boms } = await requestImages(`${baseUrl}/api/project/${dataUuid}/pro_images`, cache.tryGet); - - const description = art(path.join(__dirname, 'templates/description.art'), { + const description: string | undefined = art(path.join(__dirname, 'templates/description.art'), { + images: image + ? [ + { + src: image, + alt: title, + }, + ] + : undefined, title, - author, - publishTime, - coverImg, - introduction, - content: md.render(content) || 'No Content', - images, - boms, + origin, + tags, + license: result.license, + intro: result.introduction, + pubDate: pubDateStr, + upDated: upDatedStr, + description: result.content ? md.render(result.content) : undefined, + documents: result.version_documents, + boms: result.boms ? JSON.parse(result.boms) : undefined, + attachments, }); - const single = { + let processedItem: DataItem = { title, description, - pubDate, - link: detailUrl, - author, + pubDate: pubDateStr ? parseDate(pubDateStr) : item.pubDate, + link: linkUrl ? new URL(linkUrl, baseUrl).href : item.link, + category: categories, + author: authors, + guid, + id: guid, + content: { + html: description, + text: description, + }, + image, + banner: image, + updated: upDatedStr ? parseDate(upDatedStr) : item.updated, + language, }; - return single; + const attachment = attachments?.[0]; + + if (attachment && attachment.src) { + const enclosureUrl: string | undefined = `https://image.lceda.cn${attachment.src}`; + const enclosureType: string = attachment.mime; + const enclosureTitle: string = attachment.name; + const enclosureLength: number = Number(attachment.size); + + processedItem = { + ...processedItem, + enclosure_url: enclosureUrl, + enclosure_type: enclosureType, + enclosure_title: enclosureTitle || title, + enclosure_length: enclosureLength, + }; + } + + return { + ...item, + ...processedItem, + }; }); }) ); + const title: string = $('title').text(); + return { title, - link: url, - description: title, + description: $('meta[name="description"]').attr('content'), + link: targetUrl, item: items, + allowEmpty: true, + image: $('meta[property="og:image"]').attr('content'), + author: title.split(/-/).pop()?.trim(), + language, + id: targetUrl, }; -} +}; + +export const route: Route = { + path: '/explore/:type?/:origin?/:projectTag{.+}?', + name: '开源广场', + url: 'oshwhub.com', + maintainers: ['tylinux', 'nczitzk'], + handler, + example: '/oshwhub/explore', + parameters: { + type: { + description: '排序方式,默认为 `new`,即最新发布', + options: [ + { + label: '综合排序', + value: 'default', + }, + { + label: '最多点赞', + value: 'like', + }, + { + label: '最新收藏', + value: 'collect', + }, + { + label: '最新发布', + value: 'new', + }, + ], + }, + origin: { + description: '工程版本,默认为 `all`,即全部版本', + options: originOptions, + }, + projectTag: { + description: '项目标签,默认为空,即全部', + options: [ + { + label: '嵌入式 - 51单片机', + value: '3b0f18b7516447f4b98a3830b1f3b665', + }, + { + label: '嵌入式 - STM单片机', + value: 'ccf89e646cd446a3b83b2f52b0199b62', + }, + { + label: '嵌入式 - AVR单片机', + value: '3f6426c635ff442291209a3384a84102', + }, + { + label: '嵌入式 - MM单片机', + value: 'cc3d1169f18c416c8757901ea6df6223', + }, + { + label: '嵌入式 - HK单片机', + value: 'b97db05d4ca84ec586b573ac8a30f903', + }, + { + label: '嵌入式 - GD单片机', + value: 'b20331637f5145acacdcba7b4b425f86', + }, + { + label: '嵌入式 - Arduino', + value: '656035358f114d88a6d7ae9f2f008004', + }, + { + label: '嵌入式 - Linux', + value: 'a970fe2004094a908bccfcd3a19d8119', + }, + { + label: '嵌入式 - RA单片机', + value: '10f420434b2e499a9d55a053a1b68532', + }, + { + label: '嵌入式 - FPGA', + value: 'b9dc4e4d3185457fb0b036697c60c304', + }, + { + label: '嵌入式 - 创客教育套件', + value: '7a7e2ffe306f45d49aceeccf643164f1', + }, + { + label: '嵌入式 - DSP', + value: '7afd043f0472485f8a0bdd03b7f2b430', + }, + { + label: '嵌入式 - ESP8266/32', + value: '6f6eefa0fcb54ab4b75469c64646d9e9', + }, + { + label: '嵌入式 - Hi3861', + value: '08da4fffef66412c98862b56bc6de8e0', + }, + { + label: '嵌入式 - CH单片机', + value: '46713082ee6e4e5d83ab50b2dde261f9', + }, + { + label: '嵌入式 - CW32单片机', + value: '68b1cd8ff95c4a77ada1feac74a15cd7', + }, + { + label: '嵌入式 - N32单片机', + value: 'a8174b755bb840c284354adda36bea97', + }, + { + label: '嵌入式 - 全志系列', + value: '02c3807273ea47c4aaa6708b897a1608', + }, + { + label: '嵌入式 - AIR32', + value: '91c29b363a024e73afe4fb2adc3d6336', + }, + { + label: '嵌入式 - 树莓派', + value: '68fb2b4eacf244b6b99e208bd0c0453c', + }, + { + label: '嵌入式 - RISC-V', + value: '5bf7f884bccf4507acc36a729d8b5078', + }, + { + label: '嵌入式 - 玄铁', + value: 'e0a360d42a954a29bb6a3e5eee0395fd', + }, + { + label: '嵌入式 - Canaan(嘉楠)', + value: '3dec6606d3ca4b898eb86a78fd4c40ea', + }, + { + label: 'DIY设计/硬件设计 - 立创泰山派', + value: '26b12f4862cc4aa8a7a6ff653d9de9ed', + }, + { + label: 'DIY设计/硬件设计 - 立创梁山派', + value: '51f92f98f8c3465ebc12e014b654a15c', + }, + { + label: 'DIY设计/硬件设计 - 仿真器/编程器', + value: '1b87c2546ea3444e9817a1faf8f76ff2', + }, + { + label: 'DIY设计/硬件设计 - 电赛TI开发板', + value: 'd4b25b821c8d4f7cb1bd871853400521', + }, + { + label: 'DIY设计/硬件设计 - 电源/能源', + value: 'e804983891e743439072af4e05aba50d', + }, + { + label: 'DIY设计/硬件设计 - 信号/通信', + value: 'b13a722e49ae40f4ae15c7448c0e807b', + }, + { + label: 'DIY设计/硬件设计 - 测量/仪器', + value: 'b1fb4acdb7354d81b3ed3c18050d0580', + }, + { + label: 'DIY设计/硬件设计 - 课设/毕设', + value: '7711ced2a349485d85a6cae11c91cc5d', + }, + { + label: 'DIY设计/硬件设计 - DIY设计', + value: 'd3cacd30fc1a4dbea35aba2f00c755e3', + }, + { + label: 'DIY设计/硬件设计 - 声光设计', + value: 'fbca6abc8a114614a5598bf7c33fb72e', + }, + { + label: 'DIY设计/硬件设计 - 555定时器', + value: 'e53cdda17f4840158e9f9a82354f923d', + }, + { + label: 'DIY设计/硬件设计 - 方案验证板', + value: '90637fd096424071a21927e5cdc436de', + }, + { + label: 'DIY设计/硬件设计 - 面板设计', + value: '8e9b3ad4569943b19f701cf06d3be169', + }, + { + label: '物联网/智能硬件 - 蓝牙/蓝牙mesh', + value: '252438513ded4c87b8bac438d006a0b8', + }, + { + label: '物联网/智能硬件 - WiFi/以太网', + value: 'f2beb30a80134f3e9595b51148f55cf8', + }, + { + label: '物联网/智能硬件 - 射频/2.4G', + value: '72cccbeca286458a9fb31fbbff8cd57f', + }, + { + label: '物联网/智能硬件 - GSM/GPRS', + value: 'e2f58f5ada1b46aaa30899996e1bffee', + }, + { + label: '物联网/智能硬件 - 无线定位', + value: '3c3111e1320c48dd8e60e46201140402', + }, + { + label: '物联网/智能硬件 - 4G/5G技术', + value: '3e9823af89424add8e16c8d86dbe6365', + }, + { + label: '物联网/智能硬件 - 智能家居', + value: 'f1f6fe3058c4476486baa2d51469c116', + }, + { + label: '电子模块 - 电源模块', + value: '2613794836ff4fa2954e4cca5749584a', + }, + { + label: '电子模块 - 显示模块', + value: '00aa2be7c4d44b5ea060419ca57a94e0', + }, + { + label: '电子模块 - 通信模块', + value: 'a99c667254ab41f788ffbcb3e78e152b', + }, + { + label: '电子模块 - 传感器模块', + value: 'b643637f21ea4464aeb312f29ca0131e', + }, + { + label: '电子模块 - 电机驱动模块', + value: '7676fdaf039847e3808481a4437e004b', + }, + { + label: '电子模块 - 其他模块', + value: '22a10af7cd434f1d8c28588b030963c5', + }, + { + label: '电子应用 - 汽车电子', + value: 'cc45e77e32764600a9edd9c6bec9a932', + }, + { + label: '电子应用 - 消费电子', + value: 'e5831c441f25423d88a7311a9b276871', + }, + { + label: '电子应用 - 工业电子', + value: 'ba95313da8b24bbfbcf00182447f6063', + }, + { + label: '电子应用 - 家用电子', + value: '7bee905a7730453c803339f2a1dc77cf', + }, + { + label: '电子应用 - 医疗电子', + value: 'b3e25776aa9d438980f140b7577b1af7', + }, + { + label: '电子应用 - 工业4.0', + value: '2d6d5c8697cc4061a66e6fb06e30f587', + }, + { + label: '电子应用 - 开源复刻', + value: '935421b496b44f178a554fbdaa568e0a', + }, + { + label: '电子应用 - 电子竞赛', + value: '08a877289c3f4f34b2ca8905996e07ed', + }, + { + label: '电子应用 - AI视觉', + value: 'e2d486a270aa46f790318c714cc77d02', + }, + { + label: '电工电子 - 电路分析', + value: '827cd3b7542646d682f9588973647e96', + }, + { + label: '电工电子 - 电力电子', + value: 'a08b61928be54154bb1a346f7630e4ba', + }, + { + label: '电工电子 - 模拟电路', + value: '858b54c552714ef586fd28705d79e1ec', + }, + { + label: '电工电子 - 数字电路', + value: '027f0293ca4e4c0e982c3b11f13b64b6', + }, + { + label: '电工电子 - 高频电路', + value: '8938b321c55a41b092da9443fcfba334', + }, + { + label: '电工电子 - 仿真电路', + value: 'b29c5f43ff8c4f39930174732044842c', + }, + { + label: '电子竞赛/活动 - 星火计划2025', + value: '9d75d82c34d74d8eb385281a6ebc7fe9', + }, + { + label: '电子竞赛/活动 - 彩色丝印', + value: '4776bafa72df43879ea082ae1345d5bb', + }, + { + label: '电子竞赛/活动 - 立创大赛', + value: 'f7eefe9c39ff49dabbea446863af30e3', + }, + { + label: '电子竞赛/活动 - 互联网+', + value: '10d9b29096d347629eea7fe3a78eb290', + }, + { + label: '电子竞赛/活动 - 创新杯/创青春', + value: 'e6920b7defbf47f78e811379ab06b3a2', + }, + { + label: '电子竞赛/活动 - FPGA大赛', + value: '3348af772eb54f769e345c1c6312c3a9', + }, + { + label: '电子竞赛/活动 - 其他比赛', + value: '06ed1c7532594f59916f7ce037a6f3ff', + }, + { + label: '电子竞赛/活动 - 星火计划2024', + value: '5f4e56750b0445a7a024b01cc8fa7122', + }, + { + label: '电子竞赛/活动 - 星火计划2023', + value: '15637284a6f545128f80a11443cdf1a0', + }, + { + label: '电子设计大赛 - 校内选拔赛', + value: 'b9b469bc5f9f43fbbca7ea1b42ad261f', + }, + { + label: '电子设计大赛 - 省赛/区赛', + value: '9ba4444f3c4e4c0ca6de5c5473cde4a8', + }, + { + label: '电子设计大赛 - 2013年电赛', + value: '9b0656c41291403db63ecdd67d8caf07', + }, + { + label: '电子设计大赛 - 2015年电赛', + value: 'fe146745542a4dde99883058b5325863', + }, + { + label: '电子设计大赛 - 2019年电赛', + value: 'b3894c65a5ca47f19bab8867da884f04', + }, + { + label: '电子设计大赛 - 2021年电赛', + value: '6ccb9fbbd3294c6ba93570c8d35e5310', + }, + { + label: '电子设计大赛 - 2023年电赛', + value: 'b1e24499fcdb47c7896baf96b0e40aaa', + }, + ], + }, + }, + description: `:::tip +订阅 [开源广场](https://oshwhub.com/) 中最新发布的项目标签含 “51单片机”和“智能家居”的标准版项目,此时路由为 [\`/oshwhub/explore/new/std/51单片机,智能家居\`](https://rsshub.app/oshwhub/explore/new/std/51单片机,智能家居)。 +::: + +
+ 更多标签 + + #### [嵌入式](https://oshwhub.com/explore?tag=049aa3a2401d45af82141d8cda443355) + + | 名称 | ID | + | -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | + | [51单片机](https://oshwhub.com/explore?tag=3b0f18b7516447f4b98a3830b1f3b665) | [3b0f18b7516447f4b98a3830b1f3b665](https://rsshub.app/oshwhub/explore/new/all/3b0f18b7516447f4b98a3830b1f3b665) | + | [STM单片机](https://oshwhub.com/explore?tag=ccf89e646cd446a3b83b2f52b0199b62) | [ccf89e646cd446a3b83b2f52b0199b62](https://rsshub.app/oshwhub/explore/new/all/ccf89e646cd446a3b83b2f52b0199b62) | + | [AVR单片机](https://oshwhub.com/explore?tag=3f6426c635ff442291209a3384a84102) | [3f6426c635ff442291209a3384a84102](https://rsshub.app/oshwhub/explore/new/all/3f6426c635ff442291209a3384a84102) | + | [MM单片机](https://oshwhub.com/explore?tag=cc3d1169f18c416c8757901ea6df6223) | [cc3d1169f18c416c8757901ea6df6223](https://rsshub.app/oshwhub/explore/new/all/cc3d1169f18c416c8757901ea6df6223) | + | [HK单片机](https://oshwhub.com/explore?tag=b97db05d4ca84ec586b573ac8a30f903) | [b97db05d4ca84ec586b573ac8a30f903](https://rsshub.app/oshwhub/explore/new/all/b97db05d4ca84ec586b573ac8a30f903) | + | [GD单片机](https://oshwhub.com/explore?tag=b20331637f5145acacdcba7b4b425f86) | [b20331637f5145acacdcba7b4b425f86](https://rsshub.app/oshwhub/explore/new/all/b20331637f5145acacdcba7b4b425f86) | + | [Arduino](https://oshwhub.com/explore?tag=656035358f114d88a6d7ae9f2f008004) | [656035358f114d88a6d7ae9f2f008004](https://rsshub.app/oshwhub/explore/new/all/656035358f114d88a6d7ae9f2f008004) | + | [Linux](https://oshwhub.com/explore?tag=a970fe2004094a908bccfcd3a19d8119) | [a970fe2004094a908bccfcd3a19d8119](https://rsshub.app/oshwhub/explore/new/all/a970fe2004094a908bccfcd3a19d8119) | + | [RA单片机](https://oshwhub.com/explore?tag=10f420434b2e499a9d55a053a1b68532) | [10f420434b2e499a9d55a053a1b68532](https://rsshub.app/oshwhub/explore/new/all/10f420434b2e499a9d55a053a1b68532) | + | [FPGA](https://oshwhub.com/explore?tag=b9dc4e4d3185457fb0b036697c60c304) | [b9dc4e4d3185457fb0b036697c60c304](https://rsshub.app/oshwhub/explore/new/all/b9dc4e4d3185457fb0b036697c60c304) | + | [创客教育套件](https://oshwhub.com/explore?tag=7a7e2ffe306f45d49aceeccf643164f1) | [7a7e2ffe306f45d49aceeccf643164f1](https://rsshub.app/oshwhub/explore/new/all/7a7e2ffe306f45d49aceeccf643164f1) | + | [DSP](https://oshwhub.com/explore?tag=7afd043f0472485f8a0bdd03b7f2b430) | [7afd043f0472485f8a0bdd03b7f2b430](https://rsshub.app/oshwhub/explore/new/all/7afd043f0472485f8a0bdd03b7f2b430) | + | [ESP8266/32](https://oshwhub.com/explore?tag=6f6eefa0fcb54ab4b75469c64646d9e9) | [6f6eefa0fcb54ab4b75469c64646d9e9](https://rsshub.app/oshwhub/explore/new/all/6f6eefa0fcb54ab4b75469c64646d9e9) | + | [Hi3861](https://oshwhub.com/explore?tag=08da4fffef66412c98862b56bc6de8e0) | [08da4fffef66412c98862b56bc6de8e0](https://rsshub.app/oshwhub/explore/new/all/08da4fffef66412c98862b56bc6de8e0) | + | [CH单片机](https://oshwhub.com/explore?tag=46713082ee6e4e5d83ab50b2dde261f9) | [46713082ee6e4e5d83ab50b2dde261f9](https://rsshub.app/oshwhub/explore/new/all/46713082ee6e4e5d83ab50b2dde261f9) | + | [CW32单片机](https://oshwhub.com/explore?tag=68b1cd8ff95c4a77ada1feac74a15cd7) | [68b1cd8ff95c4a77ada1feac74a15cd7](https://rsshub.app/oshwhub/explore/new/all/68b1cd8ff95c4a77ada1feac74a15cd7) | + | [N32单片机](https://oshwhub.com/explore?tag=a8174b755bb840c284354adda36bea97) | [a8174b755bb840c284354adda36bea97](https://rsshub.app/oshwhub/explore/new/all/a8174b755bb840c284354adda36bea97) | + | [全志系列](https://oshwhub.com/explore?tag=02c3807273ea47c4aaa6708b897a1608) | [02c3807273ea47c4aaa6708b897a1608](https://rsshub.app/oshwhub/explore/new/all/02c3807273ea47c4aaa6708b897a1608) | + | [AIR32](https://oshwhub.com/explore?tag=91c29b363a024e73afe4fb2adc3d6336) | [91c29b363a024e73afe4fb2adc3d6336](https://rsshub.app/oshwhub/explore/new/all/91c29b363a024e73afe4fb2adc3d6336) | + | [树莓派](https://oshwhub.com/explore?tag=68fb2b4eacf244b6b99e208bd0c0453c) | [68fb2b4eacf244b6b99e208bd0c0453c](https://rsshub.app/oshwhub/explore/new/all/68fb2b4eacf244b6b99e208bd0c0453c) | + | [RISC-V](https://oshwhub.com/explore?tag=5bf7f884bccf4507acc36a729d8b5078) | [5bf7f884bccf4507acc36a729d8b5078](https://rsshub.app/oshwhub/explore/new/all/5bf7f884bccf4507acc36a729d8b5078) | + | [玄铁](https://oshwhub.com/explore?tag=e0a360d42a954a29bb6a3e5eee0395fd) | [e0a360d42a954a29bb6a3e5eee0395fd](https://rsshub.app/oshwhub/explore/new/all/e0a360d42a954a29bb6a3e5eee0395fd) | + | [Canaan(嘉楠)](https://oshwhub.com/explore?tag=3dec6606d3ca4b898eb86a78fd4c40ea) | [3dec6606d3ca4b898eb86a78fd4c40ea](https://rsshub.app/oshwhub/explore/new/all/3dec6606d3ca4b898eb86a78fd4c40ea) | + + #### [DIY设计/硬件设计](https://oshwhub.com/explore?tag=b40d10b303384f2c8fc10764dea14413) + + | 名称 | ID | + | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | + | [立创泰山派](https://oshwhub.com/explore?tag=26b12f4862cc4aa8a7a6ff653d9de9ed) | [26b12f4862cc4aa8a7a6ff653d9de9ed](https://rsshub.app/oshwhub/explore/new/all/26b12f4862cc4aa8a7a6ff653d9de9ed) | + | [立创梁山派](https://oshwhub.com/explore?tag=51f92f98f8c3465ebc12e014b654a15c) | [51f92f98f8c3465ebc12e014b654a15c](https://rsshub.app/oshwhub/explore/new/all/51f92f98f8c3465ebc12e014b654a15c) | + | [仿真器/编程器](https://oshwhub.com/explore?tag=1b87c2546ea3444e9817a1faf8f76ff2) | [1b87c2546ea3444e9817a1faf8f76ff2](https://rsshub.app/oshwhub/explore/new/all/1b87c2546ea3444e9817a1faf8f76ff2) | + | [电赛TI开发板](https://oshwhub.com/explore?tag=d4b25b821c8d4f7cb1bd871853400521) | [d4b25b821c8d4f7cb1bd871853400521](https://rsshub.app/oshwhub/explore/new/all/d4b25b821c8d4f7cb1bd871853400521) | + | [电源/能源](https://oshwhub.com/explore?tag=e804983891e743439072af4e05aba50d) | [e804983891e743439072af4e05aba50d](https://rsshub.app/oshwhub/explore/new/all/e804983891e743439072af4e05aba50d) | + | [信号/通信](https://oshwhub.com/explore?tag=b13a722e49ae40f4ae15c7448c0e807b) | [b13a722e49ae40f4ae15c7448c0e807b](https://rsshub.app/oshwhub/explore/new/all/b13a722e49ae40f4ae15c7448c0e807b) | + | [测量/仪器](https://oshwhub.com/explore?tag=b1fb4acdb7354d81b3ed3c18050d0580) | [b1fb4acdb7354d81b3ed3c18050d0580](https://rsshub.app/oshwhub/explore/new/all/b1fb4acdb7354d81b3ed3c18050d0580) | + | [课设/毕设](https://oshwhub.com/explore?tag=7711ced2a349485d85a6cae11c91cc5d) | [7711ced2a349485d85a6cae11c91cc5d](https://rsshub.app/oshwhub/explore/new/all/7711ced2a349485d85a6cae11c91cc5d) | + | [DIY设计](https://oshwhub.com/explore?tag=d3cacd30fc1a4dbea35aba2f00c755e3) | [d3cacd30fc1a4dbea35aba2f00c755e3](https://rsshub.app/oshwhub/explore/new/all/d3cacd30fc1a4dbea35aba2f00c755e3) | + | [声光设计](https://oshwhub.com/explore?tag=fbca6abc8a114614a5598bf7c33fb72e) | [fbca6abc8a114614a5598bf7c33fb72e](https://rsshub.app/oshwhub/explore/new/all/fbca6abc8a114614a5598bf7c33fb72e) | + | [555定时器](https://oshwhub.com/explore?tag=e53cdda17f4840158e9f9a82354f923d) | [e53cdda17f4840158e9f9a82354f923d](https://rsshub.app/oshwhub/explore/new/all/e53cdda17f4840158e9f9a82354f923d) | + | [方案验证板](https://oshwhub.com/explore?tag=90637fd096424071a21927e5cdc436de) | [90637fd096424071a21927e5cdc436de](https://rsshub.app/oshwhub/explore/new/all/90637fd096424071a21927e5cdc436de) | + | [面板设计](https://oshwhub.com/explore?tag=8e9b3ad4569943b19f701cf06d3be169) | [8e9b3ad4569943b19f701cf06d3be169](https://rsshub.app/oshwhub/explore/new/all/8e9b3ad4569943b19f701cf06d3be169) | + + #### [物联网/智能硬件](https://oshwhub.com/explore?tag=a40182a4166848b0bfa2339022de3f32) + + | 名称 | ID | + | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | + | [蓝牙/蓝牙mesh](https://oshwhub.com/explore?tag=252438513ded4c87b8bac438d006a0b8) | [252438513ded4c87b8bac438d006a0b8](https://rsshub.app/oshwhub/explore/new/all/252438513ded4c87b8bac438d006a0b8) | + | [WiFi/以太网](https://oshwhub.com/explore?tag=f2beb30a80134f3e9595b51148f55cf8) | [f2beb30a80134f3e9595b51148f55cf8](https://rsshub.app/oshwhub/explore/new/all/f2beb30a80134f3e9595b51148f55cf8) | + | [射频/2.4G](https://oshwhub.com/explore?tag=72cccbeca286458a9fb31fbbff8cd57f) | [72cccbeca286458a9fb31fbbff8cd57f](https://rsshub.app/oshwhub/explore/new/all/72cccbeca286458a9fb31fbbff8cd57f) | + | [GSM/GPRS](https://oshwhub.com/explore?tag=e2f58f5ada1b46aaa30899996e1bffee) | [e2f58f5ada1b46aaa30899996e1bffee](https://rsshub.app/oshwhub/explore/new/all/e2f58f5ada1b46aaa30899996e1bffee) | + | [无线定位](https://oshwhub.com/explore?tag=3c3111e1320c48dd8e60e46201140402) | [3c3111e1320c48dd8e60e46201140402](https://rsshub.app/oshwhub/explore/new/all/3c3111e1320c48dd8e60e46201140402) | + | [4G/5G技术](https://oshwhub.com/explore?tag=3e9823af89424add8e16c8d86dbe6365) | [3e9823af89424add8e16c8d86dbe6365](https://rsshub.app/oshwhub/explore/new/all/3e9823af89424add8e16c8d86dbe6365) | + | [智能家居](https://oshwhub.com/explore?tag=f1f6fe3058c4476486baa2d51469c116) | [f1f6fe3058c4476486baa2d51469c116](https://rsshub.app/oshwhub/explore/new/all/f1f6fe3058c4476486baa2d51469c116) | + + #### [电子模块](https://oshwhub.com/explore?tag=8fba85199b604bb98cda470603f98299) + + | 名称 | ID | + | -------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | + | [电源模块](https://oshwhub.com/explore?tag=2613794836ff4fa2954e4cca5749584a) | [2613794836ff4fa2954e4cca5749584a](https://rsshub.app/oshwhub/explore/new/all/2613794836ff4fa2954e4cca5749584a) | + | [显示模块](https://oshwhub.com/explore?tag=00aa2be7c4d44b5ea060419ca57a94e0) | [00aa2be7c4d44b5ea060419ca57a94e0](https://rsshub.app/oshwhub/explore/new/all/00aa2be7c4d44b5ea060419ca57a94e0) | + | [通信模块](https://oshwhub.com/explore?tag=a99c667254ab41f788ffbcb3e78e152b) | [a99c667254ab41f788ffbcb3e78e152b](https://rsshub.app/oshwhub/explore/new/all/a99c667254ab41f788ffbcb3e78e152b) | + | [传感器模块](https://oshwhub.com/explore?tag=b643637f21ea4464aeb312f29ca0131e) | [b643637f21ea4464aeb312f29ca0131e](https://rsshub.app/oshwhub/explore/new/all/b643637f21ea4464aeb312f29ca0131e) | + | [电机驱动模块](https://oshwhub.com/explore?tag=7676fdaf039847e3808481a4437e004b) | [7676fdaf039847e3808481a4437e004b](https://rsshub.app/oshwhub/explore/new/all/7676fdaf039847e3808481a4437e004b) | + | [其他模块](https://oshwhub.com/explore?tag=22a10af7cd434f1d8c28588b030963c5) | [22a10af7cd434f1d8c28588b030963c5](https://rsshub.app/oshwhub/explore/new/all/22a10af7cd434f1d8c28588b030963c5) | + + #### [电子应用](https://oshwhub.com/explore?tag=9759ce685d0f4fb9b5c48c2f99d1b528) + + | 名称 | ID | + | ---------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | + | [汽车电子](https://oshwhub.com/explore?tag=cc45e77e32764600a9edd9c6bec9a932) | [cc45e77e32764600a9edd9c6bec9a932](https://rsshub.app/oshwhub/explore/new/all/cc45e77e32764600a9edd9c6bec9a932) | + | [消费电子](https://oshwhub.com/explore?tag=e5831c441f25423d88a7311a9b276871) | [e5831c441f25423d88a7311a9b276871](https://rsshub.app/oshwhub/explore/new/all/e5831c441f25423d88a7311a9b276871) | + | [工业电子](https://oshwhub.com/explore?tag=ba95313da8b24bbfbcf00182447f6063) | [ba95313da8b24bbfbcf00182447f6063](https://rsshub.app/oshwhub/explore/new/all/ba95313da8b24bbfbcf00182447f6063) | + | [家用电子](https://oshwhub.com/explore?tag=7bee905a7730453c803339f2a1dc77cf) | [7bee905a7730453c803339f2a1dc77cf](https://rsshub.app/oshwhub/explore/new/all/7bee905a7730453c803339f2a1dc77cf) | + | [医疗电子](https://oshwhub.com/explore?tag=b3e25776aa9d438980f140b7577b1af7) | [b3e25776aa9d438980f140b7577b1af7](https://rsshub.app/oshwhub/explore/new/all/b3e25776aa9d438980f140b7577b1af7) | + | [工业4.0](https://oshwhub.com/explore?tag=2d6d5c8697cc4061a66e6fb06e30f587) | [2d6d5c8697cc4061a66e6fb06e30f587](https://rsshub.app/oshwhub/explore/new/all/2d6d5c8697cc4061a66e6fb06e30f587) | + | [开源复刻](https://oshwhub.com/explore?tag=935421b496b44f178a554fbdaa568e0a) | [935421b496b44f178a554fbdaa568e0a](https://rsshub.app/oshwhub/explore/new/all/935421b496b44f178a554fbdaa568e0a) | + | [电子竞赛](https://oshwhub.com/explore?tag=08a877289c3f4f34b2ca8905996e07ed) | [08a877289c3f4f34b2ca8905996e07ed](https://rsshub.app/oshwhub/explore/new/all/08a877289c3f4f34b2ca8905996e07ed) | + | [AI视觉](https://oshwhub.com/explore?tag=e2d486a270aa46f790318c714cc77d02) | [e2d486a270aa46f790318c714cc77d02](https://rsshub.app/oshwhub/explore/new/all/e2d486a270aa46f790318c714cc77d02) | + + #### [电工电子](https://oshwhub.com/explore?tag=9456044232c4473d809b794e2c1c5b3c) + + | 名称 | ID | + | ---------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | + | [电路分析](https://oshwhub.com/explore?tag=827cd3b7542646d682f9588973647e96) | [827cd3b7542646d682f9588973647e96](https://rsshub.app/oshwhub/explore/new/all/827cd3b7542646d682f9588973647e96) | + | [电力电子](https://oshwhub.com/explore?tag=a08b61928be54154bb1a346f7630e4ba) | [a08b61928be54154bb1a346f7630e4ba](https://rsshub.app/oshwhub/explore/new/all/a08b61928be54154bb1a346f7630e4ba) | + | [模拟电路](https://oshwhub.com/explore?tag=858b54c552714ef586fd28705d79e1ec) | [858b54c552714ef586fd28705d79e1ec](https://rsshub.app/oshwhub/explore/new/all/858b54c552714ef586fd28705d79e1ec) | + | [数字电路](https://oshwhub.com/explore?tag=027f0293ca4e4c0e982c3b11f13b64b6) | [027f0293ca4e4c0e982c3b11f13b64b6](https://rsshub.app/oshwhub/explore/new/all/027f0293ca4e4c0e982c3b11f13b64b6) | + | [高频电路](https://oshwhub.com/explore?tag=8938b321c55a41b092da9443fcfba334) | [8938b321c55a41b092da9443fcfba334](https://rsshub.app/oshwhub/explore/new/all/8938b321c55a41b092da9443fcfba334) | + | [仿真电路](https://oshwhub.com/explore?tag=b29c5f43ff8c4f39930174732044842c) | [b29c5f43ff8c4f39930174732044842c](https://rsshub.app/oshwhub/explore/new/all/b29c5f43ff8c4f39930174732044842c) | + + #### [电子竞赛/活动](https://oshwhub.com/explore?tag=be87aefef90542438ff784899e6e0270) + + | 名称 | ID | + | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | + | [星火计划2025](https://oshwhub.com/explore?tag=9d75d82c34d74d8eb385281a6ebc7fe9) | [9d75d82c34d74d8eb385281a6ebc7fe9](https://rsshub.app/oshwhub/explore/new/all/9d75d82c34d74d8eb385281a6ebc7fe9) | + | [彩色丝印](https://oshwhub.com/explore?tag=4776bafa72df43879ea082ae1345d5bb) | [4776bafa72df43879ea082ae1345d5bb](https://rsshub.app/oshwhub/explore/new/all/4776bafa72df43879ea082ae1345d5bb) | + | [立创大赛](https://oshwhub.com/explore?tag=f7eefe9c39ff49dabbea446863af30e3) | [f7eefe9c39ff49dabbea446863af30e3](https://rsshub.app/oshwhub/explore/new/all/f7eefe9c39ff49dabbea446863af30e3) | + | [互联网+](https://oshwhub.com/explore?tag=10d9b29096d347629eea7fe3a78eb290) | [10d9b29096d347629eea7fe3a78eb290](https://rsshub.app/oshwhub/explore/new/all/10d9b29096d347629eea7fe3a78eb290) | + | [创新杯/创青春](https://oshwhub.com/explore?tag=e6920b7defbf47f78e811379ab06b3a2) | [e6920b7defbf47f78e811379ab06b3a2](https://rsshub.app/oshwhub/explore/new/all/e6920b7defbf47f78e811379ab06b3a2) | + | [FPGA大赛](https://oshwhub.com/explore?tag=3348af772eb54f769e345c1c6312c3a9) | [3348af772eb54f769e345c1c6312c3a9](https://rsshub.app/oshwhub/explore/new/all/3348af772eb54f769e345c1c6312c3a9) | + | [其他比赛](https://oshwhub.com/explore?tag=06ed1c7532594f59916f7ce037a6f3ff) | [06ed1c7532594f59916f7ce037a6f3ff](https://rsshub.app/oshwhub/explore/new/all/06ed1c7532594f59916f7ce037a6f3ff) | + | [星火计划2024](https://oshwhub.com/explore?tag=5f4e56750b0445a7a024b01cc8fa7122) | [5f4e56750b0445a7a024b01cc8fa7122](https://rsshub.app/oshwhub/explore/new/all/5f4e56750b0445a7a024b01cc8fa7122) | + | [星火计划2023](https://oshwhub.com/explore?tag=15637284a6f545128f80a11443cdf1a0) | [15637284a6f545128f80a11443cdf1a0](https://rsshub.app/oshwhub/explore/new/all/15637284a6f545128f80a11443cdf1a0) | + + #### [电子设计大赛](https://oshwhub.com/explore?tag=f207d2c4ad2644b7acb4f8345bf6cee6) + + | 名称 | ID | + | ------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | + | [校内选拔赛](https://oshwhub.com/explore?tag=b9b469bc5f9f43fbbca7ea1b42ad261f) | [b9b469bc5f9f43fbbca7ea1b42ad261f](https://rsshub.app/oshwhub/explore/new/all/b9b469bc5f9f43fbbca7ea1b42ad261f) | + | [省赛/区赛](https://oshwhub.com/explore?tag=9ba4444f3c4e4c0ca6de5c5473cde4a8) | [9ba4444f3c4e4c0ca6de5c5473cde4a8](https://rsshub.app/oshwhub/explore/new/all/9ba4444f3c4e4c0ca6de5c5473cde4a8) | + | [2013年电赛](https://oshwhub.com/explore?tag=9b0656c41291403db63ecdd67d8caf07) | [9b0656c41291403db63ecdd67d8caf07](https://rsshub.app/oshwhub/explore/new/all/9b0656c41291403db63ecdd67d8caf07) | + | [2015年电赛](https://oshwhub.com/explore?tag=fe146745542a4dde99883058b5325863) | [fe146745542a4dde99883058b5325863](https://rsshub.app/oshwhub/explore/new/all/fe146745542a4dde99883058b5325863) | + | [2019年电赛](https://oshwhub.com/explore?tag=b3894c65a5ca47f19bab8867da884f04) | [b3894c65a5ca47f19bab8867da884f04](https://rsshub.app/oshwhub/explore/new/all/b3894c65a5ca47f19bab8867da884f04) | + | [2021年电赛](https://oshwhub.com/explore?tag=6ccb9fbbd3294c6ba93570c8d35e5310) | [6ccb9fbbd3294c6ba93570c8d35e5310](https://rsshub.app/oshwhub/explore/new/all/6ccb9fbbd3294c6ba93570c8d35e5310) | + | [2023年电赛](https://oshwhub.com/explore?tag=b1e24499fcdb47c7896baf96b0e40aaa) | [b1e24499fcdb47c7896baf96b0e40aaa](https://rsshub.app/oshwhub/explore/new/all/b1e24499fcdb47c7896baf96b0e40aaa) | + +
+`, + categories: ['programming'], + features: { + requireConfig: false, + requirePuppeteer: false, + antiCrawler: false, + supportRadar: true, + supportBT: false, + supportPodcast: false, + supportScihub: false, + }, + radar: [ + { + source: ['oshwhub.com/explore'], + target: '/explore', + }, + { + title: '嵌入式 - 51单片机', + source: ['oshwhub.com/explore?tag=3b0f18b7516447f4b98a3830b1f3b665'], + target: '/explore/new/all/3b0f18b7516447f4b98a3830b1f3b665', + }, + { + title: '嵌入式 - STM单片机', + source: ['oshwhub.com/explore?tag=ccf89e646cd446a3b83b2f52b0199b62'], + target: '/explore/new/all/ccf89e646cd446a3b83b2f52b0199b62', + }, + { + title: '嵌入式 - AVR单片机', + source: ['oshwhub.com/explore?tag=3f6426c635ff442291209a3384a84102'], + target: '/explore/new/all/3f6426c635ff442291209a3384a84102', + }, + { + title: '嵌入式 - MM单片机', + source: ['oshwhub.com/explore?tag=cc3d1169f18c416c8757901ea6df6223'], + target: '/explore/new/all/cc3d1169f18c416c8757901ea6df6223', + }, + { + title: '嵌入式 - HK单片机', + source: ['oshwhub.com/explore?tag=b97db05d4ca84ec586b573ac8a30f903'], + target: '/explore/new/all/b97db05d4ca84ec586b573ac8a30f903', + }, + { + title: '嵌入式 - GD单片机', + source: ['oshwhub.com/explore?tag=b20331637f5145acacdcba7b4b425f86'], + target: '/explore/new/all/b20331637f5145acacdcba7b4b425f86', + }, + { + title: '嵌入式 - Arduino', + source: ['oshwhub.com/explore?tag=656035358f114d88a6d7ae9f2f008004'], + target: '/explore/new/all/656035358f114d88a6d7ae9f2f008004', + }, + { + title: '嵌入式 - Linux', + source: ['oshwhub.com/explore?tag=a970fe2004094a908bccfcd3a19d8119'], + target: '/explore/new/all/a970fe2004094a908bccfcd3a19d8119', + }, + { + title: '嵌入式 - RA单片机', + source: ['oshwhub.com/explore?tag=10f420434b2e499a9d55a053a1b68532'], + target: '/explore/new/all/10f420434b2e499a9d55a053a1b68532', + }, + { + title: '嵌入式 - FPGA', + source: ['oshwhub.com/explore?tag=b9dc4e4d3185457fb0b036697c60c304'], + target: '/explore/new/all/b9dc4e4d3185457fb0b036697c60c304', + }, + { + title: '嵌入式 - 创客教育套件', + source: ['oshwhub.com/explore?tag=7a7e2ffe306f45d49aceeccf643164f1'], + target: '/explore/new/all/7a7e2ffe306f45d49aceeccf643164f1', + }, + { + title: '嵌入式 - DSP', + source: ['oshwhub.com/explore?tag=7afd043f0472485f8a0bdd03b7f2b430'], + target: '/explore/new/all/7afd043f0472485f8a0bdd03b7f2b430', + }, + { + title: '嵌入式 - ESP8266/32', + source: ['oshwhub.com/explore?tag=6f6eefa0fcb54ab4b75469c64646d9e9'], + target: '/explore/new/all/6f6eefa0fcb54ab4b75469c64646d9e9', + }, + { + title: '嵌入式 - Hi3861', + source: ['oshwhub.com/explore?tag=08da4fffef66412c98862b56bc6de8e0'], + target: '/explore/new/all/08da4fffef66412c98862b56bc6de8e0', + }, + { + title: '嵌入式 - CH单片机', + source: ['oshwhub.com/explore?tag=46713082ee6e4e5d83ab50b2dde261f9'], + target: '/explore/new/all/46713082ee6e4e5d83ab50b2dde261f9', + }, + { + title: '嵌入式 - CW32单片机', + source: ['oshwhub.com/explore?tag=68b1cd8ff95c4a77ada1feac74a15cd7'], + target: '/explore/new/all/68b1cd8ff95c4a77ada1feac74a15cd7', + }, + { + title: '嵌入式 - N32单片机', + source: ['oshwhub.com/explore?tag=a8174b755bb840c284354adda36bea97'], + target: '/explore/new/all/a8174b755bb840c284354adda36bea97', + }, + { + title: '嵌入式 - 全志系列', + source: ['oshwhub.com/explore?tag=02c3807273ea47c4aaa6708b897a1608'], + target: '/explore/new/all/02c3807273ea47c4aaa6708b897a1608', + }, + { + title: '嵌入式 - AIR32', + source: ['oshwhub.com/explore?tag=91c29b363a024e73afe4fb2adc3d6336'], + target: '/explore/new/all/91c29b363a024e73afe4fb2adc3d6336', + }, + { + title: '嵌入式 - 树莓派', + source: ['oshwhub.com/explore?tag=68fb2b4eacf244b6b99e208bd0c0453c'], + target: '/explore/new/all/68fb2b4eacf244b6b99e208bd0c0453c', + }, + { + title: '嵌入式 - RISC-V', + source: ['oshwhub.com/explore?tag=5bf7f884bccf4507acc36a729d8b5078'], + target: '/explore/new/all/5bf7f884bccf4507acc36a729d8b5078', + }, + { + title: '嵌入式 - 玄铁', + source: ['oshwhub.com/explore?tag=e0a360d42a954a29bb6a3e5eee0395fd'], + target: '/explore/new/all/e0a360d42a954a29bb6a3e5eee0395fd', + }, + { + title: '嵌入式 - Canaan(嘉楠)', + source: ['oshwhub.com/explore?tag=3dec6606d3ca4b898eb86a78fd4c40ea'], + target: '/explore/new/all/3dec6606d3ca4b898eb86a78fd4c40ea', + }, + { + title: 'DIY设计/硬件设计 - 立创泰山派', + source: ['oshwhub.com/explore?tag=26b12f4862cc4aa8a7a6ff653d9de9ed'], + target: '/explore/new/all/26b12f4862cc4aa8a7a6ff653d9de9ed', + }, + { + title: 'DIY设计/硬件设计 - 立创梁山派', + source: ['oshwhub.com/explore?tag=51f92f98f8c3465ebc12e014b654a15c'], + target: '/explore/new/all/51f92f98f8c3465ebc12e014b654a15c', + }, + { + title: 'DIY设计/硬件设计 - 仿真器/编程器', + source: ['oshwhub.com/explore?tag=1b87c2546ea3444e9817a1faf8f76ff2'], + target: '/explore/new/all/1b87c2546ea3444e9817a1faf8f76ff2', + }, + { + title: 'DIY设计/硬件设计 - 电赛TI开发板', + source: ['oshwhub.com/explore?tag=d4b25b821c8d4f7cb1bd871853400521'], + target: '/explore/new/all/d4b25b821c8d4f7cb1bd871853400521', + }, + { + title: 'DIY设计/硬件设计 - 电源/能源', + source: ['oshwhub.com/explore?tag=e804983891e743439072af4e05aba50d'], + target: '/explore/new/all/e804983891e743439072af4e05aba50d', + }, + { + title: 'DIY设计/硬件设计 - 信号/通信', + source: ['oshwhub.com/explore?tag=b13a722e49ae40f4ae15c7448c0e807b'], + target: '/explore/new/all/b13a722e49ae40f4ae15c7448c0e807b', + }, + { + title: 'DIY设计/硬件设计 - 测量/仪器', + source: ['oshwhub.com/explore?tag=b1fb4acdb7354d81b3ed3c18050d0580'], + target: '/explore/new/all/b1fb4acdb7354d81b3ed3c18050d0580', + }, + { + title: 'DIY设计/硬件设计 - 课设/毕设', + source: ['oshwhub.com/explore?tag=7711ced2a349485d85a6cae11c91cc5d'], + target: '/explore/new/all/7711ced2a349485d85a6cae11c91cc5d', + }, + { + title: 'DIY设计/硬件设计 - DIY设计', + source: ['oshwhub.com/explore?tag=d3cacd30fc1a4dbea35aba2f00c755e3'], + target: '/explore/new/all/d3cacd30fc1a4dbea35aba2f00c755e3', + }, + { + title: 'DIY设计/硬件设计 - 声光设计', + source: ['oshwhub.com/explore?tag=fbca6abc8a114614a5598bf7c33fb72e'], + target: '/explore/new/all/fbca6abc8a114614a5598bf7c33fb72e', + }, + { + title: 'DIY设计/硬件设计 - 555定时器', + source: ['oshwhub.com/explore?tag=e53cdda17f4840158e9f9a82354f923d'], + target: '/explore/new/all/e53cdda17f4840158e9f9a82354f923d', + }, + { + title: 'DIY设计/硬件设计 - 方案验证板', + source: ['oshwhub.com/explore?tag=90637fd096424071a21927e5cdc436de'], + target: '/explore/new/all/90637fd096424071a21927e5cdc436de', + }, + { + title: 'DIY设计/硬件设计 - 面板设计', + source: ['oshwhub.com/explore?tag=8e9b3ad4569943b19f701cf06d3be169'], + target: '/explore/new/all/8e9b3ad4569943b19f701cf06d3be169', + }, + { + title: '物联网/智能硬件 - 蓝牙/蓝牙mesh', + source: ['oshwhub.com/explore?tag=252438513ded4c87b8bac438d006a0b8'], + target: '/explore/new/all/252438513ded4c87b8bac438d006a0b8', + }, + { + title: '物联网/智能硬件 - WiFi/以太网', + source: ['oshwhub.com/explore?tag=f2beb30a80134f3e9595b51148f55cf8'], + target: '/explore/new/all/f2beb30a80134f3e9595b51148f55cf8', + }, + { + title: '物联网/智能硬件 - 射频/2.4G', + source: ['oshwhub.com/explore?tag=72cccbeca286458a9fb31fbbff8cd57f'], + target: '/explore/new/all/72cccbeca286458a9fb31fbbff8cd57f', + }, + { + title: '物联网/智能硬件 - GSM/GPRS', + source: ['oshwhub.com/explore?tag=e2f58f5ada1b46aaa30899996e1bffee'], + target: '/explore/new/all/e2f58f5ada1b46aaa30899996e1bffee', + }, + { + title: '物联网/智能硬件 - 无线定位', + source: ['oshwhub.com/explore?tag=3c3111e1320c48dd8e60e46201140402'], + target: '/explore/new/all/3c3111e1320c48dd8e60e46201140402', + }, + { + title: '物联网/智能硬件 - 4G/5G技术', + source: ['oshwhub.com/explore?tag=3e9823af89424add8e16c8d86dbe6365'], + target: '/explore/new/all/3e9823af89424add8e16c8d86dbe6365', + }, + { + title: '物联网/智能硬件 - 智能家居', + source: ['oshwhub.com/explore?tag=f1f6fe3058c4476486baa2d51469c116'], + target: '/explore/new/all/f1f6fe3058c4476486baa2d51469c116', + }, + { + title: '电子模块 - 电源模块', + source: ['oshwhub.com/explore?tag=2613794836ff4fa2954e4cca5749584a'], + target: '/explore/new/all/2613794836ff4fa2954e4cca5749584a', + }, + { + title: '电子模块 - 显示模块', + source: ['oshwhub.com/explore?tag=00aa2be7c4d44b5ea060419ca57a94e0'], + target: '/explore/new/all/00aa2be7c4d44b5ea060419ca57a94e0', + }, + { + title: '电子模块 - 通信模块', + source: ['oshwhub.com/explore?tag=a99c667254ab41f788ffbcb3e78e152b'], + target: '/explore/new/all/a99c667254ab41f788ffbcb3e78e152b', + }, + { + title: '电子模块 - 传感器模块', + source: ['oshwhub.com/explore?tag=b643637f21ea4464aeb312f29ca0131e'], + target: '/explore/new/all/b643637f21ea4464aeb312f29ca0131e', + }, + { + title: '电子模块 - 电机驱动模块', + source: ['oshwhub.com/explore?tag=7676fdaf039847e3808481a4437e004b'], + target: '/explore/new/all/7676fdaf039847e3808481a4437e004b', + }, + { + title: '电子模块 - 其他模块', + source: ['oshwhub.com/explore?tag=22a10af7cd434f1d8c28588b030963c5'], + target: '/explore/new/all/22a10af7cd434f1d8c28588b030963c5', + }, + { + title: '电子应用 - 汽车电子', + source: ['oshwhub.com/explore?tag=cc45e77e32764600a9edd9c6bec9a932'], + target: '/explore/new/all/cc45e77e32764600a9edd9c6bec9a932', + }, + { + title: '电子应用 - 消费电子', + source: ['oshwhub.com/explore?tag=e5831c441f25423d88a7311a9b276871'], + target: '/explore/new/all/e5831c441f25423d88a7311a9b276871', + }, + { + title: '电子应用 - 工业电子', + source: ['oshwhub.com/explore?tag=ba95313da8b24bbfbcf00182447f6063'], + target: '/explore/new/all/ba95313da8b24bbfbcf00182447f6063', + }, + { + title: '电子应用 - 家用电子', + source: ['oshwhub.com/explore?tag=7bee905a7730453c803339f2a1dc77cf'], + target: '/explore/new/all/7bee905a7730453c803339f2a1dc77cf', + }, + { + title: '电子应用 - 医疗电子', + source: ['oshwhub.com/explore?tag=b3e25776aa9d438980f140b7577b1af7'], + target: '/explore/new/all/b3e25776aa9d438980f140b7577b1af7', + }, + { + title: '电子应用 - 工业4.0', + source: ['oshwhub.com/explore?tag=2d6d5c8697cc4061a66e6fb06e30f587'], + target: '/explore/new/all/2d6d5c8697cc4061a66e6fb06e30f587', + }, + { + title: '电子应用 - 开源复刻', + source: ['oshwhub.com/explore?tag=935421b496b44f178a554fbdaa568e0a'], + target: '/explore/new/all/935421b496b44f178a554fbdaa568e0a', + }, + { + title: '电子应用 - 电子竞赛', + source: ['oshwhub.com/explore?tag=08a877289c3f4f34b2ca8905996e07ed'], + target: '/explore/new/all/08a877289c3f4f34b2ca8905996e07ed', + }, + { + title: '电子应用 - AI视觉', + source: ['oshwhub.com/explore?tag=e2d486a270aa46f790318c714cc77d02'], + target: '/explore/new/all/e2d486a270aa46f790318c714cc77d02', + }, + { + title: '电工电子 - 电路分析', + source: ['oshwhub.com/explore?tag=827cd3b7542646d682f9588973647e96'], + target: '/explore/new/all/827cd3b7542646d682f9588973647e96', + }, + { + title: '电工电子 - 电力电子', + source: ['oshwhub.com/explore?tag=a08b61928be54154bb1a346f7630e4ba'], + target: '/explore/new/all/a08b61928be54154bb1a346f7630e4ba', + }, + { + title: '电工电子 - 模拟电路', + source: ['oshwhub.com/explore?tag=858b54c552714ef586fd28705d79e1ec'], + target: '/explore/new/all/858b54c552714ef586fd28705d79e1ec', + }, + { + title: '电工电子 - 数字电路', + source: ['oshwhub.com/explore?tag=027f0293ca4e4c0e982c3b11f13b64b6'], + target: '/explore/new/all/027f0293ca4e4c0e982c3b11f13b64b6', + }, + { + title: '电工电子 - 高频电路', + source: ['oshwhub.com/explore?tag=8938b321c55a41b092da9443fcfba334'], + target: '/explore/new/all/8938b321c55a41b092da9443fcfba334', + }, + { + title: '电工电子 - 仿真电路', + source: ['oshwhub.com/explore?tag=b29c5f43ff8c4f39930174732044842c'], + target: '/explore/new/all/b29c5f43ff8c4f39930174732044842c', + }, + { + title: '电子竞赛/活动 - 星火计划2025', + source: ['oshwhub.com/explore?tag=9d75d82c34d74d8eb385281a6ebc7fe9'], + target: '/explore/new/all/9d75d82c34d74d8eb385281a6ebc7fe9', + }, + { + title: '电子竞赛/活动 - 彩色丝印', + source: ['oshwhub.com/explore?tag=4776bafa72df43879ea082ae1345d5bb'], + target: '/explore/new/all/4776bafa72df43879ea082ae1345d5bb', + }, + { + title: '电子竞赛/活动 - 立创大赛', + source: ['oshwhub.com/explore?tag=f7eefe9c39ff49dabbea446863af30e3'], + target: '/explore/new/all/f7eefe9c39ff49dabbea446863af30e3', + }, + { + title: '电子竞赛/活动 - 互联网+', + source: ['oshwhub.com/explore?tag=10d9b29096d347629eea7fe3a78eb290'], + target: '/explore/new/all/10d9b29096d347629eea7fe3a78eb290', + }, + { + title: '电子竞赛/活动 - 创新杯/创青春', + source: ['oshwhub.com/explore?tag=e6920b7defbf47f78e811379ab06b3a2'], + target: '/explore/new/all/e6920b7defbf47f78e811379ab06b3a2', + }, + { + title: '电子竞赛/活动 - FPGA大赛', + source: ['oshwhub.com/explore?tag=3348af772eb54f769e345c1c6312c3a9'], + target: '/explore/new/all/3348af772eb54f769e345c1c6312c3a9', + }, + { + title: '电子竞赛/活动 - 其他比赛', + source: ['oshwhub.com/explore?tag=06ed1c7532594f59916f7ce037a6f3ff'], + target: '/explore/new/all/06ed1c7532594f59916f7ce037a6f3ff', + }, + { + title: '电子竞赛/活动 - 星火计划2024', + source: ['oshwhub.com/explore?tag=5f4e56750b0445a7a024b01cc8fa7122'], + target: '/explore/new/all/5f4e56750b0445a7a024b01cc8fa7122', + }, + { + title: '电子竞赛/活动 - 星火计划2023', + source: ['oshwhub.com/explore?tag=15637284a6f545128f80a11443cdf1a0'], + target: '/explore/new/all/15637284a6f545128f80a11443cdf1a0', + }, + { + title: '电子设计大赛 - 校内选拔赛', + source: ['oshwhub.com/explore?tag=b9b469bc5f9f43fbbca7ea1b42ad261f'], + target: '/explore/new/all/b9b469bc5f9f43fbbca7ea1b42ad261f', + }, + { + title: '电子设计大赛 - 省赛/区赛', + source: ['oshwhub.com/explore?tag=9ba4444f3c4e4c0ca6de5c5473cde4a8'], + target: '/explore/new/all/9ba4444f3c4e4c0ca6de5c5473cde4a8', + }, + { + title: '电子设计大赛 - 2013年电赛', + source: ['oshwhub.com/explore?tag=9b0656c41291403db63ecdd67d8caf07'], + target: '/explore/new/all/9b0656c41291403db63ecdd67d8caf07', + }, + { + title: '电子设计大赛 - 2015年电赛', + source: ['oshwhub.com/explore?tag=fe146745542a4dde99883058b5325863'], + target: '/explore/new/all/fe146745542a4dde99883058b5325863', + }, + { + title: '电子设计大赛 - 2019年电赛', + source: ['oshwhub.com/explore?tag=b3894c65a5ca47f19bab8867da884f04'], + target: '/explore/new/all/b3894c65a5ca47f19bab8867da884f04', + }, + { + title: '电子设计大赛 - 2021年电赛', + source: ['oshwhub.com/explore?tag=6ccb9fbbd3294c6ba93570c8d35e5310'], + target: '/explore/new/all/6ccb9fbbd3294c6ba93570c8d35e5310', + }, + { + title: '电子设计大赛 - 2023年电赛', + source: ['oshwhub.com/explore?tag=b1e24499fcdb47c7896baf96b0e40aaa'], + target: '/explore/new/all/b1e24499fcdb47c7896baf96b0e40aaa', + }, + ], + view: ViewType.Articles, +}; diff --git a/lib/routes/oshwhub/templates/description.art b/lib/routes/oshwhub/templates/description.art index cb6027fca..03d8e218f 100644 --- a/lib/routes/oshwhub/templates/description.art +++ b/lib/routes/oshwhub/templates/description.art @@ -1,58 +1,156 @@ -
-
-

- {{publishTime}}
- 作者:{{author}}
- {{introduction}}
-
+{{ if images }} + {{ each images image }} + {{ if image?.src }} +
+ {{ image.alt }} +
+ {{ /if }} + {{ /each }} +{{ /if }} -
-

描述

- {{@ content}} -
+{{ if title || origin || tags || license || pubDate || upDated || intro }} + + + {{ if title }} + + + + + {{ /if }} + {{ if origin }} + + + + + {{ /if }} + {{ if tags }} + + + + + {{ /if }} + {{ if license }} + + + + + {{ /if }} + {{ if pubDate }} + + + + + {{ /if }} + {{ if upDated }} + + + + + {{ /if }} + {{ if intro }} + + + + + {{ /if }} + +
名称{{ title }}
版本{{ origin }}
标签 + {{ each tags tag }} + {{ if $index !== 0 }}/ {{ /if }}{{ tag }} + {{ /each }} +
开源协议{{ license }}
创建时间{{ pubDate }}
更新时间{{ upDated }}
简介{{ intro }}
+{{ /if }} - {{ if images }} -
-

PCB && schematic

- {{each images $imgs $key}} - {{each $imgs $img}} -
- {{/each}} - {{/each}} -
- {{/if}} +{{ if description }} +

描述

+ {{@ description }} +{{ /if }} - {{ if boms }} -
-

BOM

- - - - - - - - - - - - - - {{each boms}} - - - - - - - - - - - - - {{/each}} -
NoQuantityDeviceDesignatorFootprintValueManufacturer PartManufacturerSupplier PartSupplier
{{$value.No}}{{$value.Quantity}}{{$value.Device}}{{$value.Designator}}{{$value.Footprint}}{{$value.Value}}{{$value['Manufacturer Part']}}{{$value.Manufacturer}}{{$value['Supplier Part']}}{{$value.Supplier}}
-
- {{/if}} -
\ No newline at end of file +{{ if documents }} +

设计图

+
+
    + {{ each documents document }} +
  • + {{ if document.title }} +

    {{ document.title }}

    + {{ /if }} + {{ if document.description }} +

    {{ document.description }}

    + {{ /if }} + {{ if document.thumb }} +
    + {{ document.title }} +
    + {{ /if }} +
  • + {{ /each }} +
+
+{{ /if }} + +{{ if boms }} +

BOM

+ + + + {{ set headers = boms[0] }} + {{ each headers header }} + + {{ /each }} + + + + {{ set rows = boms.slice(1) }} + {{ each rows row }} + + {{ each row td }} + {{ if $index === row.length - 1 }} + + {{ else }} + + {{ /if }} + {{ /each }} + + {{ /each }} + +
{{ header }}
{{@ formatObject(td) }}{{ td | escapeHTML }}
+{{ /if }} + +{{ if attachments }} +

附件

+ + + + + + + + {{ each attachments attachment }} + + + + + + {{ /each }} + +
序号文件名称文件大小
+ {{ $index + 1 }} + + {{ if attachment.src }} + {{ attachment.name || '下载链接' }} + {{ else }} + {{ attachment.name || '无文件链接' }} + {{ /if }} + + {{ attachment.size }} +
+{{ /if }} \ No newline at end of file