找回密码
 立即注册
搜索
查看: 79|回复: 3

安徽马鞍山代理

[复制链接]

28

主题

275

回帖

325

积分

等离子电视迷

积分
325
发表于 2026-1-2 23:53:28 | 显示全部楼层 |阅读模式
AI写的,好繁琐……

<?php
/**
* 马鞍山市广播电视台频道播放地址获取器
* 根据频道ID获取相应的播放地址
*/

// 显示所有错误
ini_set('display_errors', 1);
error_reporting(E_ALL);

/**
* 主函数 - 获取频道播放地址
* @param array $item 包含频道参数的数组
* @return array 包含播放地址或错误信息的数组
*/
function main($item) {
    // 频道名称映射表
    $channelMap = [
        "xwzh" => "新闻综合",
        "kjsh" => "科教生活",
        "masxwlb" => "马鞍山新闻联播"
    ];

    // 获取传入的参数
    $inputParam = isset($item['id']) ? $item['id'] :
                  (isset($item['channel']) ? $item['channel'] :
                  (isset($item['name']) ? $item['name'] : "xwzh"));
   
    // 根据映射表获取实际的频道名称
    $channelName = isset($channelMap[$inputParam]) ? $channelMap[$inputParam] : $inputParam;

    // 生成当前时间戳
    $timestamp = time() * 1000; // PHP的time()返回秒,JS的getTime()返回毫秒
   
    // API URL
    $apiUrl = "https://maanshanxinwenwangzhan.masbcx.cn/json/channel/ds/list.json?_t={$timestamp}&appId=pc-4f11e7ed62b349ef8be0035b283a0d9f&siteId=8b233b99cc134eabb6a9c2965c038118";
   
    try {
        // 使用cURL发送请求
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $apiUrl);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 忽略SSL证书验证
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_HEADER, true); // 获取响应头
        
        // 设置请求头
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
            'Referer: https://www.masbcx.cn/',
            'Accept-Encoding: gzip, deflate'
        ]);
        
        // 执行请求
        $response = curl_exec($ch);
        
        // 检查请求是否成功
        if (curl_errno($ch)) {
            throw new Exception('cURL请求失败: ' . curl_error($ch));
        }
        
        // 获取响应状态码
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        
        // 获取响应头大小
        $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
        
        // 分离响应头和响应体
        $headers = substr($response, 0, $headerSize);
        $body = substr($response, $headerSize);
        
        // 关闭cURL会话
        curl_close($ch);
        
        // 检查状态码
        if ($httpCode !== 200) {
            return ["error" => "请求失败,状态码: {$httpCode}"];
        }
        
        // 解析响应头
        $responseHeaders = [];
        $headerLines = explode("\r\n", $headers);
        foreach ($headerLines as $line) {
            if (strpos($line, ':') !== false) {
                list($key, $value) = explode(':', $line, 2);
                $responseHeaders[trim($key)] = trim($value);
            }
        }
        
        // 检查是否为gzip压缩
        $contentEncoding = isset($responseHeaders['Content-Encoding']) ? $responseHeaders['Content-Encoding'] : '';
        if (strpos(strtolower($contentEncoding), 'gzip') !== false && function_exists('gzinflate')) {
            // 尝试解压gzip内容
            try {
                // 移除gzip头部
                $body = substr($body, 10);
                $body = gzinflate($body);
            } catch (Exception $e) {
                return [
                    "error" => "解压gzip内容失败: " . $e->getMessage(),
                    "rawData" => base64_encode($body), // 编码为base64便于传输
                    "headers" => $responseHeaders
                ];
            }
        }
        
        // 尝试解析JSON
        $data = json_decode($body, true);
        if (json_last_error() !== JSON_ERROR_NONE) {
            return [
                "error" => "JSON解析失败: " . json_last_error_msg(),
                "rawResponse" => substr($body, 0, 100) . "..."
            ];
        }
        
        // 查找频道
        $targetChannel = null;
        if (isset($data['list']) && is_array($data['list'])) {
            foreach ($data['list'] as $listItem) {
                if (isset($listItem['data']) && $listItem['data']['title'] === $channelName) {
                    $targetChannel = $listItem['data'];
                    break;
                }
            }
        }
        
        if (!$targetChannel) {
            // 获取可用频道列表
            $availableChannels = [];
            if (isset($data['list']) && is_array($data['list'])) {
                foreach ($data['list'] as $item) {
                    if (isset($item['data'])) {
                        $availableChannels[] = [
                            "title" => $item['data']['title'] ?? "",
                            "id" => $item['data']['id'] ?? ""
                        ];
                    }
                }
            }
            
            return [
                "error" => "未找到频道: {$channelName}",
                "availableChannels" => $availableChannels
            ];
        }
        
        // 获取播放地址
        $playUrl = isset($targetChannel['otherUrl']) ? $targetChannel['otherUrl'] :
                   (isset($targetChannel['url']) ? $targetChannel['url'] : "");
        
        if (empty($playUrl)) {
            return [
                "error" => "频道 {$channelName} 没有播放地址",
                "channelInfo" => [
                    "title" => $targetChannel['title'] ?? "",
                    "id" => $targetChannel['id'] ?? ""
                ]
            ];
        }
        
        // 返回播放地址
        return [
            "url" => $playUrl,
            "headers" => [
                'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
                'Referer' => 'https://www.masbcx.cn/'
            ],
            "channelInfo" => [
                "title" => $targetChannel['title'] ?? "",
                "id" => $targetChannel['id'] ?? "",
                "inputParam" => $inputParam
            ]
        ];
        
    } catch (Exception $error) {
        return [
            "error" => "请求失败: " . $error->getMessage(),
            "inputParam" => $inputParam,
            "channelMap" => $channelMap
        ];
    }
}

/**
* 执行主函数并输出结果
*/
function execute_main() {
    // 从GET参数获取输入
    $item = $_GET;
   
    // 执行主函数
    $result = main($item);
   
    // 设置响应头为JSON
    header('Content-Type: application/json; charset=utf-8');
   
    // 如果有URL,直接跳转
    if (isset($result['url'])) {
        // 输出调试信息
        if (isset($_GET['debug']) && $_GET['debug'] == 1) {
            echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
            exit;
        }
        // 执行跳转
        header('Location: ' . $result['url']);
        exit;
    }
   
    // 输出JSON结果
    echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
    exit;
}

/**
* 显示使用说明
*/
function show_usage() {
    echo "<h2>马鞍山市广播电视台频道播放地址获取器</h2>\n";
    echo "<p>使用方法:</p>\n";
    echo "<pre>\n";
    echo "1. 直接访问:ahmas.php\n";
    echo "   (默认获取新闻综合频道)\n\n";
    echo "2. 指定频道:ahmas.php?id=频道标识\n";
    echo "   可用频道标识:\n";
    echo "   - xwzh: 新闻综合\n";
    echo "   - kjsh: 科教生活\n";
    echo "   - masxwlb: 马鞍山新闻联播\n\n";
    echo "3. 调试模式:ahmas.php?id=频道标识&debug=1\n";
    echo "   (显示详细信息而不进行跳转)\n";
    echo "</pre>\n";
   
    echo "<p>示例:</p>\n";
    echo "<ul>\n";
    echo "<li><a href='ahmas.php?id=xwzh'>访问新闻综合频道</a></li>\n";
    echo "<li><a href='ahmas.php?id=kjsh'>访问科教生活频道</a></li>\n";
    echo "<li><a href='ahmas.php?id=xwzh&debug=1'>调试模式 - 新闻综合频道</a></li>\n";
    echo "</ul>\n";
}

// 主程序入口
if (empty($_GET) || isset($_GET['help']) || isset($_GET['usage'])) {
    // 显示使用说明
    show_usage();
} else {
    // 执行主函数
    execute_main();
}

2

主题

563

回帖

565

积分

液晶电视迷

积分
565
发表于 2026-1-3 09:16:18 | 显示全部楼层
谢谢楼主的分享

2

主题

172

回帖

329

积分

等离子电视迷

积分
329
发表于 2026-1-3 10:16:06 | 显示全部楼层
感谢楼主分享

0

主题

153

回帖

184

积分

彩电迷

积分
184
发表于 2026-1-4 19:05:36 | 显示全部楼层
感谢分享!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋

创办于 2025 年 5 月 5 日

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