通过 HTTP 接口获取我的世界国际版(基岩版)的全部收录版本与各网盘下载地址。所有接口均为 GET 请求,返回 UTF-8 编码的 JSON,无需申请 Key、无需鉴权。
接口以只读方式提供站内版本数据,适合用于第三方启动器、下载工具或版本监控脚本。
https://mcapks.net/api/
一次拿到站内收录的全部版本号、发布日期与安装包体积。
同一版本可返回夸克、123云盘、百度、迅雷、UC 等多个来源。
支持 v8a / v7a 两种架构,缺失时自动回退并在响应中标明。
无需 Token、无频率限制,直接 GET 即可,请合理调用。
{
"success": true, // 请求是否成功,客户端应以此字段判断
"data": { }, // 业务数据,仅 success 为 true 时存在
"message": "获取成功" // 提示文案
}
success 字段判断,失败时读取 error.code 与 error.message。返回站内收录的全部我的世界基岩版版本,按入库顺序倒序排列(最新版本在前)。一次性返回全量数据,暂不支持分页与筛选。
| 字段 | 类型 | 说明 |
|---|---|---|
| data.total | int | 本次返回的版本条数 |
| data.versions[].version | string | 完整版本号,如 1.21.51.02 |
| data.versions[].beta | bool | 是否为测试版(Beta / Preview) |
| data.versions[].date | string | 发布日期,通常为 YYYY-MM-DD;三天内入库的版本可能返回“今天 HH:ii”这类相对时间 |
| data.versions[].size | string | 安装包体积,带单位,如 158.6 MB |
{
"success": true,
"data": {
"total": 236,
"versions": [
{
"version": "1.21.51.02",
"beta": false,
"date": "2024-12-05",
"size": "158.6 MB"
},
{
"version": "1.21.50.29",
"beta": true,
"date": "2024-11-28",
"size": "157.2 MB"
}
]
},
"message": "获取成功"
}
date 为展示用文案而非标准时间格式,需要精确时间排序时请以数组顺序为准。
根据版本号返回该版本可用的网盘下载地址。同一版本可能同时提供多个网盘来源,返回顺序即推荐顺序。
| 参数名 | 类型 | 必需 | 默认值 | 说明 |
|---|---|---|---|---|
| version | string | 必填 | — | 完整版本号,需与版本列表接口返回的 version 完全一致 |
| type | string | 可选 | v8a |
目标架构,可选 v8a(arm64-v8a)或 v7a(armeabi-v7a)。该版本没有 v8a 安装包时会自动回退到 v7a,实际架构以响应中的 data.type 为准 |
| 字段 | 类型 | 说明 |
|---|---|---|
| data.version | string | 请求的版本号 |
| data.type | string | 实际返回的架构:v8a 或 v7a |
| data.downloads[].name | string | 网盘名称,取值范围:夸克网盘 / 123云盘 / 光鸭网盘 / 百度网盘 / 城通网盘 / 迅雷网盘 / UC网盘 |
| data.downloads[].url | string | 下载地址或网盘分享页地址 |
| data.downloads[].password | string | 提取码,仅部分网盘返回(如百度网盘),其余来源不含该字段 |
{
"success": true,
"data": {
"version": "1.21.51.02",
"type": "v8a",
"downloads": [
{
"name": "夸克网盘",
"url": "https://pan.quark.cn/s/xxxxxxxxxxxx"
},
{
"name": "123云盘",
"url": "https://www.123pan.com/s/xxxxxxxxxxxx"
},
{
"name": "百度网盘",
"url": "https://pan.baidu.com/s/xxxxxxxxxxxx?pwd=KLPZ",
"password": "KLPZ"
},
{
"name": "迅雷网盘",
"url": "https://pan.xunlei.com/s/xxxxxxxxxxxx"
}
]
},
"message": "获取成功"
}
downloads 只包含后台已配置的网盘,数量与顺序会随版本变化,请遍历数组而不要按固定下标取值。password 为可选字段,读取前请先判断是否存在。
接口不使用 HTTP 状态码表达业务错误,请求异常时 HTTP 仍为 200,请按下表处理。
| 业务码 | 场景 | 返回形式 |
|---|---|---|
| 400 | version 参数为空 |
返回标准 JSON 错误结构,见下方示例 |
| — | 版本不存在 | 当前实现直接输出纯文本 未找到该版本,并非 JSON,解析前请做容错 |
| 500 | 服务器 / 数据库异常 | 可能返回 PHP 错误信息而非 JSON,建议按“无法解析即失败”处理 |
{
"success": false,
"error": {
"code": 400,
"message": "版本号不能为空"
}
}
/api/get-download.php 会直接输出纯文本
未找到该版本,此时 JSON.parse() 会抛异常。推荐先取 text(),再 try/catch 解析,见下方调用示例。
以下示例已包含错误兜底逻辑,可直接复制使用。
# 获取全部版本
curl 'https://mcapks.net/api/get-vslist.php'
# 获取指定版本的下载链接
curl 'https://mcapks.net/api/get-download.php?version=1.21.51.02&type=v8a'
const BASE = 'https://mcapks.net';
// 获取版本列表
async function getVersions() {
const res = await fetch(`${BASE}/api/get-vslist.php`);
const json = await res.json();
if (!json.success) throw new Error(json.error?.message || '请求失败');
return json.data.versions;
}
// 获取下载链接
async function getDownloads(version, type = 'v8a') {
const url = `${BASE}/api/get-download.php?version=${encodeURIComponent(version)}&type=${type}`;
const res = await fetch(url);
const text = await res.text();
let json;
try {
json = JSON.parse(text); // 版本不存在时返回纯文本,需要兜底
} catch (e) {
throw new Error(text.trim() || '返回内容无法解析');
}
if (!json.success) throw new Error(json.error?.message || '请求失败');
return json.data.downloads;
}
getDownloads('1.21.51.02').then(list => {
list.forEach(item => console.log(item.name, item.url, item.password ?? ''));
});
import requests
BASE = 'https://mcapks.net'
def get_versions():
r = requests.get(f'{BASE}/api/get-vslist.php', timeout=10)
data = r.json()
if not data.get('success'):
raise RuntimeError(data.get('error', {}).get('message', '请求失败'))
return data['data']['versions']
def get_downloads(version, arch='v8a'):
r = requests.get(
f'{BASE}/api/get-download.php',
params={'version': version, 'type': arch},
timeout=10,
)
try:
data = r.json() # 版本不存在时返回纯文本,需要兜底
except ValueError:
raise RuntimeError(r.text.strip() or '返回内容无法解析')
if not data.get('success'):
raise RuntimeError(data.get('error', {}).get('message', '请求失败'))
return data['data']['downloads']
for item in get_downloads('1.21.51.02'):
print(item['name'], item['url'], item.get('password', ''))