视频 API 接口参考
1. 基础地址
| 服务 | 基础地址 |
|---|---|
| 视频数据 | https://cik.netlify.app |
| 资源代理 | https://deploy-3wi.pages.dev |
2. JSON 响应格式
视频源、视频列表和视频详情接口返回 JSON。
2.1 成功响应
json
{
"code": 0,
"data": {},
"msg": "成功"
}| 字段 | 类型 | 说明 |
|---|---|---|
code | 0 | 请求成功 |
data | `object | array` |
msg | string | 提示信息 |
2.2 失败响应
json
{
"code": -1,
"data": null,
"msg": "失败"
}| 字段 | 类型 | 说明 |
|---|---|---|
code | -1 | 请求失败 |
data | null | 无数据 |
msg | string | 错误信息 |
业务失败时 HTTP 状态码仍可能为 200,使用时应检查 code。
3. 获取视频源
http
GET https://cik.netlify.app/api/video/source3.1 请求参数
无。
3.2 data
data 为视频源数组。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
key | string | 是 | 视频源唯一标识,供其他接口的 api 参数使用 |
name | string | 是 | 视频源名称 |
rating | number | 是 | 视频源评分 |
api | string | 是 | 视频源的原始采集地址 |
group | string | 是 | 视频源分组,常见值为 normal、18+ |
dataSource | string | 否 | 数据源文件路径 |
searchDisable | boolean | 否 | 搜索禁用标记 |
3.3 响应示例
json
{
"code": 0,
"data": [
{
"key": "a",
"name": "电影天堂资源",
"rating": 4.5,
"api": "https://example.com/api.php/provide/vod/at/xml",
"dataSource": "/data/video/example.json",
"searchDisable": true,
"group": "normal"
},
{
"key": "h",
"name": "示例视频源",
"rating": 4.2,
"api": "https://example.org/api.php/provide/vod/at/xml",
"group": "normal"
}
],
"msg": "成功"
}4. 获取视频列表
http
GET https://cik.netlify.app/api/video/list4.1 查询参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
api | string | 是 | 无 | 视频源 key |
s | string | 否 | 空字符串 | 搜索关键词 |
t | `string | number` | 否 | 不筛选 |
p | `string | number` | 否 | 1 |
请求示例:
http
GET https://cik.netlify.app/api/video/list?api=a&s=示例&p=1t 仅对当前 api 对应的视频源有效。不同视频源的类型 ID 不通用,应使用当前响应中的 types。
4.2 data
| 字段 | 类型 | 可能缺少 | 说明 |
|---|---|---|---|
page | PageInfo | 是 | 分页信息 |
video | VideoListItem[] | 是 | 视频列表 |
types | VideoType[] | 是 | 当前视频源的类型列表 |
name | string | 否 | 当前视频源名称 |
s | string | 否 | 实际采用的搜索关键词 |
type | `number | null` | 否 |
prefer | boolean | 否 | 是否属于特殊视频源分组 |
searchDisable | boolean | 否 | 搜索禁用标记 |
部分视频源异常时可能返回 code: 0,但缺少 page、video 和 types。
4.3 PageInfo
| 字段 | 类型 | 说明 |
|---|---|---|
page | number | 当前页码 |
pagecount | number | 总页数 |
pagesize | number | 每页记录数 |
recordcount | number | 总记录数 |
4.4 VideoListItem
| 字段 | 类型 | 说明 |
|---|---|---|
id | number | 当前视频源内的视频 ID |
name | string | 视频名称 |
note | string | 更新状态、集数或清晰度 |
last | string | 最后更新时间,格式由视频源决定 |
dt | string | 播放线路标识,可能由逗号分隔 |
tid | number | 视频类型 ID |
type | string | 视频类型名称 |
4.5 VideoType
| 字段 | 类型 | 说明 |
|---|---|---|
tid | `string | number` |
tname | string | 类型名称 |
4.6 响应示例
json
{
"code": 0,
"data": {
"page": {
"page": 1,
"pagecount": 1,
"pagesize": 20,
"recordcount": 1
},
"video": [
{
"last": "2025-08-28 17:27:47",
"id": 61772,
"tid": 7,
"name": "示例视频",
"type": "喜剧片",
"dt": "source,source-m3u8",
"note": "HD国语"
}
],
"types": [
{
"tid": "7",
"tname": "喜剧片"
}
],
"name": "电影天堂资源",
"s": "示例",
"type": null,
"prefer": false,
"searchDisable": true
},
"msg": "成功"
}5. 获取视频详情
http
GET https://cik.netlify.app/api/video/{api}/{id}5.1 路径参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
api | string | 是 | 视频源 key |
id | `string | number` | 是 |
请求示例:
http
GET https://cik.netlify.app/api/video/a/130325.2 data
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
last | string | 是 | 最后更新时间,格式由视频源决定 |
id | number | 是 | 视频 ID |
tid | number | 是 | 视频类型 ID |
name | string | 是 | 视频名称 |
type | string | 是 | 视频类型名称 |
pic | string | 是 | 封面图片 URL |
subname | string | 否 | 副标题或别名 |
lang | string | 是 | 语言,可能为空字符串 |
area | string | 否 | 地区 |
year | `string | number` | 是 |
state | `string | number` | 是 |
note | string | 是 | 更新状态、集数或清晰度 |
actor | string | 否 | 演员列表 |
director | string | 否 | 导演 |
des | string | 是 | 视频简介,可能包含 HTML 标签和实体 |
dataList | VideoSource[] | 是 | 播放线路列表 |
prefer | boolean | 是 | 是否属于特殊视频源分组 |
proxy | boolean | 是 | 是否需要使用代理播放页 |
5.3 VideoSource
| 字段 | 类型 | 说明 |
|---|---|---|
name | string | 播放线路标识,例如 dyttm3u8、dytt;名称由视频源定义 |
urls | VideoItem[] | 该线路下的播放项 |
5.4 VideoItem
| 字段 | 类型 | 说明 |
|---|---|---|
label | string | 集数、清晰度或播放项名称 |
url | string | 播放目标地址,可能是 .m3u8、.mp4、.webm 等媒体直链,也可能是包含实际媒体地址的播放网页 |
5.5 响应示例
json
{
"code": 0,
"data": {
"last": "2025-02-26 12:19:28",
"id": 13032,
"tid": 11,
"name": "示例电影",
"type": "剧情片",
"pic": "https://example.com/poster.jpg",
"subname": "Example Movie",
"lang": "英语",
"area": "美国",
"year": 2014,
"state": "",
"note": "HD中字",
"actor": "演员 A,演员 B",
"director": "导演 A",
"des": "<p>视频简介</p>",
"dataList": [
{
"name": "dyttm3u8",
"urls": [
{
"label": "HD中字",
"url": "https://example.com/video/index.m3u8"
}
]
},
{
"name": "dytt",
"urls": [
{
"label": "HD中字",
"url": "https://example.com/share/video-id"
}
]
}
],
"prefer": false,
"proxy": false
},
"msg": "成功"
}6. 获取豆瓣热门影视
http
GET https://cik.netlify.app/api/video/douban/hot该接口按照豆瓣热度分页返回电影或剧集。它只提供榜单元数据,不返回播放地址;如需搜索可播放资源,仍需使用视频列表接口。
6.1 查询参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
page | number | 是 | 页码,从 1 开始 |
category | string | 是 | 内容类型:movie 表示电影,tv 表示剧集 |
请求示例:
http
GET https://cik.netlify.app/api/video/douban/hot?page=1&category=movie
GET https://cik.netlify.app/api/video/douban/hot?page=2&category=tvcategory 不能省略;省略时服务端可能返回 HTTP 500。
6.2 分页
当前接口每页返回 20 条记录。data.total 表示总记录数,可以按下面的方式计算总页数:
js
const pageCount = Math.ceil(response.data.total / 20)请求超过总页数的页码时,接口仍可能返回 code: 0,但 data.data 是空数组,因此调用方应同时检查数组长度。
6.3 data
| 字段 | 类型 | 说明 |
|---|---|---|
total | number | 总记录数 |
data | DoubanHotItem[] | 当前页数据 |
DoubanHotItem 字段:
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 豆瓣条目 ID |
title | string | 标题 |
subtitle | string | 年份、地区、类型、导演和演员等摘要信息 |
year | string | 上映年份 |
poster | string | 海报代理路径,通常是相对于 https://cik.netlify.app 的路径 |
rate | number | 豆瓣评分;无评分时可能为 0 |
rateCount | number | 评分人数 |
poster 不是固定的绝对 URL。使用时可以基于接口域名补全:
js
const posterURL = new URL(item.poster, "https://cik.netlify.app").href6.4 响应示例
json
{
"code": 0,
"data": {
"total": 500,
"data": [
{
"id": "26752088",
"title": "我不是药神",
"subtitle": "2018 / 中国大陆 / 剧情 喜剧 / 文牧野 / 徐峥 王传君",
"year": "2018",
"poster": "/api/proxy?url=https%3A%2F%2Fexample.com%2Fposter.jpg&referer=inherit",
"rate": 9,
"rateCount": 2370285
}
]
},
"msg": "成功"
}7. 资源代理
http
GET https://deploy-3wi.pages.dev/api/proxy?url={targetUrl}7.1 查询参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
url | string | 是 | 经过 URL 编码的目标资源地址 |
请求示例:
http
GET https://deploy-3wi.pages.dev/api/proxy?url=https%3A%2F%2Fexample.com%2Fvideo7.2 响应
返回目标地址的原始响应内容,不使用 JSON 响应格式。内容可能是 HTML、图片、音频或视频。
8. 注意事项
- 视频
id只在所属视频源内有效,存储、缓存或构造详情请求时应同时保留api和id。 - 不同视频源的
tid含义不同,不能跨视频源复用。 types[].tid可能是字符串或数字。dt是播放线路标识,不是日期;其中的名称通常对应详情的dataList[].name,最终应以详情响应为准,不能仅根据名称后缀判断 URL 类型。last的格式由视频源决定,可能同时包含日期和时间。year、state的类型可能随视频源变化。subname、area、actor、director可能缺少。des可能包含第三方提供的 HTML,展示前应进行可信标签过滤或转义,不能直接作为未清洗的 HTML 插入页面。dataList可以同时包含同一播放项的媒体直链线路和网页线路,不同线路通常通过相同的label对应。dataList[].urls[].url不是固定格式,不能假定它一定以.m3u8结尾。- m3u8 地址可能返回主播放列表或媒体播放列表。主播放列表可以引用一个或多个不同码率、分辨率的子播放列表;能否选择清晰度取决于实际变体数量和播放器能力。
- 播放地址中的查询参数可能用于签名或有效期校验,应原样保留,不能统一删除。
- 播放网页通常会在页面内部继续加载实际媒体资源,常见格式是 m3u8,也可能是 MP4、WebM 或动态生成的地址。
- 详情接口只返回视频源提供的原始播放目标,不保证返回可直接交给媒体播放器的最终资源地址。网页地址可以直接在浏览器中打开;其他客户端若需要媒体直链,需要自行解析网页。
- 图片、播放网页和媒体资源可能受跨域策略或 HTTP 混合内容限制;浏览器无法直接加载时,可按需使用资源代理接口。
- JSON 接口与资源代理接口的响应格式不同。
