基于 Flask 的网易云音乐 API 代理服务,提供歌曲搜索、解析、下载、歌单/专辑详情等功能,附带用户系统、API Key 管理、后台统计面板。
- 歌曲信息获取(URL、歌词、详情)
- 音乐搜索
- 歌单 / 专辑详情解析
- 音乐下载(支持多音质)
- 音频流代理(解决跨域播放)
- 用户注册 / 登录系统
- API Key 管理(创建、启用/禁用、重置)
- 管理后台(调用统计、用户管理、公告管理、健康监控)
- 健康监控 + 邮件通知
- 代理池支持
- 兼容旧版
api.php格式(Scratch 扩展)
- Python 3.6+
- Flask
- MySQL / MariaDB
- AES 加密(网易云 eapi 接口)
- WebSocket(KukeChat Bot)
git clone https://github.com/your-username/MusicAPI.git
cd MusicAPIpip install -r requirements.txt复制 .env.example 为 .env 并填入实际配置:
cp .env.example .env编辑 .env 文件,必须填写以下配置:
| 变量 | 说明 |
|---|---|
DB_HOST |
数据库地址 |
DB_USER |
数据库用户名 |
DB_PASSWORD |
数据库密码 |
DB_NAME |
数据库名称 |
SECRET_KEY |
Flask 密钥(随机字符串) |
ADMIN_PASSWORD |
管理后台登录密码 |
CREATE DATABASE IF NOT EXISTS musicapi DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE musicapi;
CREATE TABLE IF NOT EXISTS api_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
endpoint VARCHAR(500) NOT NULL,
method VARCHAR(10) NOT NULL,
ip_address VARCHAR(45) NOT NULL,
user_agent TEXT,
status_code INT DEFAULT 200,
user_id INT NULL,
api_key_id INT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
INDEX idx_created_at (created_at),
INDEX idx_endpoint (endpoint(255)),
INDEX idx_user_id (user_id),
INDEX idx_api_key_id (api_key_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS daily_stats (
stat_date DATE PRIMARY KEY,
total_calls INT DEFAULT 0,
unique_visitors INT DEFAULT 0,
downloads INT DEFAULT 0,
searches INT DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;启动时
db_helper.py会自动创建users、api_keys、announcements、health_checks、health_subscribers表。
将你的网易云音乐 Cookie 写入 cookie.txt 文件(一行字符串格式):
MUSIC_U=xxx; __csrf=xxx; os=pc; appver=8.9.70;
可通过
cookie_manager.py扫码登录获取 Cookie。
python main.py服务默认监听 http://0.0.0.0:5000。
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 main:app# /etc/systemd/system/musicapi.service
[Unit]
Description=MusicAPI Service
After=network.target
[Service]
Type=simple
User=www
WorkingDirectory=/path/to/MusicAPI
EnvironmentFile=/path/to/MusicAPI/.env
ExecStart=/usr/bin/python3 /path/to/MusicAPI/main.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.targetsystemctl daemon-reload
systemctl enable --now musicapiMusicAPI/
├── main.py # Flask 主应用(路由、认证、中间件)
├── config.py # 配置管理(从环境变量读取)
├── db_helper.py # 数据库操作层
├── music_api.py # 网易云 API 封装(加密、请求)
├── music_downloader.py # 音乐下载器(标签写入、多格式)
├── cookie_manager.py # Cookie 管理(读写、验证、扫描登录)
├── kukebot.py # KukeChat 聊天机器人(可选)
├── requirements.txt # Python 依赖
├── .env.example # 环境变量模板
├── .gitignore
├── cookie.txt # 网易云 Cookie(需自行配置)
├── API.md # API 接口文档
├── templates/ # Jinja2 模板
│ ├── index.html # 首页
│ ├── docs.html # API 在线文档
│ ├── user_home.html # 用户平台首页
│ ├── user_dashboard.html # 用户控制台
│ ├── admin_login.html # 管理后台登录
│ ├── admin_dashboard.html# 管理后台仪表盘
│ └── health_monitor.html # 健康监控页面
└── downloads/ # 音乐下载目录(gitignore)
详见 API.md
| 路径 | 方法 | 说明 | 认证 |
|---|---|---|---|
/ |
GET | 首页 | 无 |
/health |
GET | 健康检查 | 无 |
/song |
GET/POST | 歌曲信息 | API Key |
/search |
GET/POST | 音乐搜索 | API Key |
/playlist |
GET/POST | 歌单详情 | API Key |
/album |
GET/POST | 专辑详情 | API Key |
/download |
GET/POST | 音乐下载 | API Key |
/stream |
GET/POST | 音频流代理 | API Key |
/api/stats |
GET | 公开统计 | API Key |
/api/info |
GET | API 信息 | API Key |
/user/register |
POST | 用户注册 | 无 |
/user/login |
POST | 用户登录 | 无 |
/user/me |
GET | 当前用户信息 | Session |
/user/stats |
GET | 用户统计 | Session |
/user/keys |
GET | 用户 API Keys | Session |
/admin |
GET | 管理后台 | 密码 |
所有 API 接口均需携带 API Key,支持两种方式:
# 方式 1:Authorization 请求头(推荐)
curl -H "Authorization: Bearer YOUR_API_KEY" https://your-domain/song?id=185668
# 方式 2:URL 参数
curl "https://your-domain/song?id=185668&api_key=YOUR_API_KEY"访问 /admin,输入管理员密码登录后可查看:
- 总体调用统计
- 每日 / 每小时趋势
- 接口分布排行
- 用户管理
- API Key 管理
- 公告管理
- 健康监控
访问 /user,注册登录后可:
- 管理个人 API Keys(创建、启用/禁用、重置、删除)
- 查看个人调用统计(总调用、今日调用、端点详情)
- 每日调用趋势图
- 每 15 分钟自动检测服务健康状态
- 状态变化时通过邮件通知订阅者
- 访问
/health/monitor查看监控面板
- Cookie 有效期:网易云 Cookie 有时效性,失效后需重新获取
- 音质限制:高音质(lossless/hires)需要黑胶 VIP 账号 Cookie
- 版权限制:部分歌曲可能因版权原因无法获取播放链接
- 请求频率:建议控制请求频率,避免触发网易云反爬机制
MIT