本次教程会加上 Alist 的安装教程,接口 Token 也不需要手动󠄐󠄹󠅀󠄪󠄥󠄢󠄞󠄡󠄤󠄞󠄢󠄠󠄥󠄞󠄡󠄣󠄠󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄐󠄹󠅀󠄪󠄥󠄢󠄞󠄡󠄤󠄞󠄢󠄠󠄥󠄞󠄡󠄣󠄠󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄤󠄣󠄩󠄦󠄨󠄡󠄥󠄤󠄬󠅒󠅢󠄟󠄮󠇕󠅸󠆍󠇗󠆖󠆫󠇕󠅽󠆊󠇕󠆞󠆒󠄐󠇗󠅹󠅸󠇖󠆍󠅳󠇖󠅹󠅰󠇖󠆌󠅹󠄬󠄐󠄹󠅀󠄪󠄥󠄢󠄞󠄡󠄤󠄞󠄢󠄠󠄥󠄞󠄡󠄣󠄠󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄤󠄣󠄩󠄦󠄨󠄡󠄥󠄤󠄬󠅒󠅢󠄟󠄮󠇕󠅸󠆍󠇗󠆖󠆫󠇕󠅽󠆊󠇕󠆞󠆒󠄐󠇗󠅹󠅸󠇖󠆍󠅳󠇖󠅹󠅰󠇖󠆌󠅹󠄬󠅒󠅢󠄟󠄮󠅒󠅢󠄟󠄮󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄤󠄣󠄩󠄦󠄨󠄡󠄥󠄤󠄬󠅒󠅢󠄟󠄮󠇕󠅸󠄐󠄹󠅀󠄪󠄥󠄢󠄞󠄡󠄤󠄞󠄢󠄠󠄥󠄞󠄡󠄣󠄠󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄤󠄣󠄩󠄦󠄨󠄡󠄥󠄤󠄬󠅒󠅢󠄟󠄮󠇕󠅸󠆍󠇗󠆖󠆫󠇕󠅽󠆊󠇕󠆞󠆒󠄐󠇗󠅹󠅸󠇖󠆍󠅳󠇖󠅹󠅰󠇖󠆌󠅹󠄬󠅒󠅢󠄟󠄮󠆍󠇗󠆖󠆫󠇕󠅽󠆊󠇕󠄐󠄹󠅀󠄪󠄥󠄢󠄞󠄡󠄤󠄞󠄢󠄠󠄥󠄞󠄡󠄣󠄠󠄬󠅒󠅢󠄟󠄮󠄐󠅅󠄹󠄴󠄪󠄾󠅟󠅤󠄐󠄼󠅟󠅗󠅙󠅞󠄬󠅒󠅢󠄟󠄮󠅄󠅙󠅝󠅕󠄪󠄡󠄧󠄤󠄣󠄩󠄦󠄨󠄡󠄥󠄤󠄬󠅒󠅢󠄟󠄮󠇕󠅸󠆍󠇗󠆖󠆫󠇕󠅽󠆊󠇕󠆞󠆒󠄐󠇗󠅹󠅸󠇖󠆍󠅳󠇖󠅹󠅰󠇖󠆌󠅹󠄬󠅒󠅢󠄟󠄮󠆞󠆒󠄐󠇗󠅹󠅸󠇖󠆍󠅳󠇖󠅹󠅰󠇖󠆌󠅹󠄬󠅒󠅢󠄟󠄮获取和手动填写。
Alist 安装教程
下载 Alist 安装包,点击下载,上传服务器随便一个文件夹内,也可以在宝塔面板新建一个网站,上传到你域名那个文件夹里。
安装命令
# 解压下载的文件,得到可执行文件:
tar -zxvf alist-xxxx.tar.gz
# 授予程序执行权限:
chmod +x alist
# 运行程序
./alist server
密码更改
# 高于 v3.25.0 版本
# 随机生成一个密码
./alist admin random
# 手动设置一个密码 `NEW_PASSWORD`是指你需要设置的密码
./alist admin set NEW_PASSWORD
添加进程守护
此时上面步骤安装完了,宝塔面板软件商店下载进程守护,怎么填写,启动命令填 alist 文件夹名称/alist server,进程目录同样也是 Alist 文件夹目录
反向代理
这个步骤非常关键,宝塔面板,网站打开你的域名,找到反向代理 目标 url http://127.0.0.1:5244,这个时候你要去服务器防火墙/安全组去放开 5244 端口,放开了就可以成功访问 Alist 了。
代码部分
Token 代码改成 Json 输出以便随机视频接口更好的获取 Token
<?php
header('Content-Type: application/json');
$url = 'http://你的 Alist 域名/api/auth/login';
$data = json_encode([
'username' => 'Alist 用户名',
'password' => 'Alist 密码'
]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode == 200) {
echo $response;
} else {
echo json_encode([
'error' => true,
'message' => "请求失败,HTTP 状态码: $httpCode"
]);
}
视频代码
<?php
header('Content-Type: application/json');
// 配置部分
$config = [
'alist_url' => 'http(s)://Alist 域名',
'token_api' => 'https://域名 token.php',
'target_folder' => '文件夹称',
'video_extensions' => ['mp4', 'mkv', 'avi', 'mov', 'flv', 'wmv', 'webm']
];
/**
* 从 API 获取 AList token
*/
function fetchAlistToken($tokenApiUrl) {
$response = file_get_contents($tokenApiUrl);
$result = json_decode($response, true);
if (!$result || $result['code'] !== 200 || empty($result['data']['token'])) {
throw new Exception('Failed to fetch AList token');
}
return $result['data']['token'];
}
/**
* 生成直链
*/
function generateUrl($alistUrl, $filePath) {
return rtrim($alistUrl, '/') . '/d' . $filePath;
}
/**
* 获取文件列表
*/
function getAlistFiles($path, $alistUrl, $alistToken) {
$url = $alistUrl . '/api/fs/list';
$options = [
'http' => [
'method' => 'POST',
'header' => [
"Authorization: " . $alistToken,
"Content-Type: application/json"
],
'content' => json_encode(['path' => $path])
]
];
$response = file_get_contents($url, false, stream_context_create($options));
return json_decode($response, true);
}
/**
* 获取视频文件列表
*/
function getTargetVideos($config) {
// 首先获取 token
$alistToken = fetchAlistToken($config['token_api']);
// 获取文件列表
$result = getAlistFiles($config['target_folder'], $config['alist_url'], $alistToken);
if ($result['code'] !== 200) {
return ['error' => $result['message'] ?? '请求失败'];
}
$videoFiles = [];
foreach ($result['data']['content'] as $file) {
if ($file['is_dir'] || !isset($file['name'])) continue;
$ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
if (in_array($ext, $config['video_extensions'])) {
$filePath = $file['path'] ?? $config['target_folder'] . '/' . $file['name'];
$videoFiles[] = [
'name' => $file['name'],
'path' => $filePath,
'size' => $file['size'] ?? 0,
'modified' => $file['modified'] ?? '',
'url' => generateUrl($config['alist_url'], $filePath),
'thumbnail' => generateUrl($config['alist_url'], $filePath) . '?thumbnail=true'
];
}
}
return $videoFiles;
}
// 主逻辑
try {
$videos = getTargetVideos($config);
if (isset($videos['error'])) {
throw new Exception($videos['error']);
}
if (empty($videos)) {
throw new Exception('未找到视频文件');
}
$randomVideo = $videos[array_rand($videos)];
echo json_encode([
'success' => true,
'data' => $randomVideo,
'total' => count($videos)
], JSON_UNESCAPED_UNICODE);
} catch (Exception $e) {
http_response_code(500);
echo json_encode([
'success' => false,
'error' => $e->getMessage()
], JSON_UNESCAPED_UNICODE);
}
?>
好了教程到此结束,有疑问可以在评论区问我或者在初离群里找我 星海.
没有回复内容