实时足球、篮球、直播直链一屏看完
支持一键复制 M3U8/FLV,打开自建播放器直接看。
# 全部直播(足球 + 篮球) curl -s 'https://api.okzhibo.live/live/api/live/' # 足球直播列表 curl -s 'https://api.okzhibo.live/live/api/live/?type=1' # 篮球直播列表 curl -s 'https://api.okzhibo.live/live/api/live/?type=18'
| 字段名 | 类型 | 说明 |
|---|---|---|
| code | number | 状态码,0 表示请求成功 |
| message | string | 状态描述信息,成功时返回 "成功" |
| data | object | 包含赛事列表的数据对象 含 total(总数)与 list(列表数组) |
| data.total | number | 当前返回的赛事总条数 |
| data.list | array | 赛事对象数组,每项为一场比赛 |
| 字段名 | 类型 | 说明 |
|---|---|---|
| matchId | string | 赛事唯一标识 ID 示例: 6a1505b23915db34355cf615 |
| gameType | number | 比赛类型编号 1(足球)/ 18(篮球) |
| leagueId | number | 联赛唯一 ID |
| leagueName | string | 联赛名称 示例:"韩K联"、"中冠" |
| leagueLogo | string | 联赛 Logo 图片 URL |
| matchTime | number | 比赛开始时间(Unix 时间戳,秒级) 示例:1778515200 → 2026-05-12 00:00 |
| matchTimeText | string | 比赛时间可读格式 常见格式: YYYY/MM/DD HH:mm |
| status | string | 比赛当前状态文字 可能为空、分钟文本(如 45'+)、简写(如 中)或篮球节次时间(如 Q3 06:51、Q1 End) |
| statusId | number | 状态编号保留字段 当前接口中大量返回 0,不要单独依赖它判断直播状态 |
| home | object | 主队信息对象 含 id / name / logo / score |
| away | object | 客队信息对象 含 id / name / logo / score |
| live_flv_url | string | FLV 格式直播流地址 适用于 PC 端 flv.js 播放器;无流时可能为空字符串 |
| live_m3u8_url | string | M3U8 格式 HLS 直播流地址 适用于移动端及 HLS 播放器;无流时可能为空字符串 |
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | number | 球队唯一 ID |
| name | string | 球队名称(中文) |
| logo | string | 球队 Logo 图片 URL 部分球队 logo 可能为空字符串 |
| score | number | 当前比分(未开赛时为 0) |
| 字段 / 场景 | 当前表现 | 接入建议 |
|---|---|---|
| statusId | 当前全量接口与直播接口里,大量赛事都返回 0 |
仅把它当作保留字段,不要继续按旧版 1~5 / -1 / -14 表做硬判断 |
| 足球 status | 可能是 45'+、90'+、中、空字符串等 |
优先按 status 文本展示,再结合流地址是否存在判断可播放性 |
| 篮球 status | 常见为 Q1 08:21、Q3 06:51、Q1 End、OT 01:12 等 |
建议前端转成友好的中文,例如 Q1 End -> 第一节结束、Q2 05:58 -> 第二节 05:58 |
| 直播判断 | 旧版单靠状态码已不稳定;有些直播赛事 statusId 仍然是 0 |
推荐组合判断:status 文本 + live_m3u8_url/live_flv_url 是否非空 |
// 获取全部直播(足球 + 篮球) const res = await fetch('https://api.okzhibo.live/live/api/live/'); const { code, data } = await res.json(); if (code === 0) { const formatStatus = (status) => { const raw = String(status || '').trim(); const upper = raw.toUpperCase(); const q = upper.match(/^Q([1-4])(?:\s+(.+))?$/); if (q) { const name = ['一', '二', '三', '四'][Number(q[1]) - 1]; const tail = String(q[2] || '').trim(); if (!tail) return `第${name}节`; if (tail === 'END') return `第${name}节结束`; return `第${name}节 ${tail}`; } return raw || '待更新'; }; for (const match of data.list ?? []) { const statusText = formatStatus(match.status); const scoreText = `${match.home.score}-${match.away.score}`; console.log( `[${match.leagueName}]`, match.home.name, 'vs', match.away.name, scoreText, statusText ); // 移动端优先 M3U8;为空时再降级到 FLV const playUrl = match.live_m3u8_url || match.live_flv_url; if (playUrl) { videoPlayer.load(playUrl); } } }
import requests resp = requests.get('https://api.okzhibo.live/live/api/live/', timeout=10) payload = resp.json() if payload['code'] == 0: for match in payload['data']['list']: status_text = match.get('status') or '待更新' play_url = match.get('live_m3u8_url') or match.get('live_flv_url') print( f"{match['leagueName']} | " f"{match['home']['name']} " f"{match['home']['score']}:{match['away']['score']} " f"{match['away']['name']} | {status_text}" ) if play_url: print('播放地址:', play_url)
| logo 字段为空 | 部分球队 logo 可能返回空字符串 "",使用时需做非空判断,展示默认占位图 |
| 时间戳单位 | matchTime 为秒级 Unix 时间戳,JS 中转换需 × 1000:new Date(matchTime * 1000) |
| 直播流可用性 | 不要再按旧版 statusId 取值判断是否直播;更建议检查 live_m3u8_url/live_flv_url 是否为空,并结合 status 文本展示 |
| 直播接口选择 | /live/api/live/ 无参可直接返回足球与篮球全部直播数据;当你只需要单一类型时,再使用 ?type=1 或 ?type=18 做过滤 |
| 请求频率 | 建议轮询间隔不低于 30 秒,避免对服务器造成过大压力 |
| M3U8 vs FLV | 移动端优先使用 live_m3u8_url(HLS),PC 端可使用 live_flv_url 配合 flv.js 获得更低延迟 |
| 页面地址 | https://www.okzhibo.live/player.html |
| 适用场景 | 无需对接接口与播放器,直接嵌入到你的网站页面中 |
<iframe src="https://www.okzhibo.live/player.html" width="100%" height="560" frameborder="0" allowfullscreen ></iframe>
| 当前入口 | /player.html |
| 下载打包 | /player.zip |
| 部署方式 | 当前项目直接使用单页入口 /player.html,文档里旧的 /player/ 目录结构已不适用 |
| 入口页面 | /player.html |
| 默认接口 | https://api.okzhibo.live/live/api/live/ |
1) 直接部署当前项目里的 /player.html 2) 浏览器访问:/player.html 3) 播放器会自动拉取足球 / 篮球直播并支持切换比赛
<iframe src="/player.html" width="100%" height="560" frameborder="0" allowfullscreen ></iframe>
| 当前状态 | 本项目当前未包含 live.zip、/live/README.md 等插件发布文件,旧文档入口已下线 |
| 替代方案 | 如需现成页面,优先使用本站的 /player.html 或直接调用上方 API 接口自行接入 |
当前仓库未提供可直接下载的 MacCMS 插件包。 如果你需要后台插件化接入,建议: 1) 优先基于 `/live/api/live/` 做服务端代理;只需要单一类型时再使用 `/live/api/live/?type=1|18` 2) 在你自己的 CMS / 插件系统里做缓存与模板渲染 3) 前端播放器可继续复用 `/player.html` 的交互逻辑