技术 nowtv mpd 获取

ShSuperyun · 2024年11月11日 · 最后由 niconico 回复于 2024年11月24日 · 1262 次阅读
<?php

// 从 URL 查询字符串获取频道号
$channelNo = isset($_GET['ch']) ? $_GET['ch'] : '332'; // 如果没有提供,则默认使用 332

// 初始化 cURL 执行第一次请求
$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://nowplayer.now.com/liveplayer/play/",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => "channelNo=" . $channelNo, // 使用动态的频道号
    CURLOPT_HTTPHEADER => [
        "Cookie: NOW_SESSION=这里填你的cookie",
        "Referer: https://nowplayer.now.com/liveplayer/" . $channelNo, // 动态的 referer
        "User-Agent: ua也需与请求ua一致",
    ]
]);

// 执行第一次 cURL 请求并获取响应
$response = curl_exec($curl);

// 获取 HTTP 状态码
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);

// 关闭 cURL
curl_close($curl);

// 检查 cURL 请求是否成功
if ($response === false) {
    echo "无法从服务器获取响应。";
    exit;
}

// 检查 HTTP 响应状态码
if ($httpCode !== 200) {
    echo "错误:无法获取视频流,HTTP 状态码:" . $httpCode;
    exit;
}

// 解析 JSON 响应
$data = json_decode($response, true);

// 检查 'asset' 字段是否存在并提取 URL
if (isset($data['asset'][0])) {
    $assetUrl = $data['asset'][0]; // 这是第二次请求的目标链接

    // 执行第三次请求(通过第二次请求的 assetUrl)
    $curl = curl_init();

    curl_setopt_array($curl, [
        CURLOPT_URL => $assetUrl, // 使用第二次请求的链接
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_HTTPHEADER => [
            "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
        ]
    ]);

    // 执行第三次请求并获取响应
    $thirdResponse = curl_exec($curl);

    // 获取第三次请求的 HTTP 状态码
    $thirdHttpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);

    // 获取第三次请求的最终 URL(即重定向后的链接)
    $finalUrl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);

    // 关闭 cURL
    curl_close($curl);

    // 检查第三次请求是否成功
    if ($thirdResponse === false) {
        echo "无法从第三次请求获取响应。";
        exit;
    }

    // 检查 HTTP 响应状态码
    if ($thirdHttpCode !== 200) {
        echo "错误:第三次请求失败,HTTP 状态码:" . $thirdHttpCode;
        exit;
    }

    // 重定向到第三次请求的最终 URL
    header("Location: " . $finalUrl);
    exit; // 结束脚本执行,确保重定向生效
} else {
    echo "响应中未找到 Asset URL。";
}

?>

http://ip/now.php?ch=频道号 此脚本要求香港 ip 最好能解锁 now tv 的 免费频道有 330 331 332 333 366 367 540 541 542 543 545 548 630 099 096 561 321 328 552 325 553 329 付费频道也可以 cookie 可用 https://www.editthiscookie.com/ 插件抓 96 用以下脚本 无需 cookie

<?php
// 生成随机的 UUID 或 16 进制的随机字符串
function generateRandomString($length = 16) {
    return bin2hex(random_bytes($length / 2)); // 生成指定长度的 16 进制字符串
}

// 生成随机的 cookie 和 deviceId
$randomString = generateRandomString(); // 生成随机的字符串
$cookie = $randomString;
$deviceId = $randomString;

// 发送 POST 请求的 URL
$url = 'https://api.viu.now.com/p8/3/getLiveURL';

// 要发送的 POST 数据(JSON 格式)
$data = array(
    "callerReferenceNo" => "20241111101911",
    "channelno" => "096",
    "contentId" => "096",
    "contentType" => "Channel",
    "mode" => "prod",
    "PIN" => "password",
    "cookie" => $cookie, // 使用生成的随机 cookie
    "deviceId" => $deviceId, // 使用生成的随机 deviceId
    "deviceType" => "ANDRIOD_WEB",
    "format" => "HLS"
);

// 将数据数组转换为 JSON 字符串
$json_data = json_encode($data);

// 初始化 cURL 会话
$ch = curl_init($url);

// 设置 cURL 选项
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 返回响应作为字符串
curl_setopt($ch, CURLOPT_POST, true); // 设置请求类型为 POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); // 设置 POST 数据(JSON 格式)
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept: */*',
    'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Cache-Control: no-cache',
    'Content-Type: text/plain',
    'Origin: https://viu.tv',
    'Pragma: no-cache',
    'Priority: u=1, i',
    'Referer: https://viu.tv/',
    'Sec-CH-UA: "Chromium";v="130", "Microsoft Edge";v="130", "Not?A_Brand";v="99"',
    'Sec-CH-UA-Mobile: ?0',
    'Sec-CH-UA-Platform: "macOS"',
    'Sec-Fetch-Dest: empty',
    'Sec-Fetch-Mode: cors',
    'Sec-Fetch-Site: cross-site',
    'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0'
));

// 执行 cURL 请求并存储响应
$response = curl_exec($ch);

// 检查是否有 cURL 错误
if(curl_errno($ch)) {
    echo 'Curl error: ' . curl_error($ch);
} else {
    // 解析 JSON 响应
    $data = json_decode($response, true);

    // 获取视频流的 manifest URL
    $manifest_url = $data['asset'][0];

    // 第二次请求:访问视频流的 manifest URL
    $ch2 = curl_init($manifest_url);
    curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true); // 返回响应
    curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向
    curl_setopt($ch2, CURLOPT_HTTPHEADER, array(
        'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0'
    ));

    // 执行第二次请求
    $response2 = curl_exec($ch2);

    // 获取第二次请求后的 URL
    $second_url = curl_getinfo($ch2, CURLINFO_EFFECTIVE_URL);

    // 第二次请求是否还有更多重定向
    $ch3 = curl_init($second_url);
    curl_setopt($ch3, CURLOPT_RETURNTRANSFER, true); // 返回响应
    curl_setopt($ch3, CURLOPT_FOLLOWLOCATION, true); // 跟随重定向
    curl_setopt($ch3, CURLOPT_HTTPHEADER, array(
        'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0'
    ));

    // 执行第三次请求并获取最终 URL
    curl_exec($ch3);
    $final_url = curl_getinfo($ch3, CURLINFO_EFFECTIVE_URL);

    // 关闭第三次请求的 cURL 会话
    curl_close($ch3);

    // 重定向到最终 URL
    header("Location: $final_url");
    exit();
}

// 关闭第一次请求的 cURL 会话
curl_close($ch);
?>

如果会搞 key 的话 可以在这里共享 谢谢

谢谢,cloudflare workers 代码吗?

赞!感谢分享!

ShSuperyun 回复

能转换成 cloudflare workers 代码吗?

6 楼 已删除
ShSuperyun 关闭了讨论。 11月14日 01:07
ShSuperyun 重新开启了讨论。 11月14日 01:08

t h x

rudy 回复

看上去很牛

cookie 获取后输入https://now.473.hk/ 都是显示 错误:响应中未找到 Asset URL(不能使用)。但我登录后在网页都能观看,请问这个是否还有效?

ShSuperyun 关闭了讨论。 12月06日 09:45
需要 登录 后方可回复, 如果你还没有账号请 注册新账号