CCTV央视节目单获取免费 API 接口完整教程(含 PHP / Python 示例)
支持 CCTV 全系列频道可查约前 21 天到未来 7 天的节目单返回数据里包含节目名、开播/结束时间、时长、栏目主页等完整字段。下面从接口说明、参数、返回值到 PHP / Python 实战代码一次性讲透。一、接口基本信息项目说明接口地址https://cn.apihz.cn/api/fun/cctv.php请求方式GET 或 POST 都支持返回格式JSON调用限制公共 ID/KEY 有每分钟频次限制建议注册后使用自己的 ID 和 KEY每日调用无上限数据范围约前 21 天到未来 7 天二、请求参数详解必填参数参数名称说明id用户 ID用户中心的数字 ID如id10000000key通讯秘钥用户中心通讯秘钥如key15he5h15ty854j5sr152hs2可选参数参数名称默认值说明type频道1CCTV‑11‑17 对应 CCTV‑1~CCTV‑17101CCTV‑5102CCTV‑4 欧洲103CCTV‑4 美洲nian年当前年如nian2026yue月当前月如yue07建议两位ri日当日如ri10日期一般不能超过前 21 天与后 7 天常用频道type对照表type频道type频道1CCTV‑1 综合9CCTV‑9 纪录2CCTV‑2 财经10CCTV‑10 科教3CCTV‑3 综艺13CCTV‑13 新闻4CCTV‑4 亚洲14CCTV‑145CCTV‑5 体育16CCTV‑16 奥林匹克6CCTV‑6 电影17CCTV‑17 农业农村7CCTV‑7101CCTV‑5 体育赛事8CCTV‑8 电视剧102/103CCTV‑4 欧洲/美洲三、返回参数详解接口统一用code判断状态200成功400一般是参数或秘钥错误。顶层字段字段说明code200 成功400 错误msg提示信息channelName频道名称如CCTV-1 综合playurl官方播放网页注意是网页不是直链播放地址vipflagVIP 标识0免费list节目列表数组list 内每个节目字段字段说明title节目名称startTime开播时间戳startTime2格式化开播时间endTime结束时间戳endTime2格式化结束时间showTime开播时间几点几分eventType/eventId特殊标记常用于体育赛事、晚会length节目时长单位秒column_url/columnBackvideourl栏目主页链接top权重标识四、GET 请求示例直接在浏览器或 curl 里就能调https://接口盒子/api/fun/cctv.php?id你的IDkey你的KEYtype1nian2026yue07ri10成功时返回结构类似{ code: 200, channelName: CCTV-1 综合, playurl: https://tv.cctv.com/live/cctv1, vipflag: 0, list: [ { title: 新闻联播, startTime: 1780865580, startTime2: 2026-06-08 04:53:00, endTime: 1780867620, endTime2: 2026-06-08 05:27:00, showTime: 04:53, length: 2040, column_url: https://tv.cctv.com/lm/xwlb/index.shtml } ] }失败时{code:400,msg:通讯秘钥错误。}五、PHP 调用示例下面给你GET和POST两种写法实际项目里推荐 POST参数不容易被日志记下来。示例 1PHP GET 请求cURL?php $apiUrl https://接口盒子/api/fun/cctv.php; // 替换为你的 ID 和 KEY $id 你的ID; $key 你的KEY; $type 1; // CCTV-1 $nian 2026; $yue 7; $ri 10; $url sprintf( %s?id%skey%stype%dnian%dyue%02dri%02d, $apiUrl, $id, $key, $type, $nian, $yue, $ri ); $ch curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 本地测试可关生产环境建议开启 $response curl_exec($ch); if (curl_errno($ch)) { echo 请求错误 . curl_error($ch); exit; } curl_close($ch); $data json_decode($response, true); if ($data[code] 200) { echo 频道{$data[channelName]}\n; echo 播放页{$data[playurl]}\n\n; foreach ($data[list] as $item) { echo [{$item[showTime]}] {$item[title]} 时长 . gmdate(i分s秒, $item[length]) . \n; } } else { echo 接口返回错误{$data[msg]}\n; }示例 2PHP POST 请求推荐phpphp?php $apiUrl https://接口盒子/api/fun/cctv.php; $params [ id 你的ID, key 你的KEY, type 5, // CCTV-5 体育 nian 2026, yue 7, ri 10, ]; $ch curl_init(); curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $response curl_exec($ch); curl_close($ch); $data json_decode($response, true); header(Content-Type:text/html; charsetutf-8); if ($data[code] 200) { echo h2 . $data[channelName] . /h2; echo ul; foreach ($data[list] as $item) { echo li . $item[startTime2] . b . $item[title] . /b . ( . floor($item[length] / 60) . 分钟) . /li; } echo /ul; } else { echo 错误 . $data[msg]; }六、Python 调用示例Python 这边同样给 GET 和 POST顺手封装了一个把秒数转成「分:秒」的小函数实战里很常用。示例 1Python GET 请求import requests API_URL https://接口盒子/api/fun/cctv.php params { id: 你的ID, key: 你的KEY, type: 1, # CCTV-1 nian: 2026, yue: 7, ri: 10, } def sec_to_min_sec(seconds: int) - str: 把秒数转成 分:秒 m, s divmod(seconds, 60) return f{m}分{s}秒 resp requests.get(API_URL, paramsparams, timeout10) resp.encoding utf-8 data resp.json() if data.get(code) 200: print(f频道{data[channelName]}) print(f播放页{data[playurl]}) print(- * 40) for item in data[list]: print( f[{item[showTime]}] {item[title]} f({sec_to_min_sec(item[length])}) ) # 如果有栏目主页也打出来 if item.get(column_url): print(f 栏目主页{item[column_url]}) else: print(f接口错误{data.get(msg)})示例 2Python POST 请求 按节目名过滤这个例子更贴近真实需求——比如你只想查「新闻联播」什么时候播pythonpythonimport requests API_URL https://接口盒子/api/fun/cctv.php data { id: 你的ID, key: 你的KEY, type: 1, # CCTV-1 nian: 2026, yue: 7, ri: 10, } resp requests.post(API_URL, datadata, timeout10) resp.encoding utf-8 result resp.json() if result.get(code) ! 200: print(f请求失败{result.get(msg)}) exit() print(f频道{result[channelName]}) # 只打印「新闻联播」 for item in result[list]: if 新闻联播 in item[title]: print( f\n 找到《新闻联播》 f{item[startTime2]} ~ {item[endTime2]} f时长 {item[length]} 秒 ) if item.get(column_url): print(f栏目主页{item[column_url]}) # 也可以把所有节目按时间排序后输出 print(\n--- 全天节目 ---) for item in result[list]: print(f{item[showTime]} {item[title]})七、几个容易踩的坑playurl 不是播放直链它返回的是 CCTV 官方播放网页不是.m3u8直链别拿它直接当视频源塞进播放器。日期范围有限制一般只能查前 21 天到未来 7 天超出会返回异常或空数据。length 单位是秒返回里length: 2040表示 2040 秒也就是 34 分钟用之前记得换算。eventType 可用来做特殊标记体育赛事、晚会等可能会有eventType和eventId做 EPG 或赛事提醒时可以重点处理这两个字段。八、适合拿它做什么IPTV / EPG 系统定时拉取节目单生成 XMLTV 格式供播放器读取节目提醒机器人比如每天自动推送「新闻联播马上开始」影视资讯站展示 CCTV 各频道今日节目录制排程配合startTime时间戳做定时录制