API 使用说明
本站开放 9 个只读 JSON 端点,覆盖镜像条目、PE 工具、启动快捷键、
常识问答与文章频道。全部端点无需密钥、
支持跨域(CORS *),抓取即用。
端点 9 个
镜像 256 条
文章 2017 篇
快捷键 68 条
通用约定
- 只读:全部端点均为静态 GET,无参数、无鉴权、无写操作。
- 跨域:响应头含
Access-Control-Allow-Origin: *,浏览器端可直接 fetch,无需代理。 - 路径约定:各端点返回的
url/u字段均为 站内相对路径(以/开头), 拼接站点根域即得完整 URL。 - 数据版本:随站点构建更新,无版本协商机制;
字段发生不兼容变更时递增
index.json的version。 - 空值:缺失的可选字段统一为空字符串或空数组,不为 null。
/api/index.json application/json
API 目录
入口文件:一次拿到全部端点清单、条目数、许可与归因信息。接入前先读它。
返回结构: 对象(Object)
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 数据集名称,如「装机系统库 API」。 |
| version | string | API 版本号,当前 1.0。字段结构变更时递增。 |
| description | string | 数据集一句话说明。 |
| license | string | 许可协议(CC BY-NC 4.0)及其适用范围。 |
| attribution | string | 归因要求:引用时需保留的来源标注。 |
| generatedAt | string | 本次构建时间(ISO 8601 UTC),可用于判断缓存是否过期。 |
| endpoints | array | 端点清单,元素字段见下表。 |
| endpoints[].path | string | 端点路径,如 /api/mirrors.json。 |
| endpoints[].title | string | 端点显示名。 |
| endpoints[].count | number | 该端点的条目数。 |
| endpoints[].desc | string | 端点一句话说明。 |
调用示例
const index = await (await fetch('https://msdn.lopins.cn/api/index.json')).json();
for (const e of index.endpoints) {
console.log(e.path, e.count, e.title);
}
- 用 generatedAt 判断本地缓存是否需要刷新。
镜像条目
全量官方原版镜像元数据:文件名、体积、发布日期、四类哈希、下载点与版本页归属。
返回结构: 数组,元素为镜像条目对象
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 稳定唯一标识(分类 + 文件名去扩展名),可用于去重与增量比对。 |
| title | string | 条目显示名。 |
| section | string | 二级分类名,如「Windows 11 26H2」。 |
| version | string | 所属版本页 slug,如 windows-11-26h2。 |
| group | string | 一级分类 key:windows / office / pe / linux / sqlserver / tools。 |
| file | string | 镜像文件名。 |
| size | string | 文件体积(原样文本,含单位)。 |
| date | string | 发布日期。 |
| platform | string | 平台标识,如 x64。 |
| arch | string[] | 架构标签数组,由 tags 中匹配架构词得出,可能为空数组。 |
| edition | string | 版本类型标签(如「企业版」),无匹配时为空字符串。 |
| desc | string | 版本用途说明。 |
| note | string | 注意事项(硬件要求、支持到期、授权边界等)。 |
| tags | string[] | 原始标签数组(架构、版本类型、语言等)。 |
| md5 | string | MD5 校验值,无值时为空字符串。 |
| sha1 | string | SHA1 校验值,无值时为空字符串。 |
| sha256 | string | SHA256 校验值,无值时为空字符串。 |
| sm3 | string | SM3 校验值,无值时为空字符串。 |
| downloads | array | 下载点数组,元素为 { name, href };不含夸克网盘,优先含官方渠道。 |
| url | string | 站内详情页路径(以 / 开头的相对路径)。 |
调用示例
const mirrors = await (await fetch('https://msdn.lopins.cn/api/mirrors.json')).json();
// 只要 Windows 11 26H2 且带 SHA256 校验的条目
const win1126h2 = mirrors.filter(
(m) => m.version === 'windows-11-26h2' && m.sha256,
);
// 取官方渠道下载点(name 含「官方」)
const official = win1126h2.flatMap((m) =>
m.downloads.filter((d) => d.name.includes('官方')),
);
- 四类哈希可能为空字符串,做校验比对时请先判空。
- downloads 的 href 指向第三方地址,请自行加 nofollow 且不要高频代理抓取。
PE 维护工具
PE 维护系统工具清单:特点、使用提示、文件校验值与下载点。
返回结构: 数组,元素为 PE 工具对象
| 字段 | 类型 | 说明 |
|---|---|---|
| slug | string | 工具标识,如 rufus、ventoy。 |
| title | string | 工具显示名。 |
| tags | string[] | 特性标签数组。 |
| intro | string[] | 介绍段落数组,每项一段。 |
| features | string[] | 特点条目数组。 |
| tips | string[] | 使用提示条目数组。 |
| files | array | 文件数组,元素为 { file, size, md5, sha1, sha256 }。 |
| downloads | array | 下载点数组,元素为 { name, href }。 |
| note | string | 备注与风险提示。 |
| url | string | 站内详情页路径。 |
调用示例
const tools = await (await fetch('https://msdn.lopins.cn/api/pe.json')).json();
// 找支持 UEFI + Legacy 双模式写入的启动盘工具
const bootTools = tools.filter((t) =>
t.features.some((f) => /UEFI|Legacy/i.test(f)),
);
U盘启动快捷键
品牌机型 → U 盘启动快捷键与 BIOS 入口键,按机型类型分组。
返回结构: 数组,元素为机型类型对象(含 brands 子数组)
| 字段 | 类型 | 说明 |
|---|---|---|
| type | string | 机型类型标识(分组键)。 |
| label | string | 机型类型显示名,如「笔记本品牌」。 |
| brands | array | 机型数组,元素字段见下表。 |
| brands[].name | string | 品牌 / 机型名。 |
| brands[].key | string | U 盘启动快捷键,如 F12。 |
| brands[].bios | string | null | 进入 BIOS 的按键,无记录时为 null。 |
| brands[].source | string | 数据来源标注:verified(厂商或原站核对)/ common(行业通识)。 |
调用示例
const hotkeys = await (await fetch('https://msdn.lopins.cn/api/hotkeys.json')).json();
// 拉平所有机型,按快捷键归组
const byKey = {};
for (const group of hotkeys) {
for (const b of group.brands) {
(byKey[b.key] ??= []).push(b.name);
}
}
console.log(byKey.F12);
- source 为 common 的条目来自行业通识,BIOS 版本差异可能导致实际按键不同,建议以开机画面提示为准。
系统常识与常见问题
全部 2017 篇文章的元数据(常识 + 问答),不含正文。
返回结构: 数组,元素为文章对象
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 文章标识(Markdown 文件名去扩展名)。 |
| kind | string | 所属集合:knowledge(系统常识)/ faq(常见问题)。 |
| title | string | 文章标题。 |
| description | string | 文章摘要。 |
| tags | string[] | 标签数组。 |
| keywords | string[] | 关键词数组(SEO 词)。 |
| published | string | 发布日期(YYYY-MM-DD)。 |
| updated | string | 更新日期(YYYY-MM-DD);未标更新时为空字符串。 |
| url | string | 站内文章页路径。 |
调用示例
const articles = await (await fetch('https://msdn.lopins.cn/api/articles.json')).json();
// 按标签筛出 SQL Server 相关问答
const sqlFaq = articles.filter(
(a) => a.kind === 'faq' && a.tags.some((t) => /SQL/i.test(t)),
);
- 本端点只含元数据,正文请访问站内文章页(url 字段对应路径)。
版本页清单
版本页(二级分类)清单:版本标识、名称、所属分类、用途介绍与条目数。
返回结构: 数组,元素为版本页对象
| 字段 | 类型 | 说明 |
|---|---|---|
| slug | string | 版本页标识,如 windows-11-26h2。 |
| name | string | 版本页名称。 |
| group | string | 所属一级分类 key。 |
| intro | string | 版本用途介绍;部分版本无介绍时为空字符串。 |
| entries | number | 该版本页下的镜像条目数。 |
| url | string | 站内版本页路径。 |
调用示例
const sections = await (await fetch('https://msdn.lopins.cn/api/sections.json')).json();
// 找条目数最多的 10 个版本页
const top = sections
.sort((a, b) => b.entries - a.entries)
.slice(0, 10);
一级分类
站点一级分类清单:Windows / Office / PE / Linux / SQL Server / 实用工具。
返回结构: 数组,元素为分类对象
| 字段 | 类型 | 说明 |
|---|---|---|
| key | string | 分类 key:windows / office / pe / linux / sqlserver / tools。 |
| label | string | 分类显示名。 |
| desc | string | 分类覆盖范围说明。 |
| url | string | 站内分类页路径。 |
调用示例
const groups = await (await fetch('https://msdn.lopins.cn/api/groups.json')).json();
console.log(groups.map((g) => g.label).join(' / '));
文章频道
10 个产品域频道及其文章归属清单,可用于按主题重建文章导航。
返回结构: 数组,元素为频道对象
| 字段 | 类型 | 说明 |
|---|---|---|
| slug | string | 频道标识,如 windows-11。 |
| title | string | 频道显示名。 |
| domain | string | 内容规划域编号(K1–K10)。 |
| knowledge | number | 该频道的系统常识篇数。 |
| faq | number | 该频道的常见问题篇数。 |
| total | number | 该频道文章总数。 |
| url | string | 站内频道页路径。 |
| articles | array | 归属文章数组,元素为 { kind, id, url }。 |
调用示例
const channels = await (await fetch('https://msdn.lopins.cn/api/channels.json')).json();
// 按频道列出全部文章链接
for (const c of channels) {
console.log(c.title, c.total);
c.articles.forEach((a) => console.log(' ', a.url));
}
搜索索引
站内搜索页所用的精简索引,覆盖镜像、PE 工具与全部文章,字段为单字母缩写以压缩体积。
返回结构: 数组,元素为精简索引对象
| 字段 | 类型 | 说明 |
|---|---|---|
| t | string | 标题(title)。 |
| f | string | 副文本:镜像为文件名,PE 为文件名,文章为摘要。 |
| s | string | 所属版本 / 分组名。 |
| u | string | 站内路径(相对路径)。 |
| g | string | 分组 key:windows / office / pe / linux / sqlserver / tools / knowledge / faq。 |
| k | string[] | 搜索关键词:镜像与 PE 为 tags,文章为 tags + keywords 合并。 |
| y | string | 条目类型:mirror / pe / knowledge / faq。 |
调用示例
const index = await (await fetch('https://msdn.lopins.cn/api/search.json')).json();
// 简易前端搜索:标题命中优先
const q = 'ghost';
const hits = index
.filter((d) => (d.t + d.f + d.k.join(' ')).toLowerCase().includes(q))
.sort((a, b) => (a.t.includes(q) ? -1 : 1) - (b.t.includes(q) ? -1 : 1));
- 字段为单字母缩写是刻意压缩体积(约 200KB),不适合直接当业务数据源,请用 mirrors / articles 等专用端点。
使用约定与许可
- 数据为静态 JSON,随站点构建更新;请保留来源标注(装机系统库 + 上游 lm40.com)。
- 许可为 CC BY-NC 4.0:可自由用于非商业用途,转载需注明来源;商业用途需另行授权。
- 镜像版权归 Microsoft 及各发行商所有,下载请走各条目标注的下载点或官方渠道。
- 文章端点仅含元数据,不含正文;正文请访问站内文章页。
- 请勿高频全量拉取(每次请求均落至 CDN);按需请求分类端点即可,并缓存本地。