Banner1 Banner2 Banner3 Banner4
查看: 37|回复: 2

[代码] mg.php

[复制链接]
发表于 2026-4-17 23:40:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

29.png

  1. <?php

  2. class MgParser {
  3.     private $session;

  4.     public function __construct() {
  5.         $this->session = curl_init();
  6.     }

  7.     private function get_string_md5($s) {
  8.         return md5($s);
  9.     }

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

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

  16.         $len = strlen($pu_data) / 2;
  17.         for ($i = 0; $i < $len; $i++) {
  18.             $dd_calcu[] = $pu_data[strlen($pu_data) - $i - 1];
  19.             $dd_calcu[] = $pu_data[$i];

  20.             if ($i == 1) {
  21.                 $dd_calcu[] = "e";
  22.             } elseif ($i == 2) {
  23.                 $date_str = $this->get_date_string(new DateTime());
  24.                 $dd_calcu[] = (strlen($date_str) > 6) ? $keys[(int)$date_str[6]] : "0";
  25.             } elseif ($i == 3) {
  26.                 $dd_calcu[] = (strlen($program_id) > 2) ? $keys[(int)$program_id[2]] : "0";
  27.             } elseif ($i == 4) {
  28.                 $dd_calcu[] = "0";
  29.             }
  30.         }

  31.         return implode('', $dd_calcu);
  32.     }

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

  37.         try {
  38.             $query_params = strpos($pu_data_url, "?") !== false
  39.                 ? substr($pu_data_url, strpos($pu_data_url, "?") + 1)
  40.                 : $pu_data_url;

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

  43.             if (empty($pu_data)) {
  44.                 return $pu_data_url;
  45.             }

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

  47.             $url_parts = explode('?', $pu_data_url, 2);
  48.             $base_url = $url_parts[0];
  49.             $query_string = $url_parts[1] ?? '';

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

  53.                 $separator = (strpos($base_url, '?') !== false) ? '&' : '?';
  54.                 return $base_url . $separator . $query_string . '&ddCalcu=' . $dd_calcu;
  55.             } else {
  56.                 $separator = (strpos($base_url, '?') !== false) ? '&' : '?';
  57.                 return $base_url . $separator . 'ddCalcu=' . $dd_calcu;
  58.             }
  59.         } catch (Exception $e) {
  60.             return $pu_data_url;
  61.         }
  62.     }

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

  66.         $headers = [
  67.             "AppVersion: 2600000900",
  68.             "TerminalId: android",
  69.             "X-UP-CLIENT-CHANNEL-ID: 2600037000-99000-200300220100002",
  70.             "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",
  71.             "Accept: application/json",
  72.             "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8",
  73.             "Connection: keep-alive"
  74.         ];

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

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

  79.         $rate_type = 3;
  80.         if ($pid == "608831231") {
  81.             $rate_type = 2;
  82.         }

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

  85.         $full_url = $base_url . $params;

  86.         $ch = curl_init($full_url);
  87.         curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  88.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  89.         curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  90.         $response = curl_exec($ch);
  91.         $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  92.         curl_close($ch);

  93.         if ($http_code != 200) {
  94.             return null;
  95.         }

  96.         $resp_data = json_decode($response, true);

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

  100.         $url = $resp_data['body']['urlInfo']['url'] ?? null;
  101.         if (empty($url)) {
  102.             return null;
  103.         }

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

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

  108.         if ($final_url) {
  109.             header("Content-Type: application/vnd.apple.mpegurl");
  110.             header("Location: " . $final_url);
  111.             exit;
  112.         } else {
  113.             http_response_code(404);
  114.             echo "无法获取播放地址";
  115.             exit;
  116.         }
  117.     }
  118. }

  119. $channels = [
  120.     "608807420" => "CCTV1综合",
  121.     "631780532" => "CCTV2财经",
  122.     "624878271" => "CCTV3综艺",
  123.     "631780421" => "CCTV4中文国际",
  124.     "641886683" => "CCTV5体育",
  125.     "641886773" => "CCTV5+体育赛事",
  126.     "624878396" => "CCTV6电影",
  127.     "673168121" => "CCTV7国防军事",
  128.     "624878356" => "CCTV8电视剧",
  129.     "673168140" => "CCTV9纪录",
  130.     "624878405" => "CCTV10科教",
  131.     "667987558" => "CCTV11戏曲",
  132.     "673168185" => "CCTV12社会与法",
  133.     "608807423" => "CCTV13新闻",
  134.     "624878440" => "CCTV14少儿",
  135.     "673168223" => "CCTV15音乐",
  136.     "609006446" => "CGTN俄语",
  137.     "609006487" => "CGTN外语纪录",
  138.     "609006476" => "CGTN法语",
  139.     "609006450" => "CGTN西班牙语",
  140.     "609154345" => "CGTN阿拉伯语",
  141.     "923287154" => "CETV1",
  142.     "923287211" => "CETV2",
  143.     "923287339" => "CETV4",
  144.     "849116810" => "东南卫视",
  145.     "651632648" => "东方卫视",
  146.     "956904896" => "中国农林卫视",
  147.     "956923145" => "兵团卫视",
  148.     "947472500" => "吉林卫视",
  149.     "608917627" => "大湾区卫视",
  150.     "738910535" => "宁夏卫视",
  151.     "608831231" => "广东卫视",
  152.     "623899368" => "江苏卫视",
  153.     "783847495" => "江西卫视",
  154.     "790187291" => "河南卫视",
  155.     "947472502" => "海南卫视",
  156.     "849119120" => "海峡卫视",
  157.     "947472496" => "湖北卫视",
  158.     "630291707" => "辽宁卫视",
  159.     "738910838" => "陕西卫视",
  160.     "947472506" => "青海卫视",
  161.     "651632657" => "上海新闻综合",
  162.     "608780988" => "上海第一财经",
  163.     "609154353" => "山东教育",
  164.     "626064674" => "江苏国际",
  165.     "626064714" => "江苏城市频道",
  166.     "626064697" => "江苏影视频道",
  167.     "628008321" => "江苏教育",
  168.     "626065193" => "江苏综艺频道",
  169.     "956909356" => "陕西体育休闲频道",
  170.     "956909289" => "陕西新闻资讯频道",
  171.     "956909303" => "陕西秦腔频道",
  172.     "956909358" => "陕西都市青春频道",
  173.     "956909362" => "陕西银龄频道",
  174.     "915512915" => "24小时城市联赛轮播台",
  175.     "644368714" => "CHC动作电影",
  176.     "644368373" => "CHC家庭影院",
  177.     "952383261" => "CHC影迷电影",
  178.     "617290047" => "上视东方影视",
  179.     "959986618" => "中华特产",
  180.     "959986621" => "中国天气",
  181.     "708869532" => "中学生",
  182.     "626064703" => "优漫卡通频道",
  183.     "629943305" => "体坛名栏汇",
  184.     "626064707" => "体育休闲频道",
  185.     "626064693" => "公共新闻频道",
  186.     "838151753" => "南京十八频道",
  187.     "838153729" => "南京教科频道",
  188.     "838109047" => "南京新闻综合频道",
  189.     "614961829" => "南方影视",
  190.     "955227985" => "南通新闻综合",
  191.     "713591450" => "和美乡途轮播台",
  192.     "614952364" => "嘉佳卡通",
  193.     "637444975" => "四海钓鱼",
  194.     "955227996" => "宜兴新闻综合",
  195.     "639731832" => "宿迁新闻综合",
  196.     "639731747" => "徐州新闻综合",
  197.     "617432318" => "抗战经典影片",
  198.     "713589837" => "新动力量创一流",
  199.     "619495952" => "新片放映厅",
  200.     "629942228" => "最强综艺趴",
  201.     "958475359" => "武术世界",
  202.     "955227979" => "江阴新闻综合",
  203.     "639731818" => "泰州新闻综合",
  204.     "639731826" => "淮安新闻综合",
  205.     "639737327" => "溧水新闻综合",
  206.     "958475356" => "环球旅游",
  207.     "639731825" => "盐城新闻综合",
  208.     "629942219" => "经典动画大集合",
  209.     "625703337" => "经典香港电影",
  210.     "956923159" => "财富天下",
  211.     "646596895" => "赛事最经典",
  212.     "639731715" => "连云港新闻综合",
  213.     "609158151" => "熊猫频道01高清",
  214.     "608933610" => "熊猫频道1",
  215.     "609169285" => "熊猫频道10",
  216.     "608933640" => "熊猫频道2",
  217.     "608934619" => "熊猫频道3",
  218.     "608934721" => "熊猫频道4",
  219.     "608935104" => "熊猫频道5",
  220.     "608935797" => "熊猫频道6",
  221.     "609169286" => "熊猫频道7",
  222.     "609169287" => "熊猫频道8",
  223.     "609169226" => "熊猫频道9"
  224. ];

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

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

  231. $parser = new MgParser();
  232. $parser->parse($id);
  233. ?>
复制代码



 楼主| 发表于 2026-4-18 00:17:29 | 显示全部楼层
改了一下,还是不错的。
发表于 2026-4-18 10:09:11 | 显示全部楼层
烟花 发表于 2026-4-18 00:17
改了一下,还是不错的。

好象只以国内服务器使用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

论坛 Banner

相关侵权、举报、投诉及建议等,请发 E-mail:[email protected]

返回顶部