上传文件至 /

This commit is contained in:
2025-09-24 14:14:45 +00:00
parent df1d207f36
commit acf704a5e1
4 changed files with 636 additions and 0 deletions

278
api.php Normal file
View File

@@ -0,0 +1,278 @@
<?php
header('Content-Type: application/json; charset=utf-8');
// 允许跨域请求(方便其他网站调用)
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET");
// 数据库连接信息
$servername = "localhost";
$username = "a1sax1m9i";
$password = "a1sax1m9i";
$dbname = "a1sax1m9i";
// 创建数据库连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die(json_encode(array(
"success" => false,
"message" => "数据库连接失败: " . $conn->connect_error
)));
}
// 设置数据库连接字符集
$conn->set_charset("utf8mb4");
// 获取硬编码音乐数据
function getHardcodedMusic() {
$musicPath = __DIR__ . '/data/music.php';
// 检查文件是否存在
if (!file_exists($musicPath)) {
return array(
"success" => false,
"message" => "硬编码音乐文件不存在",
"data" => array()
);
}
// 读取硬编码音乐使用require_once并捕获返回值
$hardcodedMusic = require_once $musicPath;
// 验证数据格式
if (is_array($hardcodedMusic)) {
return array(
"success" => true,
"message" => "成功获取硬编码音乐",
"data" => $hardcodedMusic
);
} else {
return array(
"success" => false,
"message" => "硬编码音乐格式不正确",
"data" => array()
);
}
}
// 从数据库获取音乐
function getDatabaseMusic($conn) {
$sql = "SELECT id, title, artist, category, mp3, bvid, duration FROM music";
$result = $conn->query($sql);
$musicList = array();
if ($result && $result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$musicList[] = $row;
}
return array(
"success" => true,
"message" => "成功获取数据库音乐",
"data" => $musicList
);
} else {
return array(
"success" => false,
"message" => "数据库中没有找到音乐数据",
"data" => array()
);
}
}
// 获取所有音乐(合并数据库和硬编码)
function getAllMusic($conn) {
// 获取两种来源的音乐
$dbMusic = getDatabaseMusic($conn);
$hardcodedMusic = getHardcodedMusic();
// 合并音乐列表(去重处理)
$allMusic = array();
$ids = array();
// 添加数据库音乐
foreach ($dbMusic['data'] as $music) {
$id = $music['id'];
if (!in_array($id, $ids)) {
$ids[] = $id;
$allMusic[] = $music;
}
}
// 添加硬编码音乐
foreach ($hardcodedMusic['data'] as $music) {
$id = $music['id'];
if (!in_array($id, $ids)) {
$ids[] = $id;
$allMusic[] = $music;
}
}
return array(
"success" => true,
"message" => "共获取 " . count($allMusic) . " 首音乐(数据库: " . count($dbMusic['data']) . ", 硬编码: " . count($hardcodedMusic['data']) . "",
"data" => $allMusic,
"sources" => array(
"database" => $dbMusic['success'],
"hardcoded" => $hardcodedMusic['success']
)
);
}
// 获取音乐标签(合并数据库和硬编码)
function getMusicTags($conn) {
// 获取所有音乐
$allMusic = getAllMusic($conn);
$tags = array();
if ($allMusic['success']) {
foreach ($allMusic['data'] as $music) {
if (!empty($music['category']) && !in_array($music['category'], $tags)) {
$tags[] = $music['category'];
}
}
}
return array(
"success" => !empty($tags),
"message" => empty($tags) ? "没有找到音乐标签" : "成功获取 " . count($tags) . " 个标签",
"data" => $tags
);
}
// 获取音乐地址(同时检查数据库和硬编码)
/**
* 获取音乐地址(同时检查数据库和硬编码)- 修复版
* 增加了对 SQL 语句准备失败的检查,避免触发 500 错误。
*/
/**
* 获取音乐的分享播放URL
* 直接返回格式为 shanwogou.cn/audio/play.php?play=音乐id 的链接
*/
function getMusicUrl($conn) {
// 1. 验证输入的音乐ID
$musicId = $_GET['id'] ?? '';
if (empty($musicId)) {
return array(
"success" => false,
"message" => "音乐 ID 不能为空"
);
}
// 2. 核心逻辑检查该ID的音乐是否存在于系统中
// 我们不再返回真实MP3地址但需要确认音乐ID是有效的
$musicExists = false;
// 2.1 先检查数据库
$sql = "SELECT id FROM music WHERE id = ?"; // 只需检查ID是否存在
$stmt = $conn->prepare($sql);
if ($stmt) { // 检查prepare是否成功
$stmt->bind_param("s", $musicId);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
$musicExists = true;
}
$stmt->close();
}
// 2.2 如果数据库中不存在,再检查硬编码文件
if (!$musicExists) {
$hardcodedMusic = getHardcodedMusic();
if ($hardcodedMusic['success']) {
foreach ($hardcodedMusic['data'] as $music) {
if ((string)$music['id'] === (string)$musicId) {
$musicExists = true;
break;
}
}
}
}
// 3. 根据检查结果返回响应
if ($musicExists) {
// 如果音乐存在生成并返回分享URL
$shareUrl = "https://shanwogou.cn/audio/play.php?play=" . urlencode($musicId);
return array(
"success" => true,
"data" => $shareUrl,
"source" => "share_link" // 标记来源为分享链接
);
} else {
// 如果音乐不存在,返回错误信息
return array(
"success" => false,
"message" => "没有找到该 ID 的音乐"
);
}
}
function getAnnouncements($conn) {
// 准备SQL查询从announcements表中获取所有记录并按ID倒序排列最新的在前
$sql = "SELECT id, nr, time FROM announcements ORDER BY id DESC";
// 执行查询
$result = $conn->query($sql);
// 初始化一个空数组来存储公告数据
$announcementList = array();
// 检查查询是否成功且有结果
if ($result && $result->num_rows > 0) {
// 循环遍历所有结果行
while ($row = $result->fetch_assoc()) {
// 将每一行公告数据添加到数组中
$announcementList[] = $row;
}
// 返回成功响应,包含公告数据
return array(
"success" => true,
"message" => "成功获取 " . count($announcementList) . " 条公告",
"data" => $announcementList
);
} else {
// 如果查询失败或没有数据,返回失败响应
return array(
"success" => false,
"message" => "没有找到公告数据或查询失败",
"data" => array()
);
}
}
// 处理请求
// 处理请求
$action = $_GET['action'] ?? '';
switch ($action) {
case 'getAllMusic':
$response = getAllMusic($conn);
break;
case 'getMusicTags':
$response = getMusicTags($conn);
break;
case 'getMusicUrl':
$response = getMusicUrl($conn);
break;
// --- 新增部分 ---
case 'getAnnouncements':
$response = getAnnouncements($conn);
break;
// --- 新增结束 ---
default:
$response = array(
"success" => false,
"message" => "无效的操作,请使用 action=getAllMusic、getMusicTags、getMusicUrl 或 getAnnouncements"
);
}
// 输出JSON响应
echo json_encode($response, JSON_UNESCAPED_UNICODE);
// 关闭数据库连接
$conn->close();
?>