烟花 发表于 2026-4-17 23:40:54

mg.php

本帖最后由 烟花 于 2026-4-18 00:17 编辑



<?php

class MgParser {
    private $session;

    public function __construct() {
      $this->session = curl_init();
    }

    private function get_string_md5($s) {
      return md5($s);
    }

    private function get_date_string($date) {
      return $date->format('Ymd');
    }

    private function get_dd_calcu_720p($pu_data, $program_id) {
      $keys = "0123456789";
      $dd_calcu = [];

      $len = strlen($pu_data) / 2;
      for ($i = 0; $i < $len; $i++) {
            $dd_calcu[] = $pu_data;
            $dd_calcu[] = $pu_data[$i];

            if ($i == 1) {
                $dd_calcu[] = "e";
            } elseif ($i == 2) {
                $date_str = $this->get_date_string(new DateTime());
                $dd_calcu[] = (strlen($date_str) > 6) ? $keys[(int)$date_str] : "0";
            } elseif ($i == 3) {
                $dd_calcu[] = (strlen($program_id) > 2) ? $keys[(int)$program_id] : "0";
            } elseif ($i == 4) {
                $dd_calcu[] = "0";
            }
      }

      return implode('', $dd_calcu);
    }

    private function get_dd_calcu_url_720p($pu_data_url, $program_id) {
      if (strpos($pu_data_url, "&puData=") === false) {
            return $pu_data_url;
      }

      try {
            $query_params = strpos($pu_data_url, "?") !== false
                ? substr($pu_data_url, strpos($pu_data_url, "?") + 1)
                : $pu_data_url;

            parse_str($query_params, $params);
            $pu_data = $params['puData'] ?? '';

            if (empty($pu_data)) {
                return $pu_data_url;
            }

            $dd_calcu = $this->get_dd_calcu_720p($pu_data, $program_id);

            $url_parts = explode('?', $pu_data_url, 2);
            $base_url = $url_parts;
            $query_string = $url_parts ?? '';

            if ($query_string) {
               
                $query_string = preg_replace('/&?ddCalcu=[^&]*/', '', $query_string);

                $separator = (strpos($base_url, '?') !== false) ? '&' : '?';
                return $base_url . $separator . $query_string . '&ddCalcu=' . $dd_calcu;
            } else {
                $separator = (strpos($base_url, '?') !== false) ? '&' : '?';
                return $base_url . $separator . 'ddCalcu=' . $dd_calcu;
            }
      } catch (Exception $e) {
            return $pu_data_url;
      }
    }

    private function get_android_url_720p($pid) {
      $timestamp = round(microtime(true) * 1000);
      $app_version = "26000009";

      $headers = [
            "AppVersion: 2600000900",
            "TerminalId: android",
            "X-UP-CLIENT-CHANNEL-ID: 2600037000-99000-200300220100002",
            "User-Agent: Mozilla/5.0 (Linux; Android 10; SM-G975F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Mobile Safari/537.36",
            "Accept: application/json",
            "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8",
            "Connection: keep-alive"
      ];

      $str_to_hash = $timestamp . $pid . $app_version;
      $md5_hash = $this->get_string_md5($str_to_hash);

      $suffix = "770fafdf5ba04d279a59ef1600baae98migu6666";
      $sign = $this->get_string_md5($md5_hash . $suffix);

      $rate_type = 3;
      if ($pid == "608831231") {
            $rate_type = 2;
      }

      $base_url = "https://play.miguvideo.com/playurl/v1/play/playurl";
      $params = "?sign=" . $sign . "&rateType=" . $rate_type . "&contId=" . $pid . "&timestamp=" . $timestamp . "&salt=66666601";

      $full_url = $base_url . $params;

      $ch = curl_init($full_url);
      curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      curl_setopt($ch, CURLOPT_TIMEOUT, 10);
      $response = curl_exec($ch);
      $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      curl_close($ch);

      if ($http_code != 200) {
            return null;
      }

      $resp_data = json_decode($response, true);

      if (($resp_data['code'] ?? '') != "200" && ($resp_data['resultCode'] ?? '') != "200") {
            return null;
      }

      $url = $resp_data['body']['urlInfo']['url'] ?? null;
      if (empty($url)) {
            return null;
      }

      return $this->get_dd_calcu_url_720p($url, $pid);
    }

    public function parse($id) {
      $final_url = $this->get_android_url_720p($id);

      if ($final_url) {
            header("Content-Type: application/vnd.apple.mpegurl");
            header("Location: " . $final_url);
            exit;
      } else {
            http_response_code(404);
            echo "无法获取播放地址";
            exit;
      }
    }
}

$channels = [
    "608807420" => "CCTV1综合",
    "631780532" => "CCTV2财经",
    "624878271" => "CCTV3综艺",
    "631780421" => "CCTV4中文国际",
    "641886683" => "CCTV5体育",
    "641886773" => "CCTV5+体育赛事",
    "624878396" => "CCTV6电影",
    "673168121" => "CCTV7国防军事",
    "624878356" => "CCTV8电视剧",
    "673168140" => "CCTV9纪录",
    "624878405" => "CCTV10科教",
    "667987558" => "CCTV11戏曲",
    "673168185" => "CCTV12社会与法",
    "608807423" => "CCTV13新闻",
    "624878440" => "CCTV14少儿",
    "673168223" => "CCTV15音乐",
    "609006446" => "CGTN俄语",
    "609006487" => "CGTN外语纪录",
    "609006476" => "CGTN法语",
    "609006450" => "CGTN西班牙语",
    "609154345" => "CGTN阿拉伯语",
    "923287154" => "CETV1",
    "923287211" => "CETV2",
    "923287339" => "CETV4",
    "849116810" => "东南卫视",
    "651632648" => "东方卫视",
    "956904896" => "中国农林卫视",
    "956923145" => "兵团卫视",
    "947472500" => "吉林卫视",
    "608917627" => "大湾区卫视",
    "738910535" => "宁夏卫视",
    "608831231" => "广东卫视",
    "623899368" => "江苏卫视",
    "783847495" => "江西卫视",
    "790187291" => "河南卫视",
    "947472502" => "海南卫视",
    "849119120" => "海峡卫视",
    "947472496" => "湖北卫视",
    "630291707" => "辽宁卫视",
    "738910838" => "陕西卫视",
    "947472506" => "青海卫视",
    "651632657" => "上海新闻综合",
    "608780988" => "上海第一财经",
    "609154353" => "山东教育",
    "626064674" => "江苏国际",
    "626064714" => "江苏城市频道",
    "626064697" => "江苏影视频道",
    "628008321" => "江苏教育",
    "626065193" => "江苏综艺频道",
    "956909356" => "陕西体育休闲频道",
    "956909289" => "陕西新闻资讯频道",
    "956909303" => "陕西秦腔频道",
    "956909358" => "陕西都市青春频道",
    "956909362" => "陕西银龄频道",
    "915512915" => "24小时城市联赛轮播台",
    "644368714" => "CHC动作电影",
    "644368373" => "CHC家庭影院",
    "952383261" => "CHC影迷电影",
    "617290047" => "上视东方影视",
    "959986618" => "中华特产",
    "959986621" => "中国天气",
    "708869532" => "中学生",
    "626064703" => "优漫卡通频道",
    "629943305" => "体坛名栏汇",
    "626064707" => "体育休闲频道",
    "626064693" => "公共新闻频道",
    "838151753" => "南京十八频道",
    "838153729" => "南京教科频道",
    "838109047" => "南京新闻综合频道",
    "614961829" => "南方影视",
    "955227985" => "南通新闻综合",
    "713591450" => "和美乡途轮播台",
    "614952364" => "嘉佳卡通",
    "637444975" => "四海钓鱼",
    "955227996" => "宜兴新闻综合",
    "639731832" => "宿迁新闻综合",
    "639731747" => "徐州新闻综合",
    "617432318" => "抗战经典影片",
    "713589837" => "新动力量创一流",
    "619495952" => "新片放映厅",
    "629942228" => "最强综艺趴",
    "958475359" => "武术世界",
    "955227979" => "江阴新闻综合",
    "639731818" => "泰州新闻综合",
    "639731826" => "淮安新闻综合",
    "639737327" => "溧水新闻综合",
    "958475356" => "环球旅游",
    "639731825" => "盐城新闻综合",
    "629942219" => "经典动画大集合",
    "625703337" => "经典香港电影",
    "956923159" => "财富天下",
    "646596895" => "赛事最经典",
    "639731715" => "连云港新闻综合",
    "609158151" => "熊猫频道01高清",
    "608933610" => "熊猫频道1",
    "609169285" => "熊猫频道10",
    "608933640" => "熊猫频道2",
    "608934619" => "熊猫频道3",
    "608934721" => "熊猫频道4",
    "608935104" => "熊猫频道5",
    "608935797" => "熊猫频道6",
    "609169286" => "熊猫频道7",
    "609169287" => "熊猫频道8",
    "609169226" => "熊猫频道9"
];

$id = $_GET['id'] ?? '';

if (empty($id) || !isset($channels[$id])) {
    http_response_code(400);
    echo "缺少有效的 id 参数";
    exit;
}

$parser = new MgParser();
$parser->parse($id);
?>


烟花 发表于 2026-4-18 00:17:29

改了一下,还是不错的。

四维 发表于 2026-4-18 10:09:11

烟花 发表于 2026-4-18 00:17
改了一下,还是不错的。

好象只以国内服务器使用
页: [1]
查看完整版本: mg.php