技术 Livednow 体育直播合并 m3u 及定时自动更新

mybtjson · 2024年10月29日 · 最后由 maiweixian 回复于 2024年12月14日 · 914 次阅读

简单写了一个小小的脚本,为了省事一键订阅 咪咕 奇艺 腾讯体育

1.创建一个 php 文件名字为 Livednow.php 或者自己随便写个名字主要自己记住即可

  1. 设置定时访问 http://域名/Livednow.php(根据自己的需求设置即可)!

3.订阅地址为 http://域名/aiyayaya_playlist.m3u

4.输出的结果为当前时间前 120 分钟前开始的内容,写入到 m3u

<?php

// 设置时区为Asia/Shanghai
date_default_timezone_set("Asia/Shanghai");

// 获取今天的日期(格式为 MM/DD)和过滤时间戳(当前时间的前120分钟)
$today_date = date("m/d");
$filterTime = strtotime("-120 minutes");

// 定义URL链接,每个链接有一个分类名称
$urls = [
    "咪咕体育" => "XXXXXXXXXXXXXXXXXXXX",
    "奇艺体育" => "XXXXXXXXXXXXXXXXXXXX",
    "腾讯体育" => "XXXXXXXXXXXXXXXXXXXX"
];

// 获取URL内容的函数
function getUrlContent($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36");
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

// 初始化M3U内容
$m3uContent = "#EXTM3U\n\n";

// 遍历每个URL并获取数据
foreach ($urls as $category => $url) {
    $response = getUrlContent($url);

    if ($response === FALSE) {
        echo "无法获取 $category 的数据。\n";
        continue;
    }

    $m3uContent .= "\n#------ $category 分类开始 ------\n\n";

    if (strpos($response, '#EXTINF') !== false) {
        $lines = explode("\n", $response);
        $includeLine = false;

        foreach ($lines as $index => $line) {
            // 检查是否是#EXTINF行
            if (strpos($line, '#EXTINF') !== false) {
                // 检查行中的日期和时间信息格式是否为 MM/DD HH:MM
                if (preg_match('/' . preg_quote($today_date, '/') . ' (\d{2}:\d{2})/', $line, $matches)) {
                    $timeString = $matches[1]; // 提取时间字符串
                    $dateTimeString = date('Y') . '-' . date('m') . '-' . date('d') . ' ' . $timeString;
                    $time = strtotime($dateTimeString); // 将日期时间组合转换为时间戳

                    // 比较时间戳,判断是否在过滤时间之内
                    if ($time >= $filterTime) {
                        // 在符合时间条件的行添加 group-title 属性
                        $line = str_replace('#EXTINF:', "#EXTINF:-1 group-title=\"$category\",", $line);
                        $includeLine = true;
                    } else {
                        $includeLine = false;
                    }
                } else {
                    // 如果没有时间信息,默认不包含
                    $includeLine = false;
                }
            }

            // 如果符合条件,输出当前的 #EXTINF 行和下一个 URL 行
            if ($includeLine) {
                $m3uContent .= $line . "\n";

                // 检查下一行是否为URL行,若是则包含
                if (isset($lines[$index + 1]) && strpos($lines[$index + 1], 'http') === 0) {
                    $m3uContent .= $lines[$index + 1] . "\n";
                }
            }
        }
    } else {
        echo "$category 数据格式不符合预期结构。\n";
    }

    $m3uContent .= "\n#------ $category 分类结束 ------\n";
}

// 将生成的M3U内容写入文件
if (empty(trim($m3uContent))) {
    echo "M3U内容为空,未写入文件。\n";
} else {
    $result = file_put_contents("aiyayaya_playlist.m3u", $m3uContent);
    echo $result !== false ? "M3U文件已生成:aiyayaya_playlist.m3u\n" : "写入文件失败。\n";
}
?>

以下代码可以代理群主的域名(俗称反向代理)在自己服务器创建网站,然后你自己的域名反向代理到https://api.livednow.org/ (不会问百度怎么反向代理或者问 GPT)

<?php

// 设置时区为 Asia/Shanghai
date_default_timezone_set("Asia/Shanghai");

// 获取今天的日期(格式为 MM/DD)
$today_date = date("m/d");

// 定义URL链接,每个链接有一个分类名称
$urls = [
    "咪咕体育" => "xxxxxx",
    "奇艺体育" => "xxxxxx",
    "腾讯体育" => "xxxxxx"

];

// 获取URL内容的函数
function getUrlContent($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 增加超时时间
    curl_setopt($ch, CURLOPT_USERAGENT, "okhttp/5.2.0");
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

// 初始化M3U内容
$m3uContent = "#EXTM3U\n\n";

// 遍历每个URL并获取数据
foreach ($urls as $category => $url) {
    $response = getUrlContent($url);

    // 检查获取的响应内容
    if ($response === FALSE || empty($response)) {
        continue;
    }

    $m3uContent .= "\n#------ $category 分类开始 ------\n\n";

    // 如果响应包含#EXTINF行,则处理内容
    if (strpos($response, '#EXTINF') !== false) {
        $lines = explode("\n", $response);

        foreach ($lines as $index => $line) {
            // 仅处理包含 #EXTINF 的行
            if (strpos($line, '#EXTINF') !== false) {
                // 添加 group-title 信息
                $m3uContent .= str_replace('#EXTINF:', "#EXTINF:-1 group-title=\"$category\",", $line) . "\n";

                // 收集所有接下来的 URL 直到下一个 #EXTINF 或文件结尾
                for ($urlIndex = $index + 1; $urlIndex < count($lines); $urlIndex++) {
                    $urlLine = $lines[$urlIndex];

                    if (strpos($urlLine, '#EXTINF') === 0) {
                        $index = $urlIndex - 1; // 跳出到下一个 #EXTINF
                        break;
                    }

                    if (strpos($urlLine, 'http') === 0) {
                        // 替换域名 https://api.livednow.org/migu/ 为 https://自己的域名/
                        $modifiedUrlLine = str_replace('https://api.livednow.org/', '这里填写自己反代的域名/', $urlLine);
                        $m3uContent .= $modifiedUrlLine . "\n";
                    }
                }
            }
        }
    }

    $m3uContent .= "\n#------ $category 分类结束 ------\n";
}

// 输出或写入文件
file_put_contents("aiyayaya_playlist.m3u", $m3uContent);
echo "优化的M3U文件已生成:aiyayaya_playlist.m3u\n";

?>

棒!技术贴!谢谢分享!

ABC 回复

😅 后面会分享更多的东西

XXXXXXXXXXXXXX 这个填的是 liveshow 上的地址么?

jordan1226 回复

是你的订阅地址(群主的体育获取的那个订阅地址),这个 php 只是合并了一下而已

请问有腾讯 nba 源吗?

无法获取 咪咕体育 的数据。无法获取 奇艺体育 的数据。无法获取 腾讯体育 的数据。 Warning: file_put_contents(aiyayaya_playlist.m3u): failed to open stream: Permission denied in /var/www/html/Livednow.php on line 77 写入文件失败。

luantran 回复

稍等,我马上更新一下

maiweixian 回复

这个必须有啊

可以加个微信吗

需要 登录 后方可回复, 如果你还没有账号请 注册新账号