国庆节10月1日
--


介绍如何使用Meting-API

多平台音乐 API 代理服务,支持网易云、QQ音乐、酷狗、百度、酷我。
| 项目 | 说明 |
|---|---|
| API 地址 | https://你的域名/api |
| 请求方式 | GET |
| 响应格式 | JSON / 重定向 / 纯文本 |
| 鉴权方式 | HMAC-SHA1 Token |
| 平台 | server 参数 | 说明 |
|---|---|---|
| 网易云音乐 | netease | 功能完整 |
| QQ音乐 | tencent | 功能完整 |
| 酷狗音乐 | kugou | 功能完整 |
| 百度音乐 | baidu | 功能完整 |
| 酷我音乐 | kuwo | 功能完整 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
server | string | 是 | 音乐平台 |
type | string | 是 | 操作类型 |
id | string | 是 | 资源 ID 或搜索关键词 |
auth | string | 条件 | 鉴权令牌(敏感操作需要) |
| type | 说明 | 需要鉴权 | 返回格式 |
|---|---|---|---|
search | 搜索歌曲 | ❌ | JSON 数组 |
song | 获取歌曲详情 | ❌ | JSON 数组 |
album | 获取专辑 | ❌ | JSON 数组 |
artist | 获取歌手作品 | ❌ | JSON 数组 |
playlist | 获取歌单 | ❌ | JSON 数组 |
lrc | 获取歌词 | ✅ | LRC 纯文本 |
url | 获取播放链接 | ✅ | 302 重定向 |
pic | 获取封面图片 | ✅ | 302 重定向 |
1# 网易云搜索2curl "https://你的域名/api?server=netease&type=search&id=周杰伦"3
4# QQ音乐搜索5curl "https://你的域名/api?server=tencent&type=search&id=周杰伦"6
7# 酷狗搜索8curl "https://你的域名/api?server=kugou&type=search&id=稻香"响应示例:
1[2 {3 "title": "稻香",4 "author": "周杰伦",5 "url": "https://你的域名/api?server=netease&type=url&id=185790&auth=xxx",6 "pic": "https://你的域名/api?server=netease&type=pic&id=109951171358446171&auth=xxx",7 "lrc": "https://你的域名/api?server=netease&type=lrc&id=185790&auth=xxx"8 }9]1curl "https://你的域名/api?server=netease&type=lrc&id=185790&auth=你的token"响应示例(LRC 格式):
1[00:00.000] 稻香 - 周杰伦2[00:01.000] 词:周杰伦3[00:02.000] 曲:周杰伦4[00:18.500] 对这个世界如果你有太多的抱怨5[00:21.500] 跌倒了就不敢继续往前走1curl -L "https://你的域名/api?server=netease&type=url&id=185790&auth=你的token"说明: 会返回 302 重定向到实际音乐文件地址。
1curl -L "https://你的域名/api?server=netease&type=pic&id=109951171358446171&auth=你的token"说明: 会返回 302 重定向到实际图片地址。
1curl "https://你的域名/api?server=netease&type=playlist&id=24381616"1curl "https://你的域名/api?server=netease&type=album&id=34819136"1curl "https://你的域名/api?server=netease&type=artist&id=6452"敏感操作(lrc、url、pic)需要提供鉴权 Token。
1token = HMAC-SHA1(secret, server + type + id)1const crypto = require('crypto');2
3function generateToken(server, type, id, secret = '你的密钥') {4 const message = `${server}${type}${id}`;5 return crypto.createHmac('sha1', secret).update(message).digest('hex');6}7
8// 示例9const token = generateToken('netease', 'url', '185790');10console.log(token);1import hmac2import hashlib3
4def generate_token(server, type, id, secret='你的密钥'):5 message = f'{server}{type}{id}'6 return hmac.new(secret.encode(), message.encode(), hashlib.sha1).hexdigest()7
8# 示例9token = generate_token('netease', 'url', '185790')10print(token)1<?php2function generateToken($server, $type, $id, $secret = '你的密钥') {3 $message = $server . $type . $id;4 return hash_hmac('sha1', $message, $secret);5}6
7// 示例8$token = generateToken('netease', 'url', '185790');9echo $token;10?>1<!DOCTYPE html>2<html>3<head>4 <title>音乐播放器</title>5</head>6<body>7 <input type="text" id="keyword" placeholder="搜索歌曲">8 <button onclick="search()">搜索</button>9 <div id="results"></div>10 <audio id="player" controls></audio>11
12 <script>13 const API = 'https://你的域名/api';14
15 async function search() {16 const keyword = document.getElementById('keyword').value;17 const res = await fetch(`${API}?server=netease&type=search&id=${keyword}`);18 const songs = await res.json();19
20 const html = songs.map((song, i) => `21 <div onclick="play('${song.url}', '${song.lrc}')">22 ${i + 1}. ${song.title} - ${song.author}23 </div>24 `).join('');25
26 document.getElementById('results').innerHTML = html;27 }28
29 async function play(url, lrc) {30 const player = document.getElementById('player');31 player.src = url;32 player.play();33
34 // 获取歌词35 const res = await fetch(lrc);36 const text = await res.text();37 console.log('歌词:', text);38 }39 </script>40</body>41</html>1<template>2 <div>3 <input v-model="keyword" @keyup.enter="search" placeholder="搜索歌曲">4 <button @click="search">搜索</button>5
6 <div v-for="(song, index) in songs" :key="index" @click="play(song)">7 {{ index + 1 }}. {{ song.title }} - {{ song.author }}8 </div>9
10 <audio ref="player" controls></audio>11 </div>12</template>13
14<script>15export default {16 data() {17 return {18 API: 'https://你的域名/api',19 keyword: '',20 songs: []21 }22 },23 methods: {24 async search() {25 const res = await fetch(`${this.API}?server=netease&type=search&id=${this.keyword}`);26 this.songs = await res.json();27 },28 async play(song) {29 this.$refs.player.src = song.url;30 this.$refs.player.play();31 }32 }33}34</script>| 状态码 | 说明 |
|---|---|
| 200 | 请求成功 |
| 302 | 重定向到资源(url/pic 类型) |
| 400 | 参数错误 |
| 401 | 鉴权失败(Token 无效) |
| 404 | 资源不存在 |
| 500 | 上游 API 调用失败 |
x-cache 显示缓存状态建议控制请求频率,避免被上游平台限流:
1// 添加延迟2function delay(ms) {3 return new Promise(resolve => setTimeout(resolve, ms));4}5
6// 使用7await search('歌曲1');8await delay(1000); // 等待 1 秒9await search('歌曲2');API 已配置 CORS,支持跨域请求。
确保:
METING_TOKEN 一致server + type + id不同平台版权不同,可以:
歌词是 UTF-8 编码,确保:
如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"所有的相遇都是久别重逢。"—— 未知


