我们都知道,在短视频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的朋友们提供一些帮助。
原创声明:本篇文章为原创文章,转载请注明出处和作者。