|
发表于 2025-3-31 12:38:40
|
显示全部楼层
用豆包编程改的,测试了一下,可以用。
<?php
error_reporting(0);
// 获取id参数,若未提供则默认为bjwy
$id = isset($_GET['id']) ? $_GET['id'] : 'bjwy';
// 定义频道ID和对应的密钥
$n = [
'bjws' => '5755n511tbk8flo40l4c71l0sdf', // 北京卫视
'bjwy' => '54db6gi5vfj8r8q1e6r89imd64s' // BRTV文艺
];
// 检查id是否存在于数组中
if (!array_key_exists($id, $n)) {
// 若不存在,输出错误信息并终止脚本
die("Invalid ID");
}
// 获取当前时间戳
$t = time();
// 生成签名
$sign = substr(md5($n[$id] . "151" . $t . 'TtJSg@2g*$K4PjUH'), 0, 8);
// 构建请求URL
$url = "https://pc.api.btime.com/video/play?id=" . $n[$id] . "&sign=" . $sign . "×tamp=" . $t . "&type_id=151";
// 设置请求头
$options = [
'http' => [
'method' => 'GET',
'header' => implode("\r\n", [
'Accept: */*',
'Referer: https://www.btime.com/',
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
])
]
];
// 创建上下文
$context = stream_context_create($options);
// 发起网络请求
$d = file_get_contents($url, false, $context);
// 检查请求是否成功
if ($d === false) {
// 若失败,输出错误信息并终止脚本
die("Failed to fetch data from the server");
}
// 解析JSON数据
$jsonData = json_decode($d, true);
// 检查JSON解析是否成功
if ($jsonData === null || !isset($jsonData['data']['video_stream'][0]['stream_url'])) {
// 若失败,输出错误信息并终止脚本
die("Invalid JSON data or missing stream URL");
}
// 获取视频流URL
$stream_url = $jsonData['data']['video_stream'][0]['stream_url'];
// 根据id选择播放URL
if ($id == 'bjws') {
$playurl = $stream_url;
} else {
$playurl = base64_decode(base64_decode(strrev($stream_url)));
}
// 重定向到播放URL
header('location:' . $playurl);
// 用于调试,可注释掉
// print_r($playurl);
?> |
|