发布到苹果CMS教程
1 - 采集API配置教程
开启采集api之后,可提供给苹果CMS采集已发布的视频和剧集,包括视频标签、简介等在EFV编辑的所有视频信息。
且后面新增的、或修改过相关信息的视频和剧集均可以自动同步更新到苹果CMS。
即在苹果CMS配置好EFV采集api后,视频上传,标签、简介等数据编辑可全在EFV后台通过豆瓣获取或自行编辑。
采集步骤
开启EFV的采集api并配置正确的域名
提示:转码设置的第一个设置域名选项一定要填写正确,也就是采集过去的M3U8和封面域名。
我们先去EFV后台,前往左侧转码相关,找到对接苹果CMS,点进去可设置采集api。
建议设置采集key,如果你只想给某些人采集,那么还可以设置采集ip白名单,多个ip使用$隔开,如:
#只给ip为123.23.123.123的苹果CMS采集
123.23.123.123
#只给ip为123.23.123.123和132.132.43.12的苹果CMS采集
123.23.123.123$132.132.43.12
#只给ip为123.23.123.123、132.132.43.12和143.154.34.23的苹果CMS采集
123.23.123.123$132.132.43.12$143.154.34.23
然后再前往转码设置,找到最上面的设置域名,填入你EFV绑定的域名地址,也就是采集接口显示的M3U8、截图等域名。
前往苹果CMS后台调整采集参数配置
先进入到苹果CMS后台,点击最上面导航的系统栏目,在左侧找到采集参数配置,大致需要调整的地方如下:

配置说明:
1、入库重复规则,该处默认就行了;注意如果老用户此前使用过第三方CMS发布系统,建议取消掉演员和导演,不然采集数据可能会和发布系统重复。
2、二次更新规则,也就是你在EFV修改过视频和剧集的相关信息的会不会再次同步更新到苹果CMS,可自行设置,也可默认;如果你有剧集,请把连载数、备注和总集数选上。
前往苹果CMS后台设置采集接口
先进入到苹果CMS后台,点击最上面导航的采集栏目,在左侧找到自定义接口,点击添加,设置如下:
提示:接口地址为 EFV绑定域名 + /api/provider/vod/?ac=detail&apiKey=yourkey,yourkey为采集key;如未设置key,则接口地址为/api/provider/vod/?ac=detail

资源名称和接口地址自行设置,接口类型选择JSON,其它和上面截图一样即可,添加好自定义接口后,再点击接口列表已添加的接口地址,如下:

点进去后,在最上面我们会看到EFV的分类信息,如下:

然后点击分类旁边的绑定,选择苹果CMS的分类,这样就可以将EFV的分类视频同步到苹果CMS指定分类下了。
最后回到自定义接口列表,点击右侧的采集全部即可,等待采集完,EFV全部的已发布视频和剧集都会被同步到苹果CMS。

相关说明
注意事项
EFV的视频和剧集一定要设置好分类,且配置接口的时候,EFV分类一定要绑定好苹果CMS的分类,不然未设置或未绑定好分类的视频无法被苹果CMS采集。
EFV默认只有已发布的视频和剧集才能被采集,可先对已转码完成的视频和剧集进行相关编辑后再发布出去;如果你不需要给视频或剧集编辑相关信息,可直接在采集配置页面打开展示有效数据开关即可,就不需要发布了,会自动将转码完成和有集数的剧集发送到接口提供采集。
如果有剧集,建议不要在EFV给剧集的单集设置分类,防止单集被误操作发布出去了,这样苹果CMS会当电影采集下来,不绑定分类,就不会采集误发布的单集
发布视频和剧集的多种方法
视频发布分为单个视频发布、批量发布和全部发布,可前往EFV后台 ⇒ 进入视频管理,进行相关操作,如图:

剧集发布,发布剧集之前,请提前将剧集里面的单集添加到剧集里面,然后找到想要发布的剧集右侧操作选项,点击正式发布即可。
如何给采集接口设置不同的图片和m3u8域名
提示:如果给图片或M3U8单独设置域名,则会覆盖转码设置的设置域名参数,即优先使用。
一般采集接口的M3U8和图片域名默认为转码设置的第一个设置域名参数,如果你有特殊需求,是可以单独进行设置的。
单独设置图片域名
可直接在EFV后台的对接苹果CMS功能设置页面,找到相关设置项进行设置。
单独设置M3U8域名
目前最新版支持自定义M3U8域名,需要直接在采集接口使用参数传递,使用方法如下:
#直接在采集接口后面添加m3u8url参数即可,比如我要指定m3u8域名为https://cdn1.com
/api/provider/vod/?ac=detail&m3u8url=https://cdn1.com
/api/provider/vod/?ac=detail&apiKey=yourkey&m3u8url=https://cdn1.com
#然后你可以浏览器访问接口,检查m3u8域名是否变成了你传入的参数,如不生效则需更新最新版
最后将带M3U8域名参数的接口地址填入到苹果接口配置项即可,且目前图片域名可以直接在后台单独设置。
全英文数据api采集接口
提示:如打开英文数据采集接口显示404,需更新到最新版再使用。
目前提供一个输出英文数据的苹果采集api接口,可用来做纯英文站点,地址:/api/provider/vod/en/?ac=detail,用法参考上面,只需要改一下采集地址即可。
英文数据填充说明:
#视频和剧集的标题、简介
可在视频管理、剧集管理的详细编辑的英文字段填充。
#视频和剧集的语言、导演、主演、编剧、发行地区、分类标签
这些字段均在标签管理,直接前往CMS相关 ⇒ 标签管理进行英文数据填充。
#视频和剧集的分类
可在分类管理进行英文数据填充,分类仅起到绑定分类,并入库苹果cms作用,也可不用翻译。
以上英文数据均可使用ai自动翻译,可前往EFV后台 ⇒ CMS相关 ⇒ 多语言翻译进行操作,如找不到CMS相关入口,可点击左下角侧栏开关,开启CMS导航即可。
最后该英文接口优先显示英文数据,如果部分字段没填充英文数据,则会使用默认的中文数据,推荐结合苹果cms的纯英文模板一起使用。
2 - 设置定时自动采集
配置定时采集任务
先进入到苹果CMS后台,点击最上面导航的采集栏目,打开自定义接口,找到你添加的接口,把鼠标移动到右边的采集所有,右键复制链接地址。
提示:这里默认设置采集所有,如果你数据量比较大,可能采集会比较慢,可自行根据实际情况选择 采集当天 或 采集本周。

我们复制好接口的采集所有链接后,再点击最上面导航的系统栏目,在左侧找到定时任务配置,点击添加,大致如下:

状态开启,名称和备注自行填入,执行文件选择自定义采集collect,附加参数就是上面复制的接口采集所有链接,执行周期和时间可不填,好像不会生效。
设置好了定时配置后,返回定时任务列表,找到你添加的任务,继续把鼠标移动到右边的测试按钮,右键复制链接地址。
提示:复制测试链接之前,我们可以先点击测试按钮,看看能不能正常采集,确定没问题了,再复制连接。

最后保存好定时任务的测试链接,我们进入下一步。
设置定时计划
如果你有安装宝塔面板,且任何服务器的宝塔面板都可以直接设置,进入宝塔后台,找到左侧的计划任务,点击添加,如下:

任务类型为访问URL,名称和执行周期自行设置,URL地址为上面获取到的测试链接。
如果你没有安装过宝塔面板,可直接使用SSH客户端,登录EFV所在的服务器,运行命令:
#先将下面命令行中的https://cms.test整个链接全部换成你的测试链接,再一起全部复制到ssh运行
crontab -l > crontab.bak
echo '*/30 * * * * curl -sSL "https://cms.test/api.php/timming/index.html?enforce=1&name=postapi"' >> crontab.bak
crontab crontab.bak
rm -rf crontab.bak
该命令行是每30分钟运行一次,可在运行之前,自行调整时间,怕调整出问题的,可直接默认。
3 - 采集播放器类型参考
先前往苹果CMS后台,再点击最上面导航的视频栏目,在左侧找到播放器,每个播放器的编码就可以直接看到了,如下:

然后将你要使用的播放器编码,填入到采集设置页面的播放器选项。
4 - 采集下载器类型参考
可前往苹果CMS后台,再点击最上面导航的视频栏目,在左侧找到下载器,每个下载器的编码就可以直接看到了,如下:

然后将你要使用的下载器编码,填入到采集设置页面的下载器选项。
5 - 对接时间戳防盗链功能
开启EFV时间戳功能
先前往EFV后台防盗链/图片加密设置,开启时间戳+播放次数防盗链,并设置时间戳防盗链key值,然后再看下该功能对接的一些参数介绍 ⇒ 传送门。
修改苹果CMS相关文件
首先编辑苹果CMS源码的application/common/controller/All.php文件,在开头根据下面示例,在指定位置添加相关代码,如:
class All extends Controller
{
var $_ref;
var $_cl;
var $_ac;
var $_tsp;
var $_url;
public function __construct()
{
parent::__construct();
$this->_ref = mac_get_refer();
$this->_cl = request()->controller();
$this->_ac = request()->action();
$this->_tsp = date('Ymd');
}
// 在后面添加下面这一段代码
protected function getKey($url, $from)
{ $efvtokenKey = 'efvtoken'; //设置EFV时间戳防盗链KEY值,修改efvtoken值即可
if (strpos($url, "/movie") !== false) {
$removedProtocolAndDomain = preg_replace('#^(https?:)?(//)?#', '', $url);
$removedDomain = substr($removedProtocolAndDomain, strpos($removedProtocolAndDomain, '/'));
$removedMovieAndM3U8 = str_replace(['/movie', '.m3u8'], '', $removedDomain);
$currentTimestamp = time() * 1000;
$fiveMinutesLaterTimestamp = $currentTimestamp + (60 * 1000); //链接过期时间,默认60秒,如果你想缩短时间,修改60即可
$combinedString = $removedMovieAndM3U8 . '&counts=2×tamp=' . $fiveMinutesLaterTimestamp . $efvtokenKey;
$encryptedString = md5($combinedString);
$outurl = $url . '?counts=2×tamp=' . $fiveMinutesLaterTimestamp . '&key=' . $encryptedString;
}
else if (strpos($url, "/videos") !== false) {
$removedProtocolAndDomain = preg_replace('#^(https?:)?(//)?#', '', $url);
$removedDomain = substr($removedProtocolAndDomain, strpos($removedProtocolAndDomain, '/'));
$currentTimestamp = time() * 1000;
$fiveMinutesLaterTimestamp = $currentTimestamp + (60 * 1000); //链接过期时间,默认60秒,如果你想缩短时间,修改60即可
$combinedString = $removedDomain . '&counts=2×tamp=' . $fiveMinutesLaterTimestamp . $efvtokenKey;
$encryptedString = md5($combinedString);
$outurl = $url . '?counts=2×tamp=' . $fiveMinutesLaterTimestamp . '&key=' . $encryptedString;
}
else {
$outurl = $url;
}
if ($from == 'dplayer') {
$outurl = urlencode($outurl);
}
return $outurl;
}
// 添加到这里结束
protected function load_page_cache($tpl,$type='html')
{
if(defined('ENTRANCE') && ENTRANCE == 'index' && $GLOBALS['config']['app']['cache_page'] ==1 && $GLOBALS['config']['app']['cache_time_page'] ) {
// 代码省略
}
}
&counts=2为链接读取多少次后过期,默认2次就过期,可自行修改,一起有4个地方,且最少设置为2,或者3次,有些手机浏览器会替换播放器,导致需要多加载1次,甚至2次才能播放。
接下来还是在All.php文件修改,修改如下:
$player_info['url'] = (string)$info[$listfun][$param['sid']]['urls'][$param['nid']]['url'];
// 可通过搜索上面的代码关键词定位到指定位置,再添加下面2行代码即可
$url = $this->getKey($player_info['url'], $player_info['from']);
$player_info['url'] = $url;
// 添加到这里结束
$player_info['url_next'] = (string)$info[$listfun][$param['sid']]['urls'][$param['nid']+1]['url'];
修改后基本算是对接完成,后面如果你关闭时间戳防盗链功能,需恢复源文件,以免播放出现问题。
6 - 采集报错和字段修改
采集报错
如果报错SQLSTATE[HY000]: General error: 1364 Field 'vod_plot_name' doesn't have a default value,vod_plot_name为数据字段,可能会是其它,可以直接联系我们进行修复。
如果报错Data too long for column ‘vod_blurb’ at row 1,这种大概就是有标签数据超过了Mysql数据库字段长度,如果你是宝塔安装的MYSQL,可直接找到安装的Mysql,点击右侧的设置,选择配置修改,将sql-mode一行改成sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;,然后重启Mysql后再次尝试。
字段修改
采集代码在EFV源码的controller/cms.js文件夹,可以搜索exports.macCms,大致范围如下:
exports.macCms = async (req, res) => {
const setting = await Setting.findOne();
// 内容省略
} else {
return res.json({ code: 0, msg: '对不起,未开启对接API' });
}
};
比如关键词正片等固定字段,都可以自己修改,或者可以加入一些其它发布字段,不会的可使用ai,修改后使用命令pm2 reload efvcms重启程序生效。