<?php
error_reporting(0); // 抑制所有错误信息
require_once('config.php');// 引入配置文件
header('content-type:application/json');// 设置响应头为 JSON 格式
// 定义 Redis 开关
define('Redis_on', false);Rs_(Redis_on);//限制访问次数开关（开=true 关=false）

$proxy = [
    'domin' => '',// 代理 IP 接口（'domin' => '' 为空不使用代理）
    'Py' => 3,//（如果代理ip请求失败，循环获取代理ip请求的最大次数。）
    'Pr' => 1,//代理ip循环结束请求失败，是否使用本地服务器请求(使用本地请求 'Py'=>1 不使用本地请求 'Py'=>0 )
    'Ptime' => 300,//代理ip时效（单位：秒）
];

$paramsconfig = [
    'ip'=>'',//伪装来源 IP 地址
    'httpheader'=>'',//设置请求头部信息
    'ref'=>'',//伪装网页来源 URL
    'ua'=>'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36',//模拟用户浏览器信息
    'header'=>'',//为空不返回 header 部分
    'fields'=>'',//POST提交数据
    'cookie'=>'',//cookies
    'proxy'=>'',//代理服务器地址 host:post的格式
    'proxy_userpwd'=>''//http代理认证帐号，username:password的格式
    ];

// Redis 配置
$redisConfig = [
    'host' => '127.0.0.1',
    'port' => 6379,
    'pass' => '',
    'limit' => 10,//访问次数限制--10次
    'time' => 30,//访问时间限制--60秒
    'ip' => getip(),
];

// 特征码数组
$lzgz = [// 量子特征码
    'lz-', 'cdnlz', 'lzcdn',
];
$ffgz = [// 非凡特征码
    'ffzy','play'
];
$bfgz = [// 暴风特征码
    'cdnbf','bbffcdn','bbffvip','bvvvvvvv','b8bf.com'
];

// 获取 URL 参数
$m3u8Url = $_GET['url']?? '';
if (empty($m3u8Url) || strpos($m3u8Url,'.m3u8') == false) {
    die(json_encode(['code' => 400, 'msg' => '请输入量子、非凡、暴风、链接地址'], 456));
}

// 根据特征码确定缓存目录
if (is_exist($m3u8Url, $lzgz)) {
    $cacheDirectory = '/DADCache/LZ/';
} elseif (is_exist($m3u8Url, $ffgz)) {
    $cacheDirectory = '/DADCache/Ff/';
} elseif (is_exist($m3u8Url, $bfgz)) {
    $cacheDirectory = '/DADCache/Bf/';
}

if (empty($cacheDirectory)) {
    die(json_encode(['code' => 404, 'msg' => '解析失败'], 456));
}

// 如果开启 Redis，处理访问次数限制
if (Redis_on) {
    $redisk = redis($redisConfig['host'], $redisConfig['port'], $redisConfig['pass'], $redisConfig['limit'], $redisConfig['time'], $redisConfig['ip']);
    if (!empty($redisk)) {
        $redisk_count = ['count' => $redisConfig['time'].' 秒内限制访问 '.$redisConfig['limit'].' 次，第 '.$redisk['count'].' 次请求'];
        if ($redisk['count'] > $redisConfig['limit']) {
            die(json_encode(['code' => 201, 'msg' => '请求太频繁，请 '.$redisk['ttl'].' 秒后再试', 'ip' => $redisConfig['ip'], 'UA' => $_SERVER['HTTP_USER_AGENT']], 456));
        }
    }
}

// 定义缓存文件路径
define('HCFILE',$_SERVER['DOCUMENT_ROOT'].$cacheDirectory);
// define('HCFILE', __DIR__.$cacheDirectory);
// $mulu = str_replace($_SERVER["DOCUMENT_ROOT"], "", HCFILE);
$MD5 = md5($m3u8Url).'.m3u8';
$filename = HCFILE.$MD5;

// 如果缓存文件存在，直接返回结果
if (is_dir(HCFILE) && file_exists($filename)) {
    $responseArray = [
        'code' => 200,
        'msg' => '缓存',
        'domain'=>'去广告源码下载 bigon.cn',
        'type'=>'m3u8',
        'url'=>domain().$cacheDirectory.$MD5,
        //'url'=>domain().$mulu.$MD5,
        'ip'=>$redisConfig['ip']
    ];
    if (isset($redisk_count)) {
        $responseArray = array_merge($responseArray, $redisk_count);
    }
    die(json_encode($responseArray, 456));
} else {
    // 如果目录不存在，创建目录
    if (!file_exists(HCFILE)) {
        mkdir(HCFILE, 0777, true);
    }

    // 获取数据并处理结果
    $data = BG($m3u8Url);
    if ($data == 200) {
        $responseArray = [
            'code' => 200,
            'msg' => '成功解析',
            'domain'=>'去广告源码下载 bigon.cn',
            'type'=>'m3u8',
            'url'=>domain().$cacheDirectory.$MD5,
            //'url'=>domain().$mulu.$MD5,
            'ip'=>$redisConfig['ip']
        ];
        if (isset($redisk_count)) {
            $responseArray = array_merge($responseArray, $redisk_count);
        }
        die(json_encode($responseArray, 456));
    } elseif ($data == 500) {
        die(json_encode(['code' => 500, 'msg' => '视频数据 500 错误！', 'title' => 'Bigon_Cn'], 456));
    } elseif ($data == 404) {
        die(json_encode(['code' => 404, 'msg' => '视频数据 404 错误！', 'title' => 'Bigon_Cn'], 456));
    } else {
        die(json_encode(['code' => 403, 'msg' => '未知错误！', 'title' => 'Bigon_Cn'], 456));
    }
}
?>