短视频接口初步规划
- 发布视频
- 删除视频
- 获取热门搜索
- 搜索视频
- 清除搜索历史
- 获取搜索历史
- 短视频详情
- 对视频进行评论
- 评论列表
- 删除评论
- 回复评论
- 查看评论回复
- 删除评论回复
- 短视频音乐列表
- 关注用户和取消用户
- 用户主页
- 作者关注
- 作者粉丝
- 七牛云上传
- 点赞和取消点赞
- 获取用户点赞视频列表
- 收藏和取消收藏
- 获取用户收藏视频列表
- 同城的视频列表、关注的视频列表、 推荐的视频列表
- 系统设置的关键词
- 搜索用户
- 获取系统配置、前端也可以直接上传
- 版本号
- 检测更新
- 获取分类列表
- 获取分类视频列表
- 获取其他用户信息
- 获取用户视频列表
- 获取用户关注列表
- 获取用户粉丝列表
其他
- 更新用户资料
- 广告接口
- 点赞和取消点赞评论
- 启动图
- 协议
- 发送验证码
- 用户登录
- 用户注册
- 获取用户信息
- 验证用户Token信息
- 用户退出登录
- 客服聊天消息等
<?php
namespace app\api\controller;
use jplt\Pinyin;
use jplt\Dates;
use think\Config;
use think\facade\Db;
use app\common\lib\Show;
use app\common\model\mysql\LogicUser;
// 引入七牛鉴权类
use Qiniu\Auth;
// 引入七牛上传类
use Qiniu\Storage\UploadManager;
class Video extends BaseController
{
// protected $noNeedLogin = [
// 'getDefaultVideoList',
// 'index',
// 'getCommentList',
// 'heartComment',
// 'searchVideo',
// 'searchAuthor',
// 'goods_details',
// 'collage',
// 'search',
// 'On_shelf',
// 'end_shelf',
// 'goods_list'
//
//
// ];
<<<<<<< HEAD
=======
>>>>>>> dev-wang
/**
* 上传视频
*
* @ApiTitle (发布视频)
* @ApiSummary (发布视频)
* @ApiAuthor (接口作者)
* @ApiMethod (POST)
* @ApiRoute (/api/video.Video/addVideo)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name="file", type="string", required=true, description="视频路径")
* @ApiParams (name="title", type="string", required=true, description="标题")
* @ApiParams (name="content", type="string", required=true, description="内容")
* @ApiParams (name="longitude", type="string", required=true, description="经度")
* @ApiParams (name="latitude", type="string", required=true, description="纬度")
* @ApiParams (name="city", type="string", required=true, description="城市")
*
* @ApiParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
* @ApiReturnParams (name="code", type="integer", required=true, sample="0")
* @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功")
* @ApiReturnParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
* @ApiReturn ({
'code':'1',
'msg':'返回成功'
})
*/
public function qiniu() {
require_once APP_PATH . '../vendor/qiniu/php-sdk/autoload.php';
// 七牛云配置信息
$accessKey = Config::get("qiniu.accessKey");
$secretKey = Config::get("qiniu.secretKey");
$bucketName = Config::get("qiniu.bucket");
$bucketurl = Config::get("qiniu.bucketurl");
//默认file
$fileName = Config::get("qiniu.fileName");
$file = $this->request->file($fileName);
if (empty($file)) {
$this->error('请选择要上传的文件');
}
// 要上传图片的本地路径
$filePath = $file->getRealPath();
$ext = pathinfo($file->getInfo('name'), PATHINFO_EXTENSION);
//后缀
// 上传到七牛后保存的文件名
$key = substr(md5($file->getRealPath()) , 0, 5). date('YmdHis') . rand(0, 9999) . '.' . $ext;
// 构建鉴权对象
$auth = new Auth($accessKey, $secretKey);
$uptoken = $token = $auth->uploadToken($bucketName);
$uploadMgr = new UploadManager();
list($ret, $err) = $uploadMgr->putFile($uptoken, $key, $filePath);
if ($err !== null) {
$this->error('上传失败');
} else {
$key = 'http://'.$bucketurl.'/'.$ret['key'];
$data['url'] = $key;
$this->success('上传成功',$data);
}
}
/**
* 发布视频
*
* @ApiTitle (发布视频)
* @ApiSummary (发布视频)
* @ApiAuthor (接口作者)
* @ApiMethod (POST)
* @ApiRoute (/api/video.Video/addVideo)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name="file", type="string", required=true, description="视频路径")
* @ApiParams (name="title", type="string", required=true, description="标题")
* @ApiParams (name="content", type="string", required=true, description="内容")
* @ApiParams (name="longitude", type="string", required=true, description="经度")
* @ApiParams (name="latitude", type="string", required=true, description="纬度")
* @ApiParams (name="city", type="string", required=true, description="城市")
*
* @ApiParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
* @ApiReturnParams (name="code", type="integer", required=true, sample="0")
* @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功")
* @ApiReturnParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
* @ApiReturn ({
'code':'1',
'msg':'返回成功'
})
*/
public function videoMusics() {
$page = input('page');
$title = input('title');
$limit = input('limit');
// $video_musics["count"]= Db::table("jm_video_musics")
// ->where("title|author","like","%".$title."%")
// ->where("status",1)
// ->order("sort desc")
// ->count();
$video_musics = Db::table("jm_video_musics")
->where("title|author","like","%".$title."%")
->where("status",1)
->order("sort desc")
->page($page,$limit)
->select();
$url="http://dspzbdshop.jp893.com";
foreach ($video_musics as $key => &$value) {
$value["musics_file"]=$url.$value["musics_file"];
$value["cover_image"]=$url.$value["cover_image"];
// $video_musics[$key]["musics_file"]= $value["musics_file"];
// $video_musics[$key]["cover_image"]= $value["cover_image"];
// code...
}
return Show::successData($video_musics);
}
/*addVideo 发布视频*/
public function addVideo() {
$file = input('file');
$title = input('title');
$content = input('content');
$longitude = input('longitude');
$latitude = input('latitude');
$city = input('city');
$privacy = input('privacy');
$cover = input('cover');
$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败","code"=>0]);
}
// $pa = new PhpAnalysis('utf-8','utf-8',true);
// $pa->LoadDict();
// $pa->SetSource($content);
// $tags = $pa->GetFinallyKeywords();
$data = [
'file' => $file,
'title' => $title,
'content' => $content,
'user_id' => $user["uid"],
'location' => '',
'longitude' => $longitude,
'latitude' => $latitude,
// 'keywords' => $tags,
'keywords' => "",
'privacy' => $privacy,
'cover' => $cover,
'createtime' => time(),
'city' => $city
];
$res = Db::table('jm_video')->insert($data);
if($res){
return Show::successData();
} else {
return json(["msg"=>"失败","code"=>0]);
}
}
/**
* 视频列表
*
* @ApiTitle (视频列表)
* @ApiSummary (视频列表)
* @ApiAuthor (接口作者)
* @ApiMethod (POST)
* @ApiRoute (/api/video.Video/addVideo)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name="file", type="string", required=true, description="视频路径")
* @ApiParams (name="title", type="string", required=true, description="标题")
* @ApiParams (name="content", type="string", required=true, description="内容")
* @ApiParams (name="longitude", type="string", required=true, description="经度")
* @ApiParams (name="latitude", type="string", required=true, description="纬度")
* @ApiParams (name="city", type="string", required=true, description="城市")
*
* @ApiParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
* @ApiReturnParams (name="code", type="integer", required=true, sample="0")
* @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功")
* @ApiReturnParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
* @ApiReturn ({
'code':'1',
'msg':'返回成功'
})
*/
public function VideoList() {
$type = input('type');
$page = input('page');
$limit = input('limit');
$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失1败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败2","code"=>0]);
}
switch ($type) {
case "1":
//推荐 heart 点赞量 star 收藏量 views 浏览量 后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)
$list = Db::table("jm_video")
->alias('video')
->join('logic_user user','user.id = video.user_id','left')
->field('video.*,user.nickname,user.head_portrait')
->order('star desc,heart desc,views desc')
->where('is_recommended','=',1)//修改
->where('privacy','in','1')//修改1
->page($page,$limit)
->select();
foreach ($list as $key => &$value) {
//直播信息
// $list["wch_live"] = Db::name('wch_live')
// ->where("user_id",$value["user_id"])
// ->where("status",'1')
// ->find();
if(empty($value["nickname"])){
unset($list[$key]);
}else{
if (!empty($user)) {
// 是否点赞
$value["is_heart"] = (Db::table('jm_video_heart')
->where("video_id",$value["id"])
->where("user_id",$user['id'])
->count()>0)?1:0;
//是否收藏
$value["is_star"] = (Db::table('jm_video_star')
->where("video_id",$value["id"])
->where("user_id",$user['id'])
->count()>0)?1:0;
//是否关注
// $value["is_user_follow"] = (Db::table('jm_user_follow')
// ->where("follower_id",$value["user_id"])
// ->where("user_id",$user['id'])
// ->count()>0)?1:0;
} else {
// 是否点赞
$value["is_heart"] = 0;
//是否收藏
$value["is_star"] = 0;
//是否关注
// $value["is_user_follow"] = 0;
}
}
}
break;
case "2":
//视频表左关联关注表\判断是否是我关注的人 时间来
// var_dump($user);die;
if (empty($user)) {
$this->error('您还没有登录哦,请重试。');
}
$list = Db::table("jm_video")
->alias('video')
->join('logic_user user','user.id = video.user_id','left')
->join('logic_user_follow user_follow','user_follow.follower_id = video.user_id','left')
->field('video.*,user.nickname,user.head_portrait')
->order('createtime desc,star desc,heart desc,views desc')
->where("user_follow.user_id",$user['id'])
//->where('is_recommended','=',1)//修改
->where('privacy','in','1')//修改
->page($page,$limit)
->select();
// dump($list);die;
foreach ($list as $key => $value) {
$timepoor=time()-$value['createtime'];
$zz="";
if($timepoor>365*24*60*60&&empty($zz)){
$d=365*24*60*60;
if($timepoor/$d>0){
$zz.=intval($timepoor/$d)."年前";
$timepoor=$timepoor-(intval($timepoor/$d)*$d );
}
}
if($timepoor>30*24*60*60&&empty($zz)){
$d=30*24*60*60;
if($timepoor/$d>0){
$zz.=intval($timepoor/$d)."月前";
$timepoor=$timepoor-(intval($timepoor/$d)*$d );
}
}
if($timepoor>24*60*60&&empty($zz)){
$d=24*60*60;
if($timepoor/$d>0){
$zz.=intval($timepoor/$d)."天前";
$timepoor=$timepoor-(intval($timepoor/$d)*$d );
}
}
if($timepoor>60*60&&empty($zz)){
$h=60*60;
if($timepoor/$h>0){
$zz.=intval($timepoor/$h)."小时前";
$timepoor= $timepoor-(intval($timepoor/$h)*$h );
}
}
if($timepoor>60&&empty($zz)){
$iz=60;
if($timepoor/$iz>0){
$zz.=intval($timepoor/$iz)."分钟前";
$timepoor= $timepoor-(intval($timepoor/$iz)*$iz );
}
}
if($timepoor>1&&empty($zz)){
$iz=1;
if($timepoor/$iz>0){
$zz.=intval($timepoor/$iz)."秒前";
$timepoor= $timepoor-(intval($timepoor/$iz)*$iz );
}
}
$list[$key]["timepoor"]=$zz;
// 是否点赞
$list[$key]["is_heart"] = (Db::table('jm_video_heart')
->where("video_id",$value["id"])
->where("user_id",$user['id'])
->count()>0)?1:0;
//是否收藏
$list[$key]["is_star"] = (Db::table('jm_video_star')
->where("video_id",$value["id"])
->where("user_id",$user['id'])
->count()>0)?1:0;
// $Dates = new Dates();
// $list[$key]["createtime_text"] = $Dates->timeDiff($value['createtime']);
//直播信息
// $list["wch_live"] = Db::name('wch_live')
// ->where("user_id",$value["user_id"])
// ->where("status",'1')
// ->find();
}
break;
case "3":
//判断同城 按距离
// longitude=精度,latitude=纬度
$longitude = input('longitude');
$latitude = input('latitude');
$list = Db::table("jm_video")
->alias('video')
->join('logic_user user','user.id = video.user_id','left')
->field('video.*,user.nickname,user.head_portrait,ROUND(
6378.138 * 2 * ASIN(
SQRT(
POW(
SIN(
(
'.$latitude.' * PI() / 180 - video.latitude* PI() / 180
) / 2
),
2
) + COS('.$latitude.' * PI() / 180) * COS( video.latitude * PI() / 180) * POW(
SIN(
(
'.$longitude.' * PI() / 180 - video.longitude * PI() / 180
) / 2
),
2
)
)
) * 1000
) AS juli'
)
//->where('is_recommended','=',1)//修改
->where('privacy','in','1')//修改
->order('juli asc')
->page($page,$limit)
->select();
foreach ($list as $key => $value) {
if (!empty($user)) {
// 是否点赞
$list[$key]["is_heart"] = (Db::table('jm_video_heart')
->where("video_id",$value["id"])
->where("user_id",$user['id'])
->count()>0)?1:0;
//是否收藏
$list[$key]["is_star"] = (Db::table('jm_video_star')
->where("video_id",$value["id"])
->where("user_id",$user['id'])
->count()>0)?1:0;
//是否关注
// $list[$key]["is_user_follow"] = (Db::table('jm_user_follow')
// ->where("follower_id",$value["user_id"])
// ->where("user_id",$user['id'])
// ->count()>0)?1:0;
} else {
$list[$key]["is_heart"] = 0;
$list[$key]["is_star"] = 0;
// $list[$key]["is_user_follow"] = 0;
}
//直播信息
// $list["wch_live"] = Db::name('wch_live')
// ->where("user_id",$value["user_id"])
// ->where("status",'1')
// ->find();
}
break;
default:
$this->error('操作失败,请重试。');
break;
}
// var_dump($list);die;
$this->success('操作成功',$list);
}
/**
* 搜索
*
* @ApiTitle (搜索)
* @ApiSummary (发布视频)
* @ApiAuthor (接口作者)
* @ApiMethod (POST)
* @ApiRoute (/api/video.Video/addVideo)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name="file", type="string", required=true, description="视频路径")
* @ApiParams (name="title", type="string", required=true, description="标题")
* @ApiParams (name="content", type="string", required=true, description="内容")
* @ApiParams (name="longitude", type="string", required=true, description="经度")
* @ApiParams (name="latitude", type="string", required=true, description="纬度")
* @ApiParams (name="city", type="string", required=true, description="城市")
*
* @ApiParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
* @ApiReturnParams (name="code", type="integer", required=true, sample="0")
* @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功")
* @ApiReturnParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
* @ApiReturn ({
'code':'1',
'msg':'返回成功'
})
*/
public function SearchVideoList() {
$keywords = input('keywords');
$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败","code"=>0]);
}
$Keywords = "%".$keywords."%";
// 搜索视频列表
//推荐 heart 点赞量 star 收藏量 views 浏览量 后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)
// where('name','like',['%think','php%'],'OR');
$list = Db::table("jm_video")
->alias('video')
->join('logic_user user','user.id = video.user_id','left')
->field('video.*,user.nickname,user.head_portrait')
->order('star desc,heart desc,views desc')
->where('title','like',$Keywords)
->select();
foreach ($list as $key => &$value) {
if (!empty($user)) {
// 是否点赞
$value["is_heart"] = Db::table('jm_video_heart')
->where("video_id",$value["id"])
->where("user_id",$user['id'])
->count();
//是否收藏
$value["is_star"] = Db::table('jm_video_star')
->where("video_id",$value["id"])
->where("user_id",$user['id'])
->count();
//是否关注
// $value["is_user_follow"] = Db::table('jm_user_follow')
// ->where("follower_id",$value["user_id"])
// ->where("user_id",$user['id'])
// ->count();
} else {
// 是否点赞
$value["is_heart"] = 0;
//是否收藏
$value["is_star"] = 0;
//是否关注
// $value["is_user_follow"] = 0;
}
}
return json(["msg"=>"操作成功","code"=>1,"data"=>$list]);
// $this->success('操作成功',$list);
}
public function VideoDetails() {
$id = input('id');
$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败","code"=>0]);
}
// 搜索视频列表
$list["video_details"] = Db::table("jm_video")
->alias('video')
->join('logic_user user','user.id = video.user_id','left')
->field('video.*,user.nickname,user.head_portrait')
->order('star desc,heart desc,views desc')
->where('video.id', $id)
->find();
// var_dump($list);die;
if (!empty($user)) {
// 是否点赞
$list["is_heart"] = Db::table('jm_video_heart')
->where("video_id",$id)
->where("user_id",$user['id'])
->count();
//是否收藏
$list["is_star"] = Db::table('jm_video_star')
->where("video_id",$id)
->where("user_id",$user['id'])
->count();
//是否关注
// $list["is_user_follow"] = Db::table('jm_user_follow')
// ->where("follower_id",$list["video_details"]["user_id"])
// ->where("user_id",$user['id'])
// ->count();
} else {
// 是否点赞
$list["is_heart"] = 0;
//是否收藏
$list["is_star"] = 0;
//是否关注
// $list["is_user_follow"] = 0;
}
//点赞数量
$list["heart"] = Db::table('jm_video_heart')
->where("video_id",$id)
->count();
//收藏数量
$list["star"] = Db::table('jm_video_star')
->where("video_id",$id)
->count();
//评论数量
$list["comment"] = Db::name('jm_video_comment')
->where("video_id",$id)
->count();
//直播信息
// $list["wch_live"] = Db::name('wch_live')
// ->where("user_id",$list["video_details"]["user_id"])
// ->where("status",'1')
// ->find();
return json(["msg"=>"操作成功","code"=>1,"data"=>$list]);
}
/**
* 视频点赞
*
* @ApiTitle (视频点赞)
* @ApiSummary (视频点赞)
* @ApiAuthor (视频点赞)
* @ApiMethod (POST)
* @ApiRoute (/api/video.Video/heartVideo)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
* @ApiParams (name="id", type="string", required=true, description="视频路径")
*
* @ApiParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据")
* @ApiReturnParams (name="code", type="integer", required=true, sample="0")
* @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功")
* @ApiReturnParams (name="data", type="object", sample="{'user_id':'int','user_name':'string','profile':{'email':'string','age':'integer'}}", description="扩展数据返回")
* @ApiReturn ({
'code':'1',
'msg':'返回成功'
})
heartVideo这个接口给你返回了数量
*/
public function heartVideo() {
$video_id = input('id');
$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败","code"=>0]);
}
$info = Db::table('jm_video_heart')->where('video_id', $video_id)->where('user_id', $user['id'])->find();
$heart =Db::table('jm_video_heart')->where('video_id', $video_id) ->count();
if (empty($info)) {
$heart=$heart+1;
Db::table("jm_video")->where('id', $video_id) ->inc('heart')->update();
//->setInc('heart');
$res = Db::table('jm_video_heart')->insert([
'video_id' => $video_id, 'user_id' => $user['id']
]);
} else {
$heart=$heart-1;
Db::table("jm_video")->where('id', $video_id) ->dec('heart')->update();
//->setDec('heart');
$res = Db::table('jm_video_heart')->where('id', $info['id'])->delete();
}
if ($res) {
return json(["msg"=>"操作成功","code"=>1,"data"=>$heart]);
// $this->success('操作成功',$heart);
} else {
return json(["msg"=>"失败","code"=>0]);
}
}
/**
* 我的视频
* */
public function myVideo() {
$page = input('page');
$limit = input('limit');
$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败","code"=>0]);
}
$user_id = $user['id'];
//推荐 heart 点赞量 star 收藏量 views 浏览量 后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)
$list = Db::table("jm_video")
->alias('video')
->field('video.*')
->where('video.user_id', $user_id)
// ->page($page,$limit)
->select();
foreach ($list as $key => &$value) {
if (!empty($user)) {
// 是否点赞
$value["is_heart"] = Db::table('jm_video_heart')
->where("video_id",$value["id"])
->where("user_id",$user['id'])
->count();
//是否收藏
$value["is_star"] = Db::table('jm_video_star')
->where("video_id",$value["id"])
->where("user_id",$user['id'])
->count();
//是否关注
// $list[$key]["is_user_follow"] = Db::table('jm_user_follow')
// ->where("follower_id",$value["user_id"])
// ->where("user_id",$user['id'])
// ->count();
} else {
// 是否点赞
$value["is_heart"] = 0;
//是否收藏
$value["is_star"] = 0;
//是否关注
// $list[$key]["is_user_follow"] = 0;
}
}
return json(["msg"=>"操作成功","code"=>1,"data"=>$list]);
}
/**
* 收藏视频
* */
public function mystarVideo() {
$page = input('page');
$limit = input('limit');
$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败","code"=>0]);
}
$user_id = $user['id'];
//推荐 heart 点赞量 star 收藏量 views 浏览量 后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)
$list = Db::table("jm_video")
->alias('video')
->join('jm_video_star video_star','video_star.video_id = video.id','left')
->field('video.*')
->where('video_star.user_id', $user_id)
->page($page,$limit)
->select();
// var_dump($list);die;
foreach ($list as $key => &$value) {
if (!empty($user)) {
// 是否点赞
$value["is_heart"] = Db::table('jm_video_heart')
->where("video_id",$value["id"])
->where("user_id",$user['id'])
->count();
//是否收藏
$value["is_star"] = Db::table('jm_video_star')
->where("video_id",$value["id"])
->where("user_id",$user['id'])
->count();
//是否关注
// $value["is_user_follow"] = Db::table('jm_user_follow')
// ->where("follower_id",$value["user_id"])
// ->where("user_id",$user['id'])
// ->count();
} else {
// 是否点赞
$value["is_heart"] = 0;
//是否收藏
$value["is_star"] = 0;
//是否关注
// $value["is_user_follow"] = 0;
}
}
return json(["msg"=>"操作成功","code"=>1,"data"=>$list]);
// $this->success('操作成功',$list);
}
/**
* 收藏视频
* */
public function starVideo() {
$video_id = input('id');
$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败","code"=>0]);
}
$user_id = $user['id'];
$info = Db::table('jm_video_star')->where('video_id', $video_id)->where('user_id', $user_id)->find();
if (empty($info)) {
// ->setInc('star')
Db::table("jm_video")->where('id', $video_id)->inc('star')->update();
$res = Db::table('jm_video_star')->insert([
'video_id' => $video_id, 'user_id' => $user_id
]);
} else {
Db::table("jm_video")->where('id', $video_id) ->dec('star')->update();
$res = Db::table('jm_video_star')->where('id', $info['id'])->delete();
}
if ($res) {
return json(["msg"=>"成功","code"=>1 ]);
// $this->success('操作成功');
} else {
return json(["msg"=>"失败","code"=>0]);
}
}
/**
* 评论列表
* */
public function getCommentList() {
$video_id = input('id');
$page = input('page');
$limit = input('limit');
$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败","code"=>0]);
}
$list = Db::table('jm_video_comment')
->alias('video_comment')
->join('logic_user user','user.id = video_comment.user_id','left')
->field('video_comment.*,user.nickname,user.head_portrait')
->where('video_id', $video_id)
->page($page,$limit)
->order('id desc')
->select();
foreach ($list as $key => &$value) {
$timepoor=time()-$value['createtime'];
$zz="";
if($timepoor>365*24*60*60&&empty($zz)){
$d=365*24*60*60;
if($timepoor/$d>0){
$zz.=intval($timepoor/$d)."年前";
$timepoor=$timepoor-(intval($timepoor/$d)*$d );
}
}
if($timepoor>30*24*60*60&&empty($zz)){
$d=30*24*60*60;
if($timepoor/$d>0){
$zz.=intval($timepoor/$d)."月前";
$timepoor=$timepoor-(intval($timepoor/$d)*$d );
}
}
if($timepoor>24*60*60&&empty($zz)){
$d=24*60*60;
if($timepoor/$d>0){
$zz.=intval($timepoor/$d)."天前";
$timepoor=$timepoor-(intval($timepoor/$d)*$d );
}
}
if($timepoor>60*60&&empty($zz)){
$h=60*60;
if($timepoor/$h>0){
$zz.=intval($timepoor/$h)."小时前";
$timepoor= $timepoor-(intval($timepoor/$h)*$h );
}
}
if($timepoor>60&&empty($zz)){
$iz=60;
if($timepoor/$iz>0){
$zz.=intval($timepoor/$iz)."分钟前";
$timepoor= $timepoor-(intval($timepoor/$iz)*$iz );
}
}
if($timepoor>1&&empty($zz)){
$iz=1;
if($timepoor/$iz>0){
$zz.=intval($timepoor/$iz)."秒前";
$timepoor= $timepoor-(intval($timepoor/$iz)*$iz );
}
}
// $res = Db::table("jm_video_comment_reply")
// ->alias('video_comment_reply')
// ->join('logic_user user','user.id = video_comment_reply.user_id','left')
// ->where("video_comment_reply.comment_id",$comment_id)
// ->select();
$value["timepoor"]=$zz;
$value["head_portrait"]=$value["head_portrait"];
$value["replycount"]=Db::table("jm_video_comment_reply") ->where("comment_id",$value['id']) ->count();
}
return json(["msg"=>"成功","code"=>1,"data"=>$list ]);
// $this->success('success', $list);
}
/**
* 发布评论
* */
public function commentVideo() {
$video_id = input('id');
$content = input('content');
$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败","code"=>0]);
}
$user_id = $user['id'];
$id = $res = Db::table('jm_video_comment')->insertGetId([
'content' => $content,
'video_id' => $video_id,
'user_id' => $user_id,
'createtime' => time(),
'heart' => 0,
]);
if ($res) {
// $this->success('操作成功。' );
return json(["msg"=>"成功","code"=>1]);
} else {
// $this->error('操作失败,请重试。');
return json(["msg"=>"失败","code"=>0]);
}
}
/**
* 回复评论
* */
public function replyComment() {
$comment_id = input('comment_id');
$content = input('content');
if (empty($comment_id) || empty($content)) {
$this->error("参数不全");
}
$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败","code"=>0]);
}
$login_id = $user['id'];
$login = $user;
$now = time();
$data = [
'comment_id' => $comment_id,
'content' => $content,
'user_id' => $login['id'],
'user_head_portrait' => $login['head_portrait'],
'user_nickname' => $login['nickname'],
'createtime' => $now,
];
$res = Db::table("jm_video_comment_reply")->insertGetId($data);
if (!$res) {
// $this->error('操作失败,请重新操作。');
return json(["msg"=>"失败","code"=>0]);
} else {
return json(["msg"=>"操作成功","code"=>1,"data"=>$login]);
// $this->success('操作成功。', [
// 'info' => $login
// ]);
}
}
/**
* 回复评论
* */
public function replyReply() {
$comment_id = input('comment_id');
$content = input('content');
if (empty($comment_id) || empty($content)) {
$this->error("参数不全");
}
$login=$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败","code"=>0]);
}
$login_id = $user["id"];
$now = time();
$res = Db::table("jm_video_comment_reply")->where("id",$comment_id)->find();
$data = [
'comment_id' => $res["comment_id"],
'reply_id' => $comment_id,
'content' => $content,
'user_id' => $login['id'],
'user_head_portrait' => $login['head_portrait'],
'user_nickname' => $login['nickname'],
'createtime' => $now,
];
$res = Db::table("jm_video_comment_reply")->insertGetId($data);
if (!$res) {
return json(["msg"=>"失败","code"=>0]);
// $this->error('操作失败,请重新操作。');
} else {
// $this->success('操作成功。', [
// 'info' => $login
// ]);
return json(["msg"=>"操作成功","code"=>1,"data"=>$login]);
}
}
/**
* 查看评论回复
* */
public function replylist() {
$comment_id = input('comment_id');
// $reply_id = input('reply_id');
// if (empty($reply_id)) {
// $this->error("参数不全");
// }
if (empty($comment_id)) {
$this->error("参数不全");
}
$login=$user = LogicUser::where('id', input('uid'))->find();
if (!$user) {
return json(["msg"=>"失败","code"=>0]);
}
if ($user->anchor !== 1) {
return json(["msg"=>"失败","code"=>0]);
}
$login_id = $user['id'];
$now = time();
//获取回复列表和用户信息,并跌倒循环树状分支
$res = Db::table("jm_video_comment_reply")
->alias('video_comment_reply')
->join('logic_user user','user.id = video_comment_reply.user_id','left')
->where("video_comment_reply.comment_id",$comment_id)
->select();
foreach ($res as $key => &$value) {
if(!empty($value["reply_id"])){
$value["reply"]=Db::table("jm_video_comment_reply")
->alias('video_comment_reply')
->join('logic_user user','user.id = video_comment_reply.user_id','left')
->where("video_comment_reply.id",$value["reply_id"])
->find();
}
// code...
}
// var_dump($res);die;
// $res=$this->getTree($res,2,0,0);
if (!$res) {
return json(["msg"=>"失败","code"=>0]);
// $this->error('操作失败,请重新操作。');
} else {
return json(["msg"=>"操作成功","code"=>1,"data"=>$res]);
// $this->success('操作成功。', array_values($res));
}
}
/**
* 获取分类函数
*/
public function getTree($list,$type='1',$pid=0,$level=0){
$return = [];
if($type=='1'){
foreach ($list as $k => $v) {
if($v['reply_id']==$pid){
$return[$k] = $v;
// $return[$k]['title'] = str_repeat(' ├ ',$level).$v['title'];
$return[$k]['child'] = $this->getTree($list,'1',$v['id'],$level+1);
}
}
}else{
foreach ($list as $k => $v) {
if($v['reply_id']==$pid){
$return[$v['id']] = $v;
// $return[$v['id']]['title'] = str_repeat('├ ',$level).$v['title'];
$return = $return+$this->getTree($list,'2',$v['id'],$level+1);
}
}
}
return $return;
}
/**
* 我的关注
*/
// public function user_follow(){
// $author_id = input('user_id');
// $page = input('page');
// $limit = input('limit');
// $user = $this->auth->getUser();
// $user_id=$user['id'];
// $list = Db::table('jm_user_follow')
// ->alias('user_follow')
// ->join('logic_user user','user.id = user_follow.user_id','left')
// ->join('logic_user follower','follower.id = user_follow.follower_id','left')
// ->field('user_follow.*,user_follow.follower_id as follower_id,user.id as user_id,user.username as user_username,user.nickname as user_nickname,user.head_portrait as user_head_portrait, follower.username as follower_username,follower.nickname as follower_nickname,follower.head_portrait as follower_head_portrait')
// ->where('user_follow.user_id', $author_id)
// ->page($page,$limit)
// ->order('id desc')
// ->select();
// // var_dump($list);die;
// if (!empty($list)) {
// foreach ($list as $key => &$val) {
// $val["user_nickname"]= empty($val["user_nickname"]) ?$val["user_username"]:$val["user_nickname"];
// $val["follower_nickname"]= empty($val["follower_nickname"]) ?$val["follower_username"]:$val["follower_nickname"];
// $follow = (Db::table('jm_user_follow')
// ->where('user_id', $val['follower_id'])
// ->where('follower_id', $author_id)
// ->count()) > 0;
// $val["follow"]= $follow;
// }
// }
// if (!is_array($list)) {
// $this->error('操作失败,请重新操作。');
// } else {
// $this->success('操作成功。', [ 'info' => $list ]);
// }
// }
/**
* 作者粉丝
*/
public function follow_user(){
$author_id = input('user_id');
$page = input('page');
$limit = input('limit');
$user = $this->auth->getUser();
$user_id=$user['id'];
// var_dump($user_id);die;
$list = Db::table('jm_user_follow')
->alias('user_follow')
->join('logic_user user','user.id = user_follow.user_id','left')
->join('logic_user follower','follower.id = user_follow.follower_id','left')
->field('user_follow.*,user.id as user_id,user.nickname as user_nickname,user.head_portrait as user_head_portrait,follower.id as follower_id,follower.nickname as follower_nickname,follower.head_portrait as follower_head_portrait')
->where('user_follow.follower_id', $author_id)
->page($page,$limit)
// ->fetchSql(true)
->order('id desc')
->select();
if (!empty($list)) {
foreach ($list as $key => $val) {
$follow = (Db::table('jm_user_follow')
->where('user_id', $val['follower_id'])
->where('user_id', $author_id)
->count()) > 0;
$list[$key]["follow"]= $follow;
}
}
// var_dump($list);die;
if (!is_array($list)) {
$this->error('操作失败,请重新操作。');
} else {
$this->success('操作成功。', [ 'info' => $list ]);
}
}
/**
* 关注作者
* */
public function followAuthor()
{
$author_id = input('id');
$user = $this->auth->getUser();
$login_id=$user['id'];
$count = Db::table('jm_user_follow')
->where('user_id', $login_id)
->where('follower_id', $author_id)
->count();
if ($count > 0) {
$res = Db::table('jm_user_follow')
->where('user_id', $login_id)
->where('follower_id', $author_id)
->delete();
} else {
if ($author_id == $login_id) {
$this->error('用户无法关注自己');
}
$res = Db::table('jm_user_follow')->insert([
'follower_id' => $author_id,
'user_id' => $login_id,
]);
}
if ($res) {
$this->success('操作成功');
} else {
$this->error('用户无法关注自己');
}
}
/**
* 作者首页
* */
public function getAuthorProfile(){
$author_id = input('id');
$page = input('page');
$limit = input('limit');
$user = $this->auth->getUser();
$user_id=$user['id'];
// 名称,性别,头像,地址 address,个性签名 bio
$user=Db::table("jm_user")
->where("id",$author_id)
->field('id as user_id,gender as user_gender,nickname as user_nickname,address as user_address,bio as user_bio,head_portrait as user_head_portrait')
->find(); //直播信息
// $user["user_live_state"] = Db::name('wch_live')
// ->where("user_id",$author_id)
// ->where("status",'1')
// ->count();
// var_dump($user);die;video_heart
// live_state as user_live_state,
// var_dump(Db::table('jm_user_follow')
// ->where('user_id', $user_id)
// ->where('follower_id', $author_id)
// ->count());die;
//是否关注,
$follow = (Db::table('jm_user_follow')
->where('user_id', $user_id)
->where('follower_id', $author_id)
->count()) > 0;
//是否回关
$follow_user = (Db::table('jm_user_follow')
->where('user_id', $user_id)
->where('user_id', $author_id)
->count()) > 0;
//获赞数量、关注数量、粉丝数量、直播数量
//jm_video_heart,jm_video_star
//点赞
$video_heart=Db::table('jm_video_heart')
->alias('video_heart')
->join('jm_video video','video.id = video_heart.video_id','left')
->where('video.user_id', $author_id)
->count();
//收藏
$video_star=Db::table('jm_video_star')
->alias('video_heart')
->join('jm_video video','video.id = video_heart.video_id','left')
->where('video.user_id', $author_id)
->count();
//粉丝
$follows = Db::table('jm_user_follow')
->where('follower_id', $author_id)
->count() ;
//关注
$user_follow = Db::table('jm_user_follow')
->where('user_id', $author_id)
->count() ;
//作品,
$videocount = Db::table("jm_video")
->alias('video')
->join('logic_user user','user.id = video.user_id','left')
->field('video.*,user.nickname,user.head_portrait')
->order('star desc,heart desc,views desc')
->where("user.id",$author_id)
->count();
//推荐 heart 点赞量 star 收藏量 views 浏览量 后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)
$list = Db::table("jm_video")
->alias('video')
->join('logic_user user','user.id = video.user_id','left')
->field('video.*,user.nickname,user.head_portrait')
->order('star desc,heart desc,views desc')
->where("user.id",$author_id)
->page($page,$limit)
->select();
foreach ($list as $key => $value) {
if (!empty($user)) {
// 是否点赞
$list[$key]["is_heart"] = Db::table('jm_video_heart') ->where("video_id",$value["id"]) ->where('user_id', $user_id) ->count();
//是否收藏
$list[$key]["is_star"] = Db::table('jm_video_star')
->where("video_id",$value["id"])
->where('user_id', $user_id)
->count();
//是否关注
$list[$key]["is_user_follow"] = Db::table('jm_user_follow')
->where("follower_id",$value["user_id"])
->where('user_id', $user_id)
->count();
}else {
// 是否点赞
$list[$key]["is_heart"] = 0;
//是否收藏
$list[$key]["is_star"] = 0;
//是否关注
$list[$key]["is_user_follow"] = 0;
}
}
//直播状态
//标签,
$info = [
'user' => $user,//用户信息
'user_follow' => $follow,//是否关注作者
'follow_user' => $follow_user,//作者是否回关
'list' => $list, //短视频列表
'videocount' => $videocount, //短视频列表
'stat' => [
'heart' => $video_heart,//点赞量
'star' => $video_star,//收藏量
'follows' => $follows,//粉丝量
'user_follows' => $user_follow,//关注量
],
];
return json(["msg"=>'操作成功',"data"=>$info,"code"=>1]);
}
}