海洋CMS API接口调用教程

海洋CMS API接口调用教程

  • admin admin
  • 2026-08-25
  • 2047
  • 0

海洋CMS API接口调用教程是一份系统化的实战手册,它教您如何通过构造符合规范的HTTP请求,安全、高效地打通外部程序与海洋CMS后台的数据通道,实现影片自动采取、内容增删改查以及站点配置的远程操控。在短视频、在线影视站点运营中,自动化内容更新与批量管理...

¥ 0.00
当前位置:首页 > 海洋技术教程 > 海洋CMS API接口调用教程
详情介绍

海洋CMS API接口调用教程是一份系统化的实战手册,它教您如何通过构造符合规范的HTTP请求,安全、高效地打通外部程序与海洋CMS后台的数据通道,实现影片自动采取、内容增删改查以及站点配置的远程操控。

在短视频、在线影视站点运营中,自动化内容更新与批量管理永远是核心痛点,海洋CMS作为一款广泛使用的PHP影视内容管理系统,预留了一套灵活且功能强大的API接口体系,用好这套接口,您便能告别重复手工操作,让脚本、采集器甚至移动App直接与CMS后台对话,下面,我将从基础概念到代码实战,拆解出超过2000字的纯干货内容,确保您读完就能上手调用。

快速认识海洋CMS API能做什么

海洋CMS的API并非一个孤立的“数据出口”,而是将后台绝大部分核心功能进行了原子化封装,主要能力包括:

  • 资源采取:触发指定资源站的影片、剧集、分类信息抓取入库,管理**:添加、修改、删除影片、频道、标签,支持批量绑定。

  • 数据读取:按分类、分页、关键词、时间范围获取影片列表、详情、播放地址。

  • 系统配置:远程更新缓存、操作解析接口、开关SEO设置(需最高权限)。

  • 用户整合:实现外部系统的会员同步、评论同步(部分扩展支持)。

理解这些能力后,您会发现API的本质就是“用代码代替鼠标点击”,我们一步步拆解调用流程。

准备工作:开启API并获取密钥

1 确保系统版本支持

建议使用海洋CMS V10及以上版本(V12同样兼容),登录后台,在“系统 / 系统设置 / API配置”中,确认“是否开启API”选项已勾选,默认情况下,API入口地址为您的域名后接 index.php?s=api

https://demo.com/index.php?s=api

部分环境配置了伪静态,入口也可能是 /api.php/api,请以实际服务器设定为准。

2 获取安全凭证

在API配置页面,您会看到 APPIDAPPKEY 两个字段,这就是调用私有接口的“账号密码”,如果没有,点击“生成”即可获得一对字符串,务必妥善保管APPKEY,它等同于操作密码,泄露将导致系统被远程操控。

若仅需调用公开数据(如获取分类、影片列表),可跳过密钥环节,直接使用无签名请求,但为了演示完整,下文均以私有接口为例,因为这才是开发重点。

API通信协议与通用规则

海洋CMS API基于HTTP协议,采用经典的QueryString传参,支持GET与POST,所有接口返回JSON格式数据,跨域环境下支持JSONP(添加 callback 参数)。

1 请求基础URL

https://您的域名/index.php?s=api

2 通用参数

每个请求都至少携带以下参数中的一部分:

参数名类型说明
cstring控制器(接口模块),如 res(资源)、category(分类)、collect(采集)
astring动作方法,如 listaddeditdel,部分接口可省略
appidstring应用ID,用于签名或身份识别
tstring时间戳,10位当前Unix时间戳,用于防重放
signstring请求签名,MD5加密结果,用于防改动
midint模块ID,如影片模块通常为1
callbackstringJSONP回调函数名,跨域时使用

3 签名生成机制(核心)

私有接口强制验证签名,否则将返回 {"code":-1,"msg":"签名错误"},签名算法极简单:

  1. APPIDAPPKEY 与当前时间戳 t 拼接成一个字符串,格式为:APPID.APPKEY.t (注意中间用英文句点连接)。

  2. 计算该字符串的MD5值,并转为小写。

  3. 将该MD5值作为 sign 参数的值传递。

用数学表达:sign = md5(appid + '.' + appkey + '.' + t)

举例:假设 appid=12345appkey=abcdef6789,当前时间戳 t=1716000000,拼接字符串为 abcdef6789.1716000000,计算MD5得到 e10adc3949ba59abbe56e057f20f883e,则请求URL中必须包含 &appid=12345&t=1716000000&sign=e10adc3949ba59abbe56e057f20f883e

特别注意:服务器会校验收到的 t 与当前时间的差值,默认允许1800秒(30分钟)的误差,超时必须重新生成时间戳和签名,这是防重放攻破的关键。

4 响应结构

所有接口返回的HTTP状态码均为200,但业务状态由JSON内部 code 字段表示:

{
"code":1,
"msg":"成功",
"data":{...}
}
  • code=1 表示成功,0 通常为无数据,-1 为失败。

  • data 可以是对象、数组或字符串,具体依接口而定。

公开接口实战:零门槛获取数据

公开接口无需 appid 和签名,可直接在浏览器地址栏体验,适合做静态数据展示或前端Ajax调用。

1 获取分类列表

接口?s=api&c=category&mid=1

  • mid 为模块ID,1代表影片模块。请求示例

    GET/index.php?s=api&c=category&mid=1HTTP/1.1

    返回示例(精简):

    {
    "code":1,
    "data":[
    {"id":1,"name":"电影","type_id":1},
    {"id":2,"name":"连续剧","type_id":2}
    ]
    }

    您可以遍历data数组,动态渲染前端导航菜单。

2 获取影片分页数据

接口?s=api&c=res&mid=1&page=1&limit=10

  • page 页码,limit 每页数量,不传 limit 默认20。请求示例

    GET/index.php?s=api&c=res&mid=1&page=2&limit=5

    返回的 data.list 为影片数组,data.total 为总数,配合前端分页组件,轻松构建无限滚动列表。

3 影片搜索接口

接口?s=api&c=res&a=search&mid=1&wd=关键词

  • wd 为搜索词,需URL编码。示例:搜索“流浪地球”:

    GET/index.php?s=api&c=res&a=search&mid=1&wd=%E6%B5%81%E6%B5%AA%E5%9C%B0%E7%90%83

    搜索结果结构与分页接口一致,数据实时返回。

私有接口全解:安全操控你的资源库

私有接口是运营自动化的核心,我们以最常用的采集、添加影片、删除为例,演示完整调用流程。

1 触发资源站采集

采集接口用于让CMS后端去目标资源站抓取影片信息,接口地址为:

?s=api&c=collect&a=collect

必填参数(除签名参数外):

  • url:资源站采集地址,如 https://example.com/api.php/provide/vod/at/xml/,需URL编码。

  • h :指定采集类型,通常为24小时或按需,写 124。(视资源站规则)

  • mid:模块ID,影片模块填1。

  • tid:要采集到的目标分类ID,从分类接口获取。

假设我们要将采集资源入库到分类ID为2的“连续剧”下:

GET/index.php?s=api&c=collect&a=collect&mid=1&tid=2&h=24&url=https%3A%2F%2Fexample.com%2Fapi.php%2Fprovide%2Fvod%2Fat%2Fxml%2F&appid=12345&t=1716000000&sign=e10adc3949ba59abbe56e057f20f883e

成功返回:

{
"code":1,
"msg":"采集任务已添加,请在后台查看进度",
"data":""
}

采集是异步任务,您可继续调用其他接口,后台脚本会逐一入库。

2 添加一部影片

需要向 c=res&a=add 接口POST数据,支持表单格式或JSON,常用字段:

  • name:影片名称

  • type_id:所属分类ID

  • pic:海报图片URL

  • content:简介

  • actor:主演

  • director:导演

  • area:地区

  • lang:语言

  • year:年份

  • serial:连载状态(1连载,0完结)

  • playbody:播放器组与地址,格式复杂,需按照系统约定格式:播放器类型$$$集数$地址#集数$地址

播放地址拼接示例(m3u8类型):qiyi$$$第01集$https://v.com/01.m3u8#第02集$https://v.com/02.m3u8

POST请求体:

name=测试影片&type_id=2&pic=https://img.com/pic.jpg&actor=张三,李四&year=2025&playbody=qiyi$$$第01集$https://v.com/01.m3u8

同时加上签名参数,将签名参数可放在URL中,POST体传业务字段,成功返回插入后的影片ID。

3 批量删除影片

接口:c=res&a=del&ids=1,2,3ids 为逗号分隔的影片ID,需签名。

删除操作极度危险,务必在测试环境验证后上线。

4 远程更新缓存与静态页

运营中经常需要更新首页、分类页缓存或生成静态,可通过接口:

?s=api&c=api&a=html&type=index

type 可选 index(首页)、category(分类页)、detail页)等,更新所有缓存可连调多次。

这些接口是开发定时任务的基础,结合Linux Crontab或云函数,就能实现无人值守站点维护。

代码实战:用PHP和Python搭建客户端

理论讲完,我们写一段可复用的代码,方便集成到您的采集器或管理后台。

1 PHP封装示例

<?php
classOceanApi{
private$baseUrl;
private$appid;
private$appkey;
publicfunction__construct($baseUrl,$appid,$appkey){
$this->baseUrl=rtrim($baseUrl,'/').'/index.php?s=api';
$this->appid=$appid;
$this->appkey=$appkey;
}
//构造签名并发送请求
privatefunctionrequest($params=[]){
$t=time();
$sign=md5($this->appid.'.'.$this->appkey.'.'.$t);
$defaults=[
'appid'=>$this->appid,
't'=>$t,
'sign'=>$sign
];
$allParams=array_merge($defaults,$params);
$url=$this->baseUrl.'&'.http_build_query($allParams);
$response=file_get_contents($url);
returnjson_decode($response,true);
}
//获取分类列表
publicfunctiongetCategories($mid=1){
return$this->request(['c'=>'category','mid'=>$mid]);
}
//获取影片列表
publicfunctiongetVods($page=1,$limit=20,$mid=1){
return$this->request([
'c'=>'res',
'mid'=>$mid,
'page'=>$page,
'limit'=>$limit
]);
}
//触发采集
publicfunctioncollect($url,$tid,$mid=1,$h=24){
return$this->request([
'c'=>'collect',
'a'=>'collect',
'mid'=>$mid,
'tid'=>$tid,
'h'=>$h,
'url'=>urlencode($url)
]);
}
}
//使用示例
$api=newOceanApi('https://demo.com','your_appid','your_appkey');
$category=$api->getCategories();
print_r($category);

PHP版本简洁明了,利用 file_get_contents 即可快速验证,生产环境建议使用cURL并设置超时与错误处理。

2 Python请求示例

importtime
importhashlib
importrequests
classOceanAPI:
def__init__(self,base_url,appid,appkey):
self.base_url=base_url.rstrip('/')+'/index.php?s=api'
self.appid=appid
self.appkey=appkey
def_sign(self):
t=int(time.time())
raw=f"{self.appid}.{self.appkey}.{t}"
sign=hashlib.md5(raw.encode()).hexdigest()
return{'appid':self.appid,'t':t,'sign':sign}
defget(self,params):
signed=self._sign()
params.update(signed)
resp=requests.get(self.base_url,params=params,timeout=10)
returnresp.json()
defget_vods(self,page=1,limit=20,mid=1):
params={'c':'res','mid':mid,'page':page,'limit':limit}
returnself.get(params)
defcollect(self,url,tid,mid=1,h=24):
params={
'c':'collect','a':'collect',
'mid':mid,'tid':tid,
'h':h,'url':url
}
returnself.get(params)
#使用
api=OceanAPI('https://demo.com','app123','key456')
data=api.get_vods(page=1,limit=3)
print(data)

Python版本用 requests 库更显专业,可轻松挂接到Scrapy、Flask等工程中。

常见错误排查与安全加固

即使按照文档操作,也可能遇到一些坑,下面列出高发问题:

1 签名错误(code:-1, msg:签名错误)

  • 检查拼接顺序是否为 appid.appkey.t,中间不要多出空格。

  • 确认时间戳 t 与服务器时间同步,偏差勿超1800秒。

  • MD5结果需转为小写十六进制字符串。

  • 仔细检查 appkey 是否复制完整,有无前后空白。

2 跨域与JSONP

若前端使用Ajax调用出现跨域错误,只需添加 callback=jQueryxxx 参数,服务端会返回 JSONP 包裹的响应,PHP端无需额外配置。

3 采集无反应

  • 确认目标资源站URL是否可被服务器外网访问。

  • 采集接口是异步的,返回成功不代表立即入库,请等待1-2分钟后刷新影片列表。

  • 检查后台采集设置里是否启用了“API采集”,以及资源站是否在允许列表中。

4 安全建议

  • IP白名单:在API配置中限定允许调用的IP,防止泄露密钥后被滥用。

  • HTTPS强制:避免签名和密钥在传输中被抓包,务必启用SSL证书。

  • 定期更换APPKEY:建议每季度更换,并收回旧凭证。

  • 日志监控:记录所有API请求,异常签名尝试立即发出告警。

  • 最小权限:如果仅需数据读取,无需开启删除、写入接口,可在代码层做入口拦截。

高级技巧:构建自己的内容中台

当您熟练调用API后,可以设计更复杂的自动化流水线。

  • 定时采集与过滤:编写cron脚本每天凌晨触发多个资源站采集,并通过自定义规则过滤标题含敏感词的影片。

  • 多站点同步:从主站API拉取最新影片,再调用从站API批量添加,实现一拖N内容分发。

  • 播放地址实时检查:遍历影片库,用API获取播放地址,再用脚本检测有效性,失效自动标记并触发重新采集。

  • 数据看板:将API返回的统计数据(分类数量、今日新增、待审核等)推送到飞书/钉钉群机器人,实现运营日报。

对于前端渲染的站点,您甚至可以抛弃传统模板,完全用前端框架(Vue/React)调用API生成纯静态页面,享受极致的加载速度和SEO友好度(结合SSR),海洋CMS API正是这种JAMStack架构的最佳后端支撑。

海洋CMS API接口调用教程  第1张

海洋CMS API接口调用教程远不止一套参数列表,它揭示了影视站点从手工作坊走向自动化运维的可行路径,从公开数据读取到私有内容操控,再到签名安全与代码封装,您已经完整掌握了整套调用方法,打开您的后台生成一对凭证,用文中的PHP或Python代码做第一次探测,看到返回的 code:1 那一刻,您就叩开了高效运营的大门。

0