178228468 发表于 2025-5-2 23:30:44

服务器托管运行php方案

感谢gaoma大神提供的方案 :https://iptv.cc/thread-5725-1-1.html

这里只对代码做了简单改动,使php代理可以在服务器上托管。

直接服务器上传这两个php,再创建一个 sz.json文件(记得权限664),用来缓存数组。 服务器定时运行下面php,目的缓存最新数组。
<?php
$n = [
   'cctv1?id=1725&uin=1632?CCTV1综合',
   'dyjc?id=1793&uin=2311?CCTV第一剧场',
   'zhms?id=3782&uin=4251?中华美食',

   'cptv?id=3341&uin=3698?昌平电视台',

   'dqzh?id=2281&uin=1463?大庆新闻综合',
   'dqjy?id=2283&uin=1463?大庆教育',
   'nazh?id=2475&uin=3543?牡丹江宁安综合',

   'tlzh?id=2584&uin=3816?铁岭新闻综合',
   'jptv1?id=1066&uin=1332?大连金普一套',
   'jptv2?id=2598&uin=1332?大连金普二套',

   'bdzh?id=3067&uin=1630?保定新闻综合',
   'bdgg?id=3068&uin=1630?保定公共',
   'bdsh?id=3069&uin=1630?保定生活健康',
   'jzzh?id=732&uin=1724?衡水冀州综合',
   'wqzh?id=3654&uin=1425?衡水武强综合',

   'qxtv?id=2988&uin=4048?太原清徐电视台',
   'hmxw?id=2125&uin=2556?临汾侯马新闻综合',
   'qwzh?id=1203&uin=2653?临汾曲沃新闻综合',
   'lltv1?id=2652&uin=2268?吕梁一套',
   'lltv2?id=2653&uin=2268?吕梁二套',
   'jctv?id=3406&uin=1779?吕梁交城电视台',
   'lztv?id=3407&uin=1723?长治潞州电视台',
   'rczh?id=2511&uin=3580?运城芮城综合',

   'zbzh?id=2308&uin=3185?淄博新闻综合',
   'jxzh?id=1306&uin=2606?济宁嘉祥新闻综合',
   'jxsh?id=1307&uin=2606?济宁嘉祥生活',
   'hztv1?id=3492&uin=4042?菏泽一套',
   'hztv2?id=3493&uin=4042?菏泽二套',
   'hztv3?id=3520&uin=4042?菏泽三套',

   'ngzh?id=1588&uin=2465?宣城宁国新闻综合',
   'sszh?id=3390&uin=4180?安庆宿松新闻综合',
   'ssxq?id=3389&uin=4180?安庆宿松戏曲文艺',
   'tczh?id=3350&uin=4104?安庆桐城综合',
   'dszh?id=2334&uin=1364?宿州砀山新闻综合',
   'fyzh?id=2851&uin=2577?阜阳新闻综合',
   'fyjy?id=2852&uin=2577?阜阳教育',
   'fygg?id=2853&uin=2577?阜阳公共',
   'fyds?id=2854&uin=2577?阜阳都市文艺',
   'fdzh?id=3780&uin=1167?肥东新闻综合',

   'nyzh?id=142&uin=1081?南阳新闻综合',
   'nygg?id=295&uin=1081?南阳公共',
   'nykj?id=296&uin=1081?南阳科教',
   'pyzh?id=3662&uin=3616?濮阳新闻综合',
   'pygg?id=3017&uin=3616?濮阳公共',
   'pyxtv?id=3753&uin=3616?濮阳县电视台',
   'xxzh?id=3706&uin=4436?新乡新闻综合',
   'xxgg?id=3708&uin=4436?新乡公共',
   'hbzh?id=340&uin=1465?鹤壁新闻综合',
   'pdsxwzh?id=1969&uin=2367?平顶山新闻综合',

   'xyzh?id=3061&uin=1500?襄阳综合',
   'xygg?id=2337&uin=1500?襄阳公共',
   'xyjj?id=2675&uin=1500?襄阳经济生活',
   'szzh?id=304&uin=1487?随州综合',
   'sznc?id=305&uin=1487?随州农村',
   'xtzh?id=509&uin=1832?仙桃新闻综合',
   'cdzh?id=1982&uin=3165?武汉蔡甸新闻综合',
   'xzzh?id=2904&uin=3951?武汉新洲综合',
   'hszh?id=3031&uin=3065?黄石新闻综合',
   'hsds?id=3032&uin=3065?黄石都市',
   'hsgg?id=3623&uin=3065?黄石公共',
   'zbhs?id=3071&uin=3065?直播黄石',
   'eszh?id=1812&uin=3179?恩施新闻综合',
   'eswl?id=1811&uin=3179?恩施文旅',
   'bdtv?id=3522&uin=3179?巴东综合',
   'xfzh?id=3567&uin=3179?咸丰综合',
   'jmzh?id=3612&uin=1936?荆门新闻综合',

   'hnws?id=680&uin=1202?湖南卫视',
   'hnws2?id=1726&uin=1632?湖南卫视2',
   'csxw?id=346&uin=1648?长沙新闻',
   'cszf?id=348&uin=1648?长沙政法',
   'lyxw?id=1788&uin=3275?长沙浏阳电视台',
   'yyzh?id=1699&uin=2193?岳阳新闻综合',
   'yywl?id=1701&uin=2193?岳阳文旅都市',
   'zzzh?id=2053&uin=1366?株洲新闻综合',
   'nxxw?id=1724&uin=1632?益阳南县新闻',
   'xxxw?id=2581&uin=3815?湘西综合',
   'xxgg?id=2582&uin=3815?湘西公共',
   'yzzh?id=3088&uin=4100?郴州宜章新闻综合',

   'ytzh?id=2574&uin=3313?鹰潭新闻综合',

   'jnzh?id=2505&uin=3579?南京江宁综合',
   'gyzh?id=777&uin=1909?连云港灌云综合',
   'hazh?id=2778&uin=1610?淮安综合',
   'wxha?id=808&uin=1610?无线淮安',
   'xytv1?id=3177&uin=1812?徐州新沂1套',
   'xytv2?id=3178&uin=1812?徐州新沂2套',
   'xydy?id=2648&uin=1812?徐州新沂老电影',

   'lazh?id=2747&uin=3568?杭州临安综合',
   'fyxw?id=1181&uin=1482?杭州富阳新闻综合',
   'lpxw?id=2513&uin=3767?杭州临平新闻',
   'jdzh?id=187&uin=1176?杭州建德综合',
   'tlxw?id=3566&uin=1163?杭州桐庐新闻综合',
   'yqzh?id=171&uin=1356?温州乐清综合',
   'yqxw?id=170&uin=1356?温州乐清新闻',
   'yjzh?id=1335&uin=2768?温州永嘉新闻综合',
   'wlzh?id=911&uin=1639?台州温岭新闻综合',
   'wlms?id=1287&uin=1639?台州温岭民生休闲',
   'xjzh?id=1603&uin=2515?台州仙居新闻综合',
   'xcxw?id=1361&uin=2840?绍兴新昌新闻',
   'xcsh?id=1362&uin=2840?绍兴新昌生活',
   'nhzh?id=1423&uin=1329?宁波宁海新闻综合',
   'fhzh?id=3152&uin=3512?宁波奉化新闻综合',
   'cxzh?id=3697&uin=1346?宁波慈溪新闻综合',
   'ajxw?id=1499&uin=1253?湖州安吉新闻综合',
   'ajsh?id=1526&uin=1253?湖州安吉生活影视',
   'jhzh?id=3711&uin=4099?金华新闻综合',
   'ywzh?id=1796&uin=3071?金华义乌新闻综合',
   'ywsm?id=2133&uin=3071?金华义乌商贸',
   'ywgg?id=3090&uin=3071?金华义乌公共文艺',
   'lxzh?id=1185&uin=1324?金华兰溪新闻综合',
   'txzh?id=1511&uin=1043?嘉兴桐乡新闻综合',

   'fqzh?id=699&uin=1945?福州福清综合',
   'mhzh?id=2068&uin=2656?福州闽侯综合',
   'ptzh?id=907&uin=1118?平潭新闻综合',
   'ptly?id=908&uin=1118?平潭旅游文化',
   'yazh?id=2597&uin=3454?三明永安综合',
   'sxzh?id=425&uin=1567?三明沙县综合',
   'yxzh?id=765&uin=2055?三明尤溪新闻综合',
   'yxly?id=767&uin=2055?三明尤溪旅游宣传',
   'qgtv?id=2333&uin=3708?泉州泉港一套',
   'dhzh?id=2467&uin=3164?泉州德化综合',
   'yctv1?id=1792&uin=2311?泉州永春综合',
   'yctv2?id=1793&uin=2311?泉州永春公共',
   'zztv1?id=175&uin=1116?漳州一套',
   'zpzh?id=2803&uin=3350?漳州漳浦综合',
   'jmtv?id=3102&uin=4113?厦门集美综合',

   'xytv?id=643&uin=1629?茂名信宜电视台',
   'kpzh?id=1434&uin=1132?江门开平综合',
   'kpsh?id=1435&uin=1132?江门开平生活',
   'zctv?id=3454&uin=3047?广州增城台',

   'lzzh?id=1902&uin=3370?柳州新闻综合',
   'lzkj?id=1808&uin=3370?柳州科教',
   'ylzh?id=3289&uin=4042?玉林新闻综合',
   'ylgg?id=3290&uin=4042?玉林公共',

   'gy1?id=3398&uin=4263?贵阳新闻综合',
   'yjtv?id=3043&uin=4088?铜仁印江电视台',

   'njtv?id=1670&uin=1822?巴中南江电视台',
   'mztv?id=1933&uin=3277?德阳绵竹电视',
   'mztv2?id=3686&uin=3277?德阳绵竹电视2',
   'shtv?id=391&uin=1743?遂宁射洪综合',

   'akstv1?id=2229&uin=3643?阿克苏1套汉语综合',
   'akstv2?id=2233&uin=3643?阿克苏2套维语综合',
   'aksdj?id=2234&uin=3643?阿克苏党员远程教育',
   'bejha?id=3377&uin=4239?阿勒泰布尔津哈语综合',

   'dztv?id=1330&uin=1669?海南儋州台',
   ];

$result = [];

for ($i = 0; $i < count($n); $i++) {
    $ar = explode("?", $n[$i]);
    $pid = $ar;             // 如:cctv1
    $id = $ar;            // 如:id=1725&uin=1632
    $pn = $ar ?? '未知频道'; // 频道名,容错处理

    $apiUrl = "https://1812501212048408.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/node-api.online/node-api/tv/getPlayAddress?{$id}&clientId=奥点有效Id" . getrand(8);

    $h = [
      "Referer: https://web.guangdianyun.tv/",
      "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    ];

    $ch = curl_init($apiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $h);
    $response = curl_exec($ch);
    curl_close($ch);

    $data = json_decode($response, true);

    if (isset($data['data']['hlsUrl'])) {
      $extra_key = explode("extra_key=", $data['data']['hlsUrl']) ?? '';
      $result[$pid] = [$id, $extra_key]; // 保存格式 ['cctv1' => ['id=xxx&uin=xxx', 'extra_key']]
    }
}

file_put_contents(__DIR__ . '/sz.json', json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));

echo "数据已成功写入 sz.json 文件。";

function getrand($length) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
      $randomIndex = random_int(0, strlen($characters) - 1);
      $randomString .= $characters[$randomIndex];
    }
    return $randomString;
}
?>
<?php
error_reporting(0);

// 读取 sz.json 文件并解析为数组
$jsonData = file_get_contents(__DIR__ . '/sz.json');
$n = json_decode($jsonData, true);

// 获取频道 ID,默认为 cctv1
$id = isset($_GET['id']) ? $_GET['id'] : 'cctv1';

// 判断 ID 是否存在于 $n 中
if (!isset($n[$id])) {
    exit('Invalid channel ID.');
}

// 构建 API 请求 URL
$apiUrl = "https://1812501212048408.cn-hangzhou.fc.aliyuncs.com/2016-08-15/proxy/node-api.online/node-api/tv/getPlayAddress?" . $n[$id] . "&clientId=奥点有效Id" . getrand(8);

// 设置请求头
$h = [
    "Referer: https://web.guangdianyun.tv/",
    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
];

// 发送 CURL 请求
$ch = curl_init($apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $h);
$response = curl_exec($ch);
curl_close($ch);

// 解析返回数据
$data = json_decode($response, true);

// 拼接播放地址
$url = explode("&extra_key", $data['data']['hlsUrl']) . "&extra_key=" . $n[$id];

$burl = dirname($url)."/";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, $h);
$res = curl_exec($ch);
curl_close($ch);
header('Content-Type: application/vnd.apple.mpegurl');
print_r(preg_replace("/(.*?.ts)/i",$burl."$1",$res));


// 生成随机字符串函数
function getrand($length) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyz';
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
      $randomIndex = random_int(0, strlen($characters) - 1);
      $randomString .= $characters[$randomIndex];
    }
    return $randomString;
}
?>
调用方式:https://你的域名/gdy.php?id=cctv1

借花献佛,再次感谢gaoma大神提供的代码及方案。

f0rum 发表于 2025-5-2 23:34:15

看看,学习学习

0517 发表于 2025-5-2 23:45:07

两个PHP文件,第一个命名为gdy,第二个呢?

93met 发表于 2025-5-3 00:23:28

$randomIndex = random_int(0, strlen($characters) - 1);这行报错,$pn = $ar ?? '未知频道'; $extra_key = explode("extra_key=", $data['data']['hlsUrl']) ?? '';这两行也报错

金生丽水 发表于 2025-5-3 05:51:33

谢谢楼主分享

gzlpsycw 发表于 2025-5-3 07:41:27

谢谢楼主分享!

jllov 发表于 2025-5-3 08:04:34

人生没有彩排,每天都是直播。

xiaren2 发表于 2025-5-3 08:36:17

这玩意还限制ip吧,国外的获取不了第一个php的内容

178228468 发表于 2025-5-3 09:30:14

xiaren2 发表于 2025-5-3 08:36
这玩意还限制ip吧,国外的获取不了第一个php的内容

没有限制的,我在此字符被系统屏蔽测试成功。

178228468 发表于 2025-5-3 09:31:10

0517 发表于 2025-5-2 23:45
两个PHP文件,第一个命名为gdy,第二个呢?

php名字随便起的,只有json文件名对应代码中的,如需要修改可以自己改一下。

178228468 发表于 2025-5-3 09:31:54

93met 发表于 2025-5-3 00:23
$randomIndex = random_int(0, strlen($characters) - 1);这行报错,$pn = $ar ?? '未知频道'; $extr ...

检擦你的运行环境,代码没问题,php7.3-8.0军测试成功。

zxh000297 发表于 2025-5-3 15:33:12

感谢楼主分享
页: [1] 2
查看完整版本: 服务器托管运行php方案