找回密码
 立即注册
搜索
查看: 46|回复: 1

海南卫视php

[复制链接]

2

主题

111

回帖

135

积分

彩电迷

积分
135
发表于 昨天 17:51 | 显示全部楼层 |阅读模式
<?php
//来源:http://tc.hnntv.cn/zb/28666112.shtml

declare(strict_types=1);

$sourceUrl = 'https://vmsimage.csp.chinamcloud.com/lyws/liveChannel/PC/videoAll.jsonp?callback=channels_jsonpCallback';

$jsonp = fetchRemoteContent($sourceUrl);
if ($jsonp === null) {
        respondError(502, '上游接口请求失败');
}

$list = parseJsonpToArray($jsonp);
if (!is_array($list)) {
        respondError(502, '上游接口数据格式异常');
}

$playUrl = extractHainanPlayUrl($list);
if ($playUrl === null) {
        respondError(404, '未找到海南卫视播放地址');
}

header('Access-Control-Allow-Origin: *');
header('Location: ' . $playUrl, true, 302);
exit;

function fetchRemoteContent(string $url): ?string
{
        $ch = curl_init($url);
        if ($ch === false) {
                return null;
        }

        curl_setopt_array($ch, [
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_FOLLOWLOCATION => true,
                CURLOPT_TIMEOUT => 15,
                CURLOPT_CONNECTTIMEOUT => 8,
                CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0',
                CURLOPT_ENCODING => '',
        ]);

        $body = curl_exec($ch);
        $httpCode = (int) curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $curlErrNo = curl_errno($ch);
        curl_close($ch);

        if ($curlErrNo !== 0 || !is_string($body) || $body === '' || $httpCode < 200 || $httpCode >= 300) {
                return null;
        }

        return $body;
}

function parseJsonpToArray(string $jsonp): ?array
{
        if (!preg_match('/^[\w$]+\((.*)\)\s*;?\s*$/s', trim($jsonp), $matches)) {
                return null;
        }

        $decoded = json_decode($matches[1], true);
        return is_array($decoded) ? $decoded : null;
}

function extractHainanPlayUrl(array $list): ?string
{
        foreach ($list as $item) {
                if (!is_array($item)) {
                        continue;
                }

                $name = isset($item['C_Name']) ? (string) $item['C_Name'] : '';
                if ($name !== '海南卫视' && $name !== '视频直播') {
                        continue;
                }

                $address = isset($item['C_Address']) ? (string) $item['C_Address'] : '';
                $url = parseUrlFromCAddress($address);
                if ($url !== null) {
                        return $url;
                }

                $brief = isset($item['C_Brief']) ? (string) $item['C_Brief'] : '';
                $fallback = parseFirstHttpUrl($brief);
                if ($fallback !== null) {
                        return $fallback;
                }
        }

        return null;
}

function parseUrlFromCAddress(string $cAddress): ?string
{
        if ($cAddress === '') {
                return null;
        }

        $prefix = 'mr://j:';
        if (strpos($cAddress, $prefix) === 0) {
                $cAddress = substr($cAddress, strlen($prefix));
        }

        $decoded = json_decode($cAddress, true);
        if (!is_array($decoded) || !isset($decoded['playerUrl']) || !is_array($decoded['playerUrl'])) {
                return null;
        }

        foreach ($decoded['playerUrl'] as $entry) {
                if (!is_array($entry) || !isset($entry['url'])) {
                        continue;
                }
                $url = (string) $entry['url'];
                if (stripos($url, 'http://') === 0 || stripos($url, 'https://') === 0) {
                        return $url;
                }
        }

        return null;
}

function parseFirstHttpUrl(string $text): ?string
{
        if (preg_match('/https?:\/\/[^\s"\\]+/i', $text, $m)) {
                return $m[0];
        }
        return null;
}

function respondError(int $statusCode, string $message): void
{
        http_response_code($statusCode);
        header('Content-Type: text/plain; charset=utf-8');
        echo $message;
        exit;
}


?>

点评

看着不错。  发表于 昨天 19:25

评分

参与人数 1海贝 +5 收起 理由
admin + 5

查看全部评分

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋

创办于 2025 年 5 月 5 日

快速回复 返回顶部 返回列表