QQ音乐搜索
QQ音乐搜索,点歌只是一部分
API接口稳定可用 · 支持高并发请求
总调用次数: 加载中...
API接口信息
接口地址
https://yutangxiaowu.cn:3015/api/qmusic/search
请求方法
GET
请求参数
| 参数名 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| key | string | 必填 | QQ音乐搜索关键词 |
| t | number | 可选 |
0
单曲
2
歌单
7
歌词
8
专辑
9
歌手
12
mv
|
| pageNo | string | 可选 | 返回第几页内容 |
| pageSize | string | 可选 | 返回每页内容数量 |
响应格式
JSON
响应示例(根据t值变化)
{
"result": 100,
"data": {
"list": [
{
"albumid": 29699930, // 专辑ID
"albummid": "001cDTUl3t7mhW", // 专辑媒体ID
"albumname": "等不来花开", // 专辑名称
"albumname_hilight": "等不来花开", // 高亮显示的专辑名称
"songid": 370416389, // 歌曲ID
"songmid": "003ixYUI2lWxXJ", // 歌曲媒体ID
"songname": "等不来花开", // 歌曲名称
"singer": [ // 歌手信息数组
{
"id": 8429584,
"mid": "001Hvkjy0MJQFG",
"name": "兰音Reine"
}
],
"interval": 139, // 歌曲时长(秒)
"size128": 2235455, // 128kbps音质文件大小
"size320": 5588324, // 320kbps音质文件大小
"sizeflac": 32517688, // FLAC无损音质文件大小
"pay": { // 付费信息
"payplay": 1, // 是否需要付费播放
"paydownload": 1 // 是否需要付费下载
}
}
],
"pageNo": 2, // 当前页码
"pageSize": 2, // 每页数量
"total": 600, // 总数量
"key": "兰音", // 搜索关键词
"t": "0", // 搜索类型
"type": "song" // 结果类型
}
}
代码示例
JavaScript (Axios)
const axios = require('axios');
const url = 'https://yutangxiaowu.cn:3015/api/qmusic/search';
// t=0:单曲, t=2:歌单, t=7:歌词, t=8:专辑, t=9:歌手, t=12:mv
axios.get(url, {
params: {
key: '兰音', // 搜索关键词
t: 0, // 搜索类型
pageNo: 1, // 页码
pageSize: 10 // 每页数量
}
})
.then(response => {
console.log('搜索结果:', response.data);
// 根据不同的t值处理不同结构的返回数据
if (response.data.result === 100) {
switch(response.data.data.t) {
case '0':
console.log('单曲列表:', response.data.data.list);
break;
case '2':
console.log('歌单列表:', response.data.data.list);
break;
case '7':
console.log('歌词列表:', response.data.data.list);
break;
// 其他类型的处理
}
}
})
.catch(error => {
console.error('请求失败:', error.message);
});
JavaScript (Fetch)
const apiUrl = 'https://yutangxiaowu.cn:3015/api/qmusic/search';
const searchKey = '兰音';
const searchType = 0; // t=0:单曲, t=2:歌单, t=7:歌词, t=8:专辑, t=9:歌手, t=12:mv
// 构建查询参数
const params = new URLSearchParams({
key: searchKey,
t: searchType,
pageNo: 1,
pageSize: 10
});
fetch(`${apiUrl}?${params}`)
.then(response => response.json())
.then(data => {
console.log('搜索结果:', data);
if (data.result === 100) {
// 根据返回的类型处理数据
console.log(`获取到${data.data.total}条${data.data.type}结果`);
console.log('列表数据:', data.data.list);
}
})
.catch(error => console.error('请求失败:', error));
Python
import requests
api_url = 'https://yutangxiaowu.cn:3015/api/qmusic/search'
params = {
'key': '兰音', # 搜索关键词
't': 0, # 搜索类型:0-单曲,2-歌单,7-歌词,8-专辑,9-歌手,12-mv
'pageNo': 1, # 页码
'pageSize': 10 # 每页数量
}
response = requests.get(api_url, params=params)
data = response.json()
if data.get('result') == 100:
print(f"搜索类型: {data['data']['type']}")
print(f"总数量: {data['data']['total']}")
print(f"当前页数据: {data['data']['list']}")
else:
print(f"请求失败: {data}")
PHP
$apiUrl = 'https://yutangxiaowu.cn:3015/api/qmusic/search';
$params = [
'key' => '兰音', // 搜索关键词
't' => 0, // 搜索类型:0-单曲,2-歌单,7-歌词,8-专辑,9-歌手,12-mv
'pageNo' => 1, // 页码
'pageSize' => 10 // 每页数量
];
$url = $apiUrl . '?' . http_build_query($params);
$response = file_get_contents($url);
$data = json_decode($response, true);
if ($data['result'] == 100) {
echo "搜索类型: " . $data['data']['type'] . "\n";
echo "总数量: " . $data['data']['total'] . "\n";
print_r($data['data']['list']);
} else {
echo "请求失败: " . json_encode($data);
}
Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
public class QQMusicApi {
public static void main(String[] args) throws Exception {
String apiUrl = "https://yutangxiaowu.cn:3015/api/qmusic/search";
// 构建请求参数
Map params = new HashMap<>();
params.put("key", "兰音"); // 搜索关键词
params.put("t", "0"); // 搜索类型:0-单曲,2-歌单,7-歌词,8-专辑,9-歌手,12-mv
params.put("pageNo", "1"); // 页码
params.put("pageSize", "10"); // 每页数量
// 拼接参数
StringBuilder query = new StringBuilder();
for (Map.Entry entry : params.entrySet()) {
if (query.length() > 0) {
query.append("&");
}
query.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8))
.append("=")
.append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8));
}
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(apiUrl + "?" + query.toString()))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(response -> {
System.out.println("搜索结果: " + response);
// 可以使用JSON解析库(如Jackson、Gson)解析响应
})
.join();
}
}
C#
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;
class Program {
static async Task Main() {
string apiUrl = "https://yutangxiaowu.cn:3015/api/qmusic/search";
// 构建查询参数
var parameters = new Dictionary {
{ "key", "兰音" }, // 搜索关键词
{ "t", "0" }, // 搜索类型:0-单曲,2-歌单,7-歌词,8-专辑,9-歌手,12-mv
{ "pageNo", "1" }, // 页码
{ "pageSize", "10" } // 每页数量
};
using var client = new HttpClient();
var content = new FormUrlEncodedContent(parameters);
string queryString = await content.ReadAsStringAsync();
string response = await client.GetStringAsync(
$"{apiUrl}?{queryString}"
);
Console.WriteLine("搜索结果: " + response);
// 可以使用Newtonsoft.Json解析JSON响应
}
}
Ruby
require 'net/http'
require 'uri'
require 'json'
api_url = 'https://yutangxiaowu.cn:3015/api/qmusic/search'
# 构建请求参数
params = {
key: '兰音', # 搜索关键词
t: 0, # 搜索类型:0-单曲,2-歌单,7-歌词,8-专辑,9-歌手,12-mv
pageNo: 1, # 页码
pageSize: 10 # 每页数量
}
uri = URI.parse(api_url)
uri.query = URI.encode_www_form(params)
response = Net::HTTP.get_response(uri)
data = JSON.parse(response.body)
if data['result'] == 100
puts "搜索类型: #{data['data']['type']}"
puts "总数量: #{data['data']['total']}"
puts "列表数据: #{data['data']['list'].inspect}"
else
puts "请求失败: #{data}"
end
Go
package main
import (
"fmt"
"net/http"
"net/url"
"io/ioutil"
"encoding/json"
)
func main() {
apiUrl := "https://yutangxiaowu.cn:3015/api/qmusic/search"
// 构建请求参数
params := url.Values{}
params.Add("key", "兰音") // 搜索关键词
params.Add("t", "0") // 搜索类型:0-单曲,2-歌单,7-歌词,8-专辑,9-歌手,12-mv
params.Add("pageNo", "1") // 页码
params.Add("pageSize", "10") // 每页数量
resp, err := http.Get(apiUrl + "?" + params.Encode())
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
// 解析JSON响应
var result map[string]interface{}
json.Unmarshal(body, &result)
if result["result"] == float64(100) {
data := result["data"].(map[string]interface{})
fmt.Printf("搜索类型: %s\n", data["type"])
fmt.Printf("总数量: %v\n", data["total"])
fmt.Printf("列表数据: %v\n", data["list"])
} else {
fmt.Printf("请求失败: %s\n", body)
}
}
Swift
import Foundation
let apiUrl = "https://yutangxiaowu.cn:3015/api/qmusic/search"
let searchKey = "兰音"
let searchType = 0 // 搜索类型:0-单曲,2-歌单,7-歌词,8-专辑,9-歌手,12-mv
// 构建查询参数
var components = URLComponents(string: apiUrl)!
components.queryItems = [
URLQueryItem(name: "key", value: searchKey),
URLQueryItem(name: "t", value: "\(searchType)"),
URLQueryItem(name: "pageNo", value: "1"),
URLQueryItem(name: "pageSize", value: "10")
]
if let url = components.url {
let task = URLSession.shared.dataTask(with: url) {
data, response, error in
if let data = data {
if let jsonString = String(data: data, encoding: .utf8) {
print("搜索结果: \(jsonString)")
// 可以使用JSONSerialization解析响应
}
}
}
task.resume()
}
Kotlin
import java.net.URLEncoder
import java.net.URL
import com.google.gson.Gson
data class ApiResponse(
val result: Int,
val data: Data?
)
data class Data(
val list: List,
val pageNo: Int,
val pageSize: Int,
val total: Int,
val key: String,
val t: String,
val type: String
)
fun main() {
val apiUrl = "https://yutangxiaowu.cn:3015/api/qmusic/search"
val key = "兰音"
val t = 0 // 搜索类型:0-单曲,2-歌单,7-歌词,8-专辑,9-歌手,12-mv
// 构建查询参数
val params = listOf(
"key=${URLEncoder.encode(key, "UTF-8")}",
"t=$t",
"pageNo=1",
"pageSize=10"
).joinToString("&")
val url = URL("$apiUrl?$params")
val response = url.readText()
// 解析JSON响应
val gson = Gson()
val apiResponse = gson.fromJson(response, ApiResponse::class.java)
if (apiResponse.result == 100 && apiResponse.data != null) {
println("搜索类型: ${apiResponse.data.type}")
println("总数量: ${apiResponse.data.total}")
println("列表数据: ${apiResponse.data.list}")
} else {
println("请求失败: $response")
}
}