短视频接口

该博客详细介绍了如何使用PHP实现七牛云视频上传配置及管理功能,包括获取上传凭证、视频上传、视频列表、删除视频、搜索功能等。代码中涉及了文件操作、数据库交互、鉴权类的使用,以及视频点赞、收藏、评论等互动功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?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]);
    }


}
04-16 975
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值