一、目录及主要文件说明
- bootstrap目录,存放框架引导及启动文件,非底层改动,无需修改。其中的functions.inc中可以定义一些全局函数
- error目录,存放404、500等常见错误模板文件,非需勿动
- includes目录,drupal框架引导文件,非需勿动
- libs目录,存放框架常用类库,类似于zend framework结构,非需勿动
- mobile目录,开发h5存储的静态文件目录
- modules目录,框架常用类库,非需勿动
- public目录,存放全局常用img/css/js/font等常用静态文件,可以分目录分类存放
二、redis数据存储
Redis是一个开源的键值对存储数据库,它支持多种数据结构,如字符串、列表、哈希表、集合等。Redis的特点是速度快、可靠性高、支持事务、支持持久化、支持复制等功能,使其广泛应用于缓存、计数器、队列、消息发布与订阅等场景。
Redis的使用方式类似于普通的键值对存储,用户可以使用set、get等命令来操作数据。同时,Redis还提供了丰富的数据结构,如list、set、hash等,在使用时可以根据不同的需求选择不同的数据结构。
Redis的优点在于其快速、高效的数据存储和查询能力,使其在对速度有要求的应用中尤为适用。而且通过支持多种数据结构,Redis也可以满足不同应用场景的需求,如缓存、计数器、消息队列等。
三、源代码功能同步方式
源码同步技术是指通过网络将一个软件项目的源代码从一个位置同步到另一个位置,以实现代码共享、协作开发等功能的技术。
常用的源码同步技术包括:
-
Git:是一种基于分布式版本控制系统的源码同步技术。通过Git,可以创建不同的分支、合并代码、版本控制等操作。
-
SVN:是一种集中式版本控制系统,可以用于同步源代码。SVN可以记录文件的历史版本,还可以对文件进行版本控制。
-
Mercurial:是一种分布式版本控制系统,可以实现源码同步、合并等功能。Mercurial的使用方法类似于Git。
-
Perforce:是一种集中式版本控制系统,可以实现源码同步、版本控制等功能。Perforce可以跨平台使用。
四、功能构建
1. 首先创建一个创意工程,并上传相应素材文件
2. 选择对应的视频素材剪辑模式,创建剪辑计划
3. 置顶投放计划,配置挂载信息
4. 投放记录预览及效果查看
5. 智能客服中台配置及线索收集
五、技术端开发(素材上传部分)
URL 请求
参数名称 | 参数类型 | 参数描述 | 参数示例 | 是否必填 |
---|---|---|---|---|
open_id | string | 通过/oauth/access_token/获取,用户唯一标志 | ba253642-0590-40bc-9bdf-9a1334b94059 | true |
access_token | string | 调用/oauth/access_token/生成的token,此token需要用户授权。 | act.1d1021d2aee3d41fee2d2add43456badMFZnrhFhfWotu3Ecuiuka27L56lr | true |
Body 请求
参数名称 | 参数类型 | 参数描述 | 参数示例 | 是否必填 |
---|---|---|---|---|
media | [] | 素材文件 | <nil> | false |
响应参数
参数名称 | 参数类型 | 参数描述 | 参数示例 |
---|---|---|---|
extra | struct | <nil> | |
data | struct | <nil> |
$breadcrumbs = [
['title' => 'AI视频创意', 'link' => '#'],
['title' => '开始创作', 'link' => ''],
];
$this->buildBreadcrumbs($breadcrumbs);
//搜索专用
$keyword_type = $this->request->getStrParam('keyword_type');
$keyword = $this->request->getStrParam('keyword');
$this->output['keyword_type'] = $keyword_type;
$this->output['keyword'] = $keyword;
$dv_id = $this->request->getIntParam('dv_id'); //视频工程ID
$this->output['dv_id'] = $dv_id;
$type = $this->request->getIntParam('type', 0); //素材类型
$scene = $this->request->getIntParam('scene', 1);
$this->output['scene'] = $scene;
//获取视频信息
$video_model = new App_Model_Douyin_MysqlVideoStorage();
$video_info = $video_model->getRowByIdSid($dv_id, $this->sid);
if (empty($video_info)) {
plum_redirect_with_msg('视频创意工程不存在');
}
$mixed_video_mode = $video_info['dv_video_mode'];
if (in_array($mixed_video_mode, [11])) { //智能图片组合
$type = in_array($type, [0, 1]) ? 3 : $type; //默认为图片素材类型
} else {
$type = in_array($type, [0, 3]) ? 1 : $type; //默认为视频素材类型
}
//获取素材列表
$where = [
['name' => 'dvm_ds_id', 'oper' => '=', 'value' => $this->sid],
['name' => 'dvm_dv_id', 'oper' => '=', 'value' => $dv_id],
['name' => 'dvm_material_type', 'oper' => '=', 'value' => $type]
];
//视频类型,区分混剪模式
if ($type == 1) {
$where[] = ['name' => 'dvm_video_mixed_mode', 'oper' => '=', 'value' => $video_info['dv_video_mode']];
}
if (!empty($keyword_type)) {
$where[] = ['name' => $keyword_type, 'oper' => 'like', 'value' => "%{$keyword}%"];
}
//智能场景组合,视频素材加场景值筛选
if ($type == 1 && $mixed_video_mode == 4) {
$scene_model = new App_Model_Douyin_MysqlVideoSceneStorage();
$scene_count = $scene_model->getCountByDvid($dv_id);
if ($scene_count == 0 && $video_info['dv_video_use'] > 0) {
for ($i = 1; $i <= $video_info['dv_video_use']; $i++) {
$indata = [
'dvs_ds_id' => $this->sid,
'dvs_dv_id' => $dv_id,
'dvs_name' => "场景" . $i,
'dvs_duration' => $video_info['dv_video_shot'] * 1000,
'dvs_