tvsou 节目指南 xmltv 格式的 php 源码

根据自己需要扩充 $cid 数据,然后服务器定期执行这个脚本,在php文件同目录下会生成 epg_tvs.xml 文件和*.gz 压缩文件。然后可以浏览 xml 文件看效果。该文件适用于 prefect player、progtv、kodi、tivimate 等播放器。

$cid获取如下,打开你需要的电视台的,截取网址高亮部分,根据已有格式(大概第 7 行)加入到以下代码适当位置。
《tvsou 节目指南 xmltv 格式的 php 源码》

<?php
if(date_default_timezone_get() != "Asia/Shanghai") date_default_timezone_set("Asia/Shanghai");
$fp="epg_tvs.xml";//压缩版本的扩展名后加.gz
$id0=100000;//起始节目编号

$cid=array(
    array('42688016','湖南都市'),
    array('34d6b6de','湖南经视'),
    );

function compress_html($string) {
    $string = str_replace("\r", '', $string); //清除换行符
    $string = str_replace("\n", '', $string); //清除换行符
    $string = str_replace("\t", '', $string); //清除制表符
    return $string;
}

$dt1=date('Ymd');
$dt2=date('Ymd',time()+24*3600);
$w1=date("w");
if ($w1<'1') {$w1=7;}
$w2=$w1+1;
$url0="https://www.tvsou.com/epg/";
$chn="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE tv SYSTEM \"http://api.torrent-tv.ru/xmltv.dtd\">\n<tv generator-info-name=\"tvsou\" generator-info-url=\"www.tvsou.com/epg\">\n";

$nid=sizeof($cid);

for ($id = 1; $id <= $nid; $id++){
    $t0=array();
    $t1=array();
    $nm=array();

    $url=$url0.$cid[$id-1][0].'/w'.$w1;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    $re = curl_exec($ch);
    curl_close($ch);
    $re=compress_html($re);
    preg_match('|<table class="layui-table c_table"(.*?)layui-tab-item|i',$re,$u);
    preg_match_all('|<tr>([\s\S]+?)<\/tr>|', trim($u[1]), $u);
    $u=$u[1];
    $num=sizeof($u);
    for ($i = 0; $i < $num; $i++) {
        preg_match_all('|_blank\'>(.*?)<\/a>|',$u[$i],$tr);
        $t0[]=$dt1.str_replace(':','',$tr[1][0]).'00 +0800';
        $nm[]=$tr[1][1];
    }
    $url=$url0.$cid[$id-1][0].'/w'.$w2;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    $re = curl_exec($ch);
    curl_close($ch);
    $re=compress_html($re);
    preg_match('|<table class="layui-table c_table"(.*?)layui-tab-item|i',$re,$u);
    preg_match_all('|<tr>([\s\S]+?)<\/tr>|', trim($u[1]), $u);
    $u=$u[1];
    $num=sizeof($u);
    for ($i = 0; $i < $num; $i++) {
        preg_match_all('|_blank\'>(.*?)<\/a>|',$u[$i],$tr);
        $t0[]=$dt2.str_replace(':','',$tr[1][0]).'00 +0800';
        $nm[]=$tr[1][1];
    }               

    $num=sizeof($t0);
    for ($i = 1; $i < $num; $i++) {$t1[]=$t0[$i];}
    $t1[]=$dt2.'235959 +0800';
    $idd=$id0+$id;
    $chn.="<channel id=\"".$idd."\"><display-name lang=\"zh\">".$cid[$id-1][1]."</display-name></channel>\n";
    for ($i = 0; $i < $num; $i++) {
        $chn.="<programme start=\"".$t0[$i]."\" stop=\"".$t1[$i]."\" channel=\"".$idd."\">\n<title lang=\"zh\">".$nm[$i]."</title>\n<desc lang=\"zh\"> </desc>\n</programme>\n";
    }
}
$chn.="</tv>\n";

//写入文件。这里一次性写入,可以自己分次写入操作
file_put_contents($fp, $chn);

//创建压缩版本
$fn = gzopen ($fp.'.gz', 'w9');
gzwrite($fn, file_get_contents($fp));
gzclose($fn);

?>

转自大佬“canhuang”。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

  1. rst 说道:
    站立能否写一个tvmao的PHP脚本?不能老是复制别人的