抖音短视频源码中视频排序模块热门列表解决方案

我们都知道,在短视频APP中会有推荐列表,不同短视频APP的推荐机制是不同的,有聚集流量的“中心化”推荐方式,也有对新手友好的“去中心化”推荐机制。
中心化推荐机制是指,在推荐视频时,优先推荐更有权重、赞数更多的网红视频,通过运营筛选出高质量的爆款视频引爆平台潮流。
去中心化则是指推荐榜上以草根新人为主,尽量不忽略每一个新手用户,尽量把流量平摊到多人身上。
而_抖音短视频源码_选择的推荐机制是“中心化”推荐机制,以下就是关于该推荐机制的相关源代码。

代码简介:
###1.视频显示排序会按照views观看量,likes点赞量热门条件进行倒叙排列

public function getVideoList($uid,$p){
    $nums=20;
    $start=($p-1)*$nums;

    $videoids_s='';
    $where="isdel=0 and status=1 and is_ad=0"; //上架且审核通过
    $video=DI()->notorm->users_video
         ->select("*")
         ->where($where)
         ->order("views desc,likes desc")
         ->limit($start,$nums)
         ->fetchAll();

    foreach($video as $k=>$v){ 
      $userinfo=$this->getUserInfo($v['uid']);
        if(!$userinfo){
          $userinfo['user_nicename']="已删除";
         }
        $video[$k]['userinfo']=$userinfo;
        $video[$k]['datetime']=$this->datetime($v['addtime']); 
        $video[$k]['comments']=$this->NumberFormat($v['comments')
        $video[$k]['likes']=$this->NumberFormat($v['likes']);  
        $video[$k]['steps']=$this->NumberFormat($v['steps']);  
        if($uid){
         $video[$k]['islike']=(string)$this->ifLike($uid,$v['id'])
         $video[$k]['isstep']=(string)$this->ifStep($uid,$v['id'])
          $video[$k]['isattent']=(string)$this->isAttention($uid,$v['uid']);  
        }else{
           $video[$k]['islike']=0; 
           $video[$k]['isstep']=0; 
           $video[$k]['isattent']=0;   
        }
         $video[$k]['musicinfo']=$this->getMusicInfo($video[$k]['userinfo']['user_nicename'],$v['music_id']);    
         $video[$k]['thumb']=$this->get_upload_path($v['thumb'])
         $video[$k]['thumb_s']=$this->get_upload_path($v['thumb_s']);
         $video[$k]['href']=$this->get_upload_path($v['href']);
        }
        return $video;
    }

###2.每次观看视频会在views数值的基础上加1 views默认数值0

   public function addView($uid,$videoid){
        /*//用户看过的视频存入redis中
        $readLists=DI()->redis -> Get('readvideo_'.$uid);
        $readArr=array();
        if($readLists){
         $readArr=json_decode($readLists,true);
         if(!in_array($videoid,$readArr)){
            $readArr[]=$videoid;
           }
        }else{
          $readArr[]=$videoid;
        }
        DI()->redis -> Set('readvideo_'.$uid,json_encode($readArr));*/
        DI()->notorm->users_video
           ->where("id = '{$videoid}'")
           ->update( array('views' => new NotORM_Literal("views + 1") ) );
       return 0;
    }

###3.点赞视频时会在likes数值的基础上加1 likes默认数值0

public function addLike($uid,$videoid){
        $rs=array(
            'islike'=>'0',
            'likes'=>'0',
        );
        $video=DI()->notorm->users_video
             ->select("likes,uid,thumb")
             ->where("id = '{$videoid}'")
             ->fetchOne();

        if(!$video){
            return 1001;
        }
        if($video['uid']==$uid){
            return 1002;//不能给自己点赞
        }
        $like=DI()->notorm->users_video_like
               ->select("id")
             ->where("uid='{$uid}' and videoid='{$videoid}'")
             ->fetchOne();
        if($like){
           DI()->notorm->users_video_like
            ->where("uid='{$uid}' and videoid='{$videoid}'")
           ->delete();
           DI()->notorm->users_video
              ->where("id = '{$videoid}' and likes>0")
              ->update( array('likes' => new NotORM_Literal("likes - 1") ) );
            $rs['islike']='0';
        }else{
            DI()->notorm->users_video_like
               ->insert(array("uid"=>$uid,"videoid"=>$videoid,"addtime"=>time() ));
            DI()->notorm->users_video
                ->where("id = '{$videoid}'")
                ->update( array('likes' => new NotORM_Literal("likes + 1") ) );
            $rs['islike']='1';
        }   
        $video=DI()->notorm->users_video
              ->select("likes,uid,thumb")
              ->where("id = '{$videoid}'")
             ->fetchOne();   
        $rs['likes']=$video['likes'];
        $fabulous=DI()->notorm->praise_messages->where("uid='{$uid}' and obj_id='{$videoid}' and type=1")->fetchOne();
        if(!$fabulous){
            DI()->notorm->praise_messages->insert(array("uid"=>$uid,"touid"=>$video['uid'],"obj_id"=>$videoid,"videoid"=>$videoid,"addtime"=>time(),"type"=>1,"video_thumb"=>$video['thumb']));
        }else{
            DI()->notorm->praise_messages->where("uid='{$uid}' and type=1 and obj_id='{$videoid}'")->update(array("addtime"=>time()));
        }
        return $rs;         
    }

以上就是关于抖音短视频源码的“中心化”视频排序列表热门排序在代码层面上的
解决方案,希望能为正在学习搭建短视频APP的朋友们提供一些帮助。
原创声明:本篇文章为原创文章,转载请注明出处和作者。

猜你喜欢

转载自blog.csdn.net/yb1314111/article/details/84983568
今日推荐