0
点赞
收藏
分享

微信扫一扫

短视频接口

unadlib 2023-02-20 阅读 52


<?php
namespace app\api\controller\video;

use app\common\controller\Api;

use think\Db;
use jplt\phpanalysis\PhpAnalysis;
use jplt\Pinyin;
use jplt\Dates;
use think\Config;
use app\common\model\User;
// 引入七牛鉴权类
use Qiniu\Auth;
// 引入七牛上传类
use Qiniu\Storage\UploadManager;

class Video extends Api
{

// protected $noNeedLogin = [
// 'getDefaultVideoList',
// 'index',
// 'getCommentList',
// 'heartComment',
// 'searchVideo',
// 'searchAuthor',
// 'goods_details',
// 'collage',
// 'search',
// 'On_shelf',
// 'end_shelf',
// 'goods_list'
//
//
// ];
protected $noNeedLogin = ['*'];
protected $noNeedRight = '*';
public function _initialize()
{
parent::_initialize();
}


/**
* 上传视频
*
* @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 qiniuconfig() {
$data['accessKey'] = Config::get("qiniu.accessKey");
$data['secretKey'] = Config::get("qiniu.secretKey");
$data['bucketName'] = Config::get("qiniu.bucket");
$data['bucketurl'] = Config::get("qiniu.bucketurl");
//默认file
$data['fileName'] = Config::get("qiniu.fileName");
// 构建鉴权对象
require_once APP_PATH . '../vendor/qiniu/php-sdk/autoload.php';
$auth = new Auth( $data['accessKey'], $data['secretKey']);
//默认file
$data['token'] = $auth->uploadToken( $data['bucketName']);

unset( $data['accessKey']);
unset( $data['secretKey']);
$this->success('成功',$data);
}
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 video_musics() {
$page = $this->request->param('page');
$title = $this->request->param('title');
$limit = $this->request->param('limit');
// $video_musics["count"]= Db::name("video_musics")
// ->where("title|author","like","%".$title."%")
// ->where("status",1)
// ->order("sort desc")
// ->count();
$video_musics = Db::name("video_musics")
->where("title|author","like","%".$title."%")
->where("status",1)
->order("sort desc")
->page($page,$limit)
->select();
foreach ($video_musics as $key => $value) {
$url="http://dspzbdshop.jp893.com";
$video_musics[$key]["musics_file"]=$url.$value["musics_file"];
$video_musics[$key]["cover_image"]=$url.$value["cover_image"];
// code...
}
$this->success('操作成功',$video_musics);

}
/*addVideo 发布视频*/
public function addVideo() {
$file = $this->request->param('file');
$title = $this->request->param('title');
$content = $this->request->param('content');
$longitude = $this->request->param('longitude');
$latitude = $this->request->param('latitude');
$city = $this->request->param('city');
$privacy = $this->request->param('privacy');
$cover = $this->request->param('cover');
$user = $this->auth->getUser();
// $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->id,
'location' => '',
'longitude' => $longitude,
'latitude' => $latitude,
// 'keywords' => $tags,
'keywords' => "",
'privacy' => $privacy,
'cover' => $cover,
'createtime' => time(),
'city' => $city
];
$res = Db::name('video') ->insert($data);
if ($res) {
$this->success('操作成功');
} else {
$this->error('操作失败,请重试。');
}
}
/**
* 视频列表
*
* @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 = $this->request->param('type');
$page = $this->request->param('page',1);
$limit = $this->request->param('limit',10);
$user = $this->auth->getUser();

switch ($type) {
case "1":
//推荐 heart 点赞量 star 收藏量 views 浏览量 后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)

$list = Db::name('video')
->alias('video')
->join('fa_user user','user.id = video.user_id','left')
->field('video.*,user.address,user.nickname,user.avatar')
->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)) {
// 是否点赞
$list[$key]["is_heart"] = (Db::name('video_heart')
->where("video_id",$value["id"])
->where("user_id",$user->id)
->count()>0)?1:0;
//是否收藏
$list[$key]["is_star"] = (Db::name('video_star')
->where("video_id",$value["id"])
->where("user_id",$user->id)
->count()>0)?1:0;
//是否关注
$list[$key]["is_user_follow"] = (Db::name('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;

}
}
}


break;
case "2":
//视频表左关联关注表\判断是否是我关注的人 时间来
// var_dump($user);die;

if (empty($user)) {
$this->error('您还没有登录哦,请重试。');
}
$list = Db::name('video')
->alias('video')
->join('fa_user user','user.id = video.user_id','left')
->join('fa_user_follow user_follow','user_follow.follower_id = video.user_id','left')
->field('video.*,user.address,user.nickname,user.avatar')
->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::name('video_heart')
->where("video_id",$value["id"])
->where("user_id",$user->id)
->count()>0)?1:0;
//是否收藏
$list[$key]["is_star"] = (Db::name('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 = $this->request->param('longitude');
$latitude = $this->request->param('latitude');

$list = Db::name('video')
->alias('video')
->join('fa_user user','user.id = video.user_id','left')
->field('video.*,user.address,user.nickname,user.avatar,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::name('video_heart')
->where("video_id",$value["id"])
->where("user_id",$user->id)
->count()>0)?1:0;
//是否收藏
$list[$key]["is_star"] = (Db::name('video_star')
->where("video_id",$value["id"])
->where("user_id",$user->id)
->count()>0)?1:0;
//是否关注
$list[$key]["is_user_follow"] = (Db::name('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('操作成功',array_values($list));




}
/*删除视频*/
public function delVideo() {
$id = $this->request->param('id');
if(!$id) $this->error("参数错误");
$res = Db::name('video')->where("id","in",$id) ->delete();
if ($res) {
$this->success('操作成功');
} else {
$this->error('操作失败,请重试。');
}
}
/**
* 搜索
*
* @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 = $this->request->param('keywords');
$page = $this->request->param('page');
$limit = $this->request->param('limit');
$user = $this->auth->getUser();
preg_match_all('/./us', $keywords, $match);

if(count($match[0])>2){
$pa = new PhpAnalysis('utf-8','utf-8',true);

$pa::$loadInit = false;

$pa->LoadDict();

$pa->SetSource($keywords);

$pa->StartAnalysis(false);

$tags = $pa->GetFinallyKeywords();
$Keywords = explode(",",$tags);
foreach ($Keywords as $key => $val) {
$Keywords[$key] = "%".$val."%";
}
}else{
$tags=$keywords;
$Keywords = "%".$keywords."%";
}




$user_search = Db::name('user_search') ->where('keywords','like',$Keywords,'OR') ->select();

//判断是否添加过搜索关键词
if (count($user_search) > 0) {
//有的话 增加搜索次数
Db::name('user_search') ->where('keywords','like',$Keywords,'OR')->setInc("search_num");
} else {
$Keywordsz = explode(",", $tags);
$Keywordsdata = [];
foreach ($Keywordsz as $key => $val) {
$Keywordsdata[$key]["keywords"] = $val;
$Keywordsdata[$key]["pinyin_full"] = Pinyin::getPinyin($val);
$Keywordsdata[$key]["pinyin_simple"] = Pinyin::getShortPinyin($val);
$Keywordsdata[$key]["search_num"] = 1;
$Keywordsdata[$key]["user_id"] = $user->id;
$Keywordsdata[$key]["createtime"] = time();
}
//没有的话 创建新的搜索记录 后期/查看自己搜索记录的数量 删除超出部分\
Db::name('user_search')->insertAll($Keywordsdata);

}
//系统关键词
$user_search2 = Db::name('search_word') ->where('keywords','like',$Keywords,'OR')->select();
if (count($user_search2) > 0) {
//有的话 增加搜索次数
Db::name('search_word') ->where('keywords','like',$Keywords,'OR')->setInc("search_num");
} else {
$Keywordsz = explode($tags,",");
$Keywordsdata = [];
foreach ($Keywordsz as $key => $val) {
$Keywordsdata[$key]["keywords"] = $val;
$Keywordsdata[$key]["pinyin_full"] = Pinyin::getPinyin($val);
$Keywordsdata[$key]["pinyin_simple"] = Pinyin::getShortPinyin($val);
$Keywordsdata[$key]["search_num"] = 1;
}
Db::name('user_search')->insertAll($Keywordsdata);

}



//判断是否添加过系统搜索关键词
//没有的话 创建新的搜索记录
//有的话 增加系统次数

// 搜索视频列表
//推荐 heart 点赞量 star 收藏量 views 浏览量 后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)
// where('name','like',['%think','php%'],'OR');
$list = Db::name('video')
->alias('video')
->join('fa_user user','user.id = video.user_id','left')
->field('video.*,user.address,user.nickname,user.avatar')
->order('star desc,heart desc,views desc')
->where('title','like',$Keywords,'OR')
->page($page,$limit)
// ->fetchSql(true)
->select();
// var_dump($list);die;
foreach ($list as $key => $value) {
if (!empty($user)) {
// 是否点赞
$list[$key]["is_heart"] = Db::name('video_heart')
->where("video_id",$value["id"])
->where("user_id",$user->id)
->count();
//是否收藏
$list[$key]["is_star"] = Db::name('video_star')
->where("video_id",$value["id"])
->where("user_id",$user->id)
->count();
//是否关注
$list[$key]["is_user_follow"] = Db::name('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;

}
}

$this->success('操作成功',$list);
}

public function VideoDetails() {

$id = $this->request->param('id');
$user = $this->auth->getUser();

// 搜索视频列表
$list["video_details"] = Db::name('video')
->alias('video')
->join('fa_user user','user.id = video.user_id','left')
->field('video.*,user.address,user.nickname,user.avatar')
->order('star desc,heart desc,views desc')
->where('video.id', $id)
->find();
// var_dump($list);die;

if (!empty($user)) {
// 是否点赞
$list["is_heart"] = Db::name('video_heart')
->where("video_id",$id)
->where("user_id",$user->id)
->count();
//是否收藏
$list["is_star"] = Db::name('video_star')
->where("video_id",$id)
->where("user_id",$user->id)
->count();
//是否关注
$list["is_user_follow"] = Db::name('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::name('video_heart')
->where("video_id",$id)
->count();
//收藏数量
$list["star"] = Db::name('video_star')
->where("video_id",$id)
->count();
//评论数量
$list["comment"] = Db::name('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();

$this->success('操作成功',$list);
}
/**
* 搜索
*
* @ApiTitle (搜索)
* @ApiSummary (发布视频)
* @ApiAuthor (接口作者)
* @ApiMethod (POST)
* @ApiRoute (/api/video.Video/user_search)
* @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 user_search() {


$user = $this->auth->getUser();

$this->success('操作成功', Db::name('user_search') ->where('user_id',$user->id)->select());
}

public function deluser_search() {


$id = $this->request->param('id');
$user = $this->auth->getUser();

$this->success('操作成功', Db::name('user_search') ->where('id',"in",$id)->where('user_id',$user->id)->delete());
}

/**
* 搜索
*
* @ApiTitle (搜索)
* @ApiSummary (发布视频)
* @ApiAuthor (接口作者)
* @ApiMethod (POST)
* @ApiRoute (/api/video.Video/search_word)
* @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 search_word() {

$this->success('操作成功', Db::name('search_word')->order("search_num desc") ->select());
}
/**
* 搜索用户
*
* @ApiTitle (搜索用户)
* @ApiSummary (搜索用户)
* @ApiAuthor (接口作者)
* @ApiMethod (POST)
* @ApiRoute (/api/video.Video/search_user)
* @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 search_user() {

$keywords = $this->request->param('keywords');

$user = $this->auth->getUser();
preg_match_all('/./us', $keywords, $match);

if(count($match[0])>2){
$pa = new PhpAnalysis('utf-8','utf-8',true);

$pa::$loadInit = false;

$pa->LoadDict();

$pa->SetSource($keywords);

$pa->StartAnalysis(false);

$tags = $pa->GetFinallyKeywords();
$Keywords = explode( ",",$tags);
foreach ($Keywords as $key => $val) {
$Keywords[$key] = "%".$val."%";
}
}else{

$tags=$keywords;
$Keywords = "%".$keywords."%";
}
// var_dump($Keywords);die;

$user_search = Db::name('user_search') ->where('keywords','like',$Keywords,'OR') ->select();

//判断是否添加过搜索关键词
if (count($user_search) > 0) {
//有的话 增加搜索次数
Db::name('user_search') ->where('keywords','like',$Keywords,'OR')->setInc("search_num");
} else {
$Keywordsz = explode(",", $tags);
$Keywordsdata = [];
foreach ($Keywordsz as $key => $val) {
$Keywordsdata[$key]["keywords"] = $val;
$Keywordsdata[$key]["pinyin_full"] = Pinyin::getPinyin($val);
$Keywordsdata[$key]["pinyin_simple"] = Pinyin::getShortPinyin($val);
$Keywordsdata[$key]["search_num"] = 1;
$Keywordsdata[$key]["user_id"] = $user->id;
$Keywordsdata[$key]["createtime"] = time();
}
//没有的话 创建新的搜索记录 后期/查看自己搜索记录的数量 删除超出部分\
Db::name('user_search')->insertAll($Keywordsdata);

}

//系统关键词
$user_search2 = Db::name('search_word') ->where('keywords','like',$Keywords,'OR')->select();
if (count($user_search2) > 0) {
//有的话 增加搜索次数
Db::name('search_word') ->where('keywords','like',$Keywords,'OR')->setInc("search_num");
} else {
$Keywordsz = explode($tags,",");
$Keywordsdata = [];
foreach ($Keywordsz as $key => $val) {
$Keywordsdata[$key]["keywords"] = $val;
$Keywordsdata[$key]["pinyin_full"] = Pinyin::getPinyin($val);
$Keywordsdata[$key]["pinyin_simple"] = Pinyin::getShortPinyin($val);
$Keywordsdata[$key]["search_num"] = 1;
}
Db::name('user_search')->insertAll($Keywordsdata);

}

$list = Db::name('user') ->where('nickname','like',$Keywords,'OR')->whereor('id','like',$Keywords) ->select();
// ->fetchSql(true)
// dump($list);die;
foreach ($list as $key => $value) {

$list[$key]["is_user_follow"] = Db::name('user_follow')
->where("follower_id",$value["id"])
->where("user_id",$user->id)
->count();
}


$this->success('操作成功',$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 = $this->request->param('id');

$user = $this->auth->getUser();
$info = Db::name('video_heart')->where('video_id', $video_id)->where('user_id', $user->id)->find();
$heart =Db::name('video_heart')->where('video_id', $video_id) ->count();
if (empty($info)) {
$heart=$heart+1;
Db::name('video')->where('id', $video_id) ->setInc('heart');
$res = Db::name('video_heart')->insert([
'video_id' => $video_id, 'user_id' => $user->id
]);
} else {

$heart=$heart-1;
Db::name('video')->where('id', $video_id) ->setDec('heart');
$res = Db::name('video_heart')->where('id', $info['id'])->delete();
}
if ($res) {

$this->success('操作成功',$heart);
} else {
$this->error('操作失败,请重试。');
}
}
/**
* 我的视频
* */
public function myVideo() {
$page = $this->request->param('page');
$limit = $this->request->param('limit');
$user = $this->auth->getUser();
$user_id = $user->id;

//推荐 heart 点赞量 star 收藏量 views 浏览量 后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)

$list = Db::name('video')
->alias('video')
->field('video.*')
->where('video.user_id', $user_id)
->page($page,$limit)
->select();

foreach ($list as $key => $value) {
if (!empty($user)) {
// 是否点赞
$list[$key]["is_heart"] = Db::name('video_heart')
->where("video_id",$value["id"])
->where("user_id",$user->id)
->count();
//是否收藏
$list[$key]["is_star"] = Db::name('video_star')
->where("video_id",$value["id"])
->where("user_id",$user->id)
->count();
//是否关注
$list[$key]["is_user_follow"] = Db::name('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;

}
}
if (is_array($list)) {
$this->success('操作成功',$list);
} else {
$this->error('操作失败,请重试。');
}
}
/**
* 收藏视频
* */
public function mystarVideo() {
$page = $this->request->param('page');
$limit = $this->request->param('limit');
$user = $this->auth->getUser();
$user_id = $user->id;

//推荐 heart 点赞量 star 收藏量 views 浏览量 后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)

$list = Db::name('video')
->alias('video')
->join('fa_video_star video_star','video_star.video_id = video.id','left')
->field('video.*')
->where('video_star.user_id', $user_id)
->page($page,$limit)
->select();

foreach ($list as $key => $value) {
if (!empty($user)) {
// 是否点赞
$list[$key]["is_heart"] = Db::name('video_heart')
->where("video_id",$value["id"])
->where("user_id",$user->id)
->count();
//是否收藏
$list[$key]["is_star"] = Db::name('video_star')
->where("video_id",$value["id"])
->where("user_id",$user->id)
->count();
//是否关注
$list[$key]["is_user_follow"] = Db::name('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;

}
}
if (is_array($list)) {
$this->success('操作成功',$list);
} else {
$this->error('操作失败,请重试。');
}
}
/**
* 收藏视频
* */
public function starVideo() {
$video_id = $this->request->param('id');

$user = $this->auth->getUser();
$user_id = $user->id;
$info = Db::name('video_star')->where('video_id', $video_id)->where('user_id', $user_id)->find();
if (empty($info)) {

Db::name('video')->where('id', $video_id) ->setInc('star');
$res = Db::name('video_star')->insert([
'video_id' => $video_id, 'user_id' => $user_id
]);
} else {

Db::name('video')->where('id', $video_id) ->setDec('star');
$res = Db::name('video_star')->where('id', $info['id'])->delete();
}
if ($res) {
$this->success('操作成功');
} else {
$this->error('操作失败,请重试。');
}
}
/**
* 评论列表
* */
public function getCommentList() {
$video_id = $this->request->param('id');
$page = $this->request->param('page');
$limit = $this->request->param('limit');
$login = $this->auth->getUser();
$list = Db::name('video_comment')
->alias('video_comment')
->join('fa_user user','user.id = video_comment.user_id','left')
->field('video_comment.*,user.address,user.nickname,user.avatar')
->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::name("video_comment_reply")
// ->alias('video_comment_reply')
// ->join('fa_user user','user.id = video_comment_reply.user_id','left')
// ->where("video_comment_reply.comment_id",$comment_id)
// ->select();
$list[$key]["timepoor"]=$zz;
$list[$key]["avatar"]=!empty($value["avatar"])?$value["avatar"]:letter_avatar($value["nickname"]);
$list[$key]["replycount"]=Db::name("video_comment_reply") ->where("comment_id",$value['id']) ->count();


}

$this->success('success', $list);
}

/**
* 发布评论
* */
public function commentVideo() {
$video_id = $this->request->param('id');
$content = $this->request->param('content');

$user = $this->auth->getUser();
$user_id = $user->id;

$id = $res = Db::name('video_comment')->insertGetId([
'content' => $content,
'video_id' => $video_id,
'user_id' => $user_id,
'createtime' => time(),
'heart' => 0,
]);
if ($res) {

$this->success('操作成功。' );
} else {
$this->error('操作失败,请重试。');
}
}

/**
* 回复评论
* */
public function replyComment() {
$comment_id = $this->request->param('comment_id');
$content = $this->request->param('content');

if (empty($comment_id) || empty($content)) {
$this->error("参数不全");
}

$login = $this->auth->getUser();
$login_id = $login->id;

$login = $this->auth->getUser('id', $login_id);
$now = time();
$data = [
'comment_id' => $comment_id,
'content' => $content,
'user_id' => $login['id'],
'user_avatar' => $login['avatar'],
'user_nickname' => $login['nickname'],
'createtime' => $now,
];

$res = Db::name("video_comment_reply")->insertGetId($data);
if (!$res) {
$this->error('操作失败,请重新操作。');
} else {
$this->success('操作成功。', [
'info' => $login
]);
}
}
/**
* 回复评论
* */
public function replyReply() {
$comment_id = $this->request->param('comment_id');
$content = $this->request->param('content');

if (empty($comment_id) || empty($content)) {
$this->error("参数不全");
}

$login = $this->auth->getUser();
$login_id = $login->id;

$login =$this->auth->getUser('id', $login_id);
$now = time();

$res = Db::name("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_avatar' => $login['avatar'],
'user_nickname' => $login['nickname'],
'createtime' => $now,
];

$res = Db::name("video_comment_reply")->insertGetId($data);
if (!$res) {
$this->error('操作失败,请重新操作。');
} else {
$this->success('操作成功。', [
'info' => $login
]);
}
}
/**
* 查看评论回复
* */
public function replylist() {
$comment_id = $this->request->param('comment_id');
// $reply_id = $this->request->param('reply_id');

// if (empty($reply_id)) {
// $this->error("参数不全");
// }
if (empty($comment_id)) {
$this->error("参数不全");
}

$login = $this->auth->getUser();
$login_id = $login->id;

$login = $this->auth->getUser('id', $login_id);
$now = time();
//获取回复列表和用户信息,并跌倒循环树状分支
$res = Db::name("video_comment_reply")
->alias('video_comment_reply')
->join('fa_user user','user.id = video_comment_reply.user_id','left')
->where("video_comment_reply.comment_id",$comment_id)
->field('user.*,video_comment_reply.*')
->select();
foreach ($res as $key => &$value) {
if(!empty($value["reply_id"])){
$value["reply"]=Db::name("video_comment_reply")
->alias('video_comment_reply')
->join('fa_user user','user.id = video_comment_reply.user_id','left')
->where("video_comment_reply.id",$value["reply_id"])
->find();
}
$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::name("video_comment_reply")
// ->alias('video_comment_reply')
// ->join('fa_user user','user.id = video_comment_reply.user_id','left')
// ->where("video_comment_reply.comment_id",$comment_id)
// ->select();
$res[$key]["timepoor"]=$zz;
// code...
}
// var_dump($res);die;
// $res=$this->getTree($res,2,0,0);
if (!$res) {
$this->error('操作失败,请重新操作。');
} else {
$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 = $this->request->param('user_id');
$page = $this->request->param('page');
$limit = $this->request->param('limit');

$user = $this->auth->getUser();
$user_id=$user->id;

$list = Db::name('user_follow')
->alias('user_follow')
->join('fa_user user','user.id = user_follow.user_id','left')
->join('fa_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.avatar as user_avatar, follower.username as follower_username,follower.nickname as follower_nickname,follower.avatar as follower_avatar')
->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::name('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 = $this->request->param('user_id');
$page = $this->request->param('page');
$limit = $this->request->param('limit');

$user = $this->auth->getUser();
$user_id=$user->id;
// var_dump($user_id);die;
$list = Db::name('user_follow')
->alias('user_follow')
->join('fa_user user','user.id = user_follow.user_id','left')
->join('fa_user follower','follower.id = user_follow.follower_id','left')
->field('user_follow.*,user.id as user_id,user.nickname as user_nickname,user.avatar as user_avatar,follower.id as follower_id,follower.nickname as follower_nickname,follower.avatar as follower_avatar')
->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::name('user_follow')
->where('user_id',$author_id )
->where('follower_id',$val['user_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 = $this->request->param('id');

$user = $this->auth->getUser();
$login_id=$user->id;
$count = Db::name('user_follow')
->where('user_id', $login_id)
->where('follower_id', $author_id)
->count();

if ($count > 0) {
$res = Db::name('user_follow')
->where('user_id', $login_id)
->where('follower_id', $author_id)
->delete();
} else {
if ($author_id == $login_id) {
$this->error('用户无法关注自己');
}

$res = Db::name('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::name("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,avatar as user_avatar')
->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::name('user_follow')
// ->where('user_id', $user_id)
// ->where('follower_id', $author_id)
// ->count());die;
//是否关注,
$follow = (Db::name('user_follow')
->where('user_id', $user_id)
->where('follower_id', $author_id)
->count()) > 0;
//是否回关
$follow_user = (Db::name('user_follow')
->where('user_id', $user_id)
->where('user_id', $author_id)
->count()) > 0;
//获赞数量、关注数量、粉丝数量、直播数量
//fa_video_heart,fa_video_star

//点赞
$video_heart=Db::name('video_heart')
->alias('video_heart')
->join('fa_video video','video.id = video_heart.video_id','left')
->where('video.user_id', $author_id)
->count();

//收藏
$video_star=Db::name('video_star')
->alias('video_heart')
->join('fa_video video','video.id = video_heart.video_id','left')
->where('video.user_id', $author_id)
->count();
//粉丝
$follows = Db::name('user_follow')
->where('follower_id', $author_id)
->count() ;
//关注
$user_follow = Db::name('user_follow')
->where('user_id', $author_id)
->count() ;

//作品,
$videocount = Db::name('video')
->alias('video')
->join('fa_user user','user.id = video.user_id','left')
->field('video.*,user.address,user.nickname,user.avatar')
->order('star desc,heart desc,views desc')
->where("user.id",$author_id)
->count();
//推荐 heart 点赞量 star 收藏量 views 浏览量 后期关联关键词表进行关键词排序+++ 大后期的大数据算法(生成自己喜欢的推荐)
$list = Db::name('video')
->alias('video')
->join('fa_user user','user.id = video.user_id','left')
->field('video.*,user.address,user.nickname,user.avatar')
->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::name('video_heart') ->where("video_id",$value["id"]) ->where('user_id', $user_id) ->count();
//是否收藏
$list[$key]["is_star"] = Db::name('video_star')
->where("video_id",$value["id"])
->where('user_id', $user_id)
->count();
//是否关注
$list[$key]["is_user_follow"] = Db::name('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]);
}


}


举报

相关推荐

0 条评论