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 . "×tamp=" . $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
改了一下,还是不错的。
好象只以国内服务器使用
页:
[1]