def delete_comment(): """删除评论 (GET|POST&LOGIN) :uri: /user/opt/delete-comment :param comment_id: 评论id :returns: {} """ user = request.authed_user params = request.values cid = params.get('comment_id', None) comment = Comment.get_one(cid) if not comment: return error.CommentNotExist if str(comment.author) != str(user._id): return error.AuthFailed comment.delete_model() # 更新活动评论数 avideos = ActivityVideo.get_activity_video(vid=str(comment.video)) for avideo in avideos: ts = time.time() aconfig = ActivityConfig.get_one(str(avideo['activity_id']), check_online=False) if aconfig and aconfig.status == const.ACTIVITY_BEGIN \ and (aconfig.begin_at < ts and aconfig.end_at > ts): avideo = ActivityVideo.get_one(avideo['_id'], check_online=False) avideo.update_model({'$inc': {'comment_count': -1}}) return {}
def unlike_video(): """取消赞视频 (GET|POST&LOGIN) :uri: /user/opt/like-video :param video_id: 被赞视频id :returns: {} """ user = request.authed_user vid = request.values.get('video_id', None) video = Video.get_one(vid) if not video: return error.VideoNotExist key = 'lock:unlike_video:%s:%s' % (str(user._id), vid) with util.Lockit(Redis, key) as locked: if locked: return error.LikeVideoFailed('取消赞失败') ulv = UserLikeVideo.get_by_ship(str(user._id), vid) ulv.delete_model() if ulv else None # 更新活动点赞数 avideos = ActivityVideo.get_activity_video(vid=vid) for avideo in avideos: ts = time.time() aconfig = ActivityConfig.get_one(str(avideo['activity_id']), check_online=False) if aconfig and aconfig.status == const.ACTIVITY_BEGIN \ and (aconfig.begin_at < ts and aconfig.end_at > ts): avideo = ActivityVideo.get_one(avideo['_id'], check_online=False) avideo.update_model({'$inc': {'like_count': -1}}) return {}
def create_comment(): """创建评论 (GET|POST&LOGIN) :uri: /user/opt/submit-comment :param video_id: 被评论视频id :param content: 评论内容 :returns: {'comment': object} """ user = request.authed_user params = request.values vid = params.get('video_id', None) content = params.get('content', None) if not vid or not content: return error.InvalidArguments if not Video.get_one(vid): return error.VideoNotExist # 敏感词检查 if Spam.filter_words(content, 'comment'): return error.InvalidContent comment = Comment.init() comment.author = ObjectId(str(user._id)) comment.content = content comment.video = ObjectId(vid) cid = comment.create_model() if cid: # 发送评论消息 Message.send_video_msg(str(user._id), str(vid), 'comment') # 任务检查 if user: UserTask.check_user_tasks(str(user._id), COMMENT_VIDEO, 1) # 更新活动评论数 avideos = ActivityVideo.get_activity_video(vid=vid) for avideo in avideos: ts = time.time() aconfig = ActivityConfig.get_one(str(avideo['activity_id']), check_online=False) if aconfig and aconfig.status == const.ACTIVITY_BEGIN \ and (aconfig.begin_at < ts and aconfig.end_at > ts): avideo = ActivityVideo.get_one(avideo['_id'], check_online=False) avideo.update_model({'$inc': {'comment_count': 1}}) return Comment.get_one(str(cid)).format()
def like_video(): """赞视频 (GET|POST&LOGIN) :uri: /user/opt/like-video :param video_id: 被赞视频id :returns: {} """ user = request.authed_user vid = request.values.get('video_id', None) video = Video.get_one(vid) if not video: return error.VideoNotExist ulv = UserLikeVideo.get_by_ship(str(user._id), vid) if not ulv: key = 'lock:like_video:%s:%s' % (str(user._id), vid) with util.Lockit(Redis, key) as locked: if locked: return error.LikeVideoFailed ulv = UserLikeVideo.init() ulv.source = ObjectId(str(user._id)) ulv.target = ObjectId(vid) _id = ulv.create_model() if _id: # 发送点赞消息 Message.send_video_msg(str(user._id), str(vid), 'like') # 更新活动点赞数 avideos = ActivityVideo.get_activity_video(vid=vid) for avideo in avideos: ts = time.time() aconfig = ActivityConfig.get_one(str( avideo['activity_id']), check_online=False) if aconfig and aconfig.status == const.ACTIVITY_BEGIN \ and (aconfig.begin_at < ts and aconfig.end_at > ts): avideo = ActivityVideo.get_one(avideo['_id'], check_online=False) avideo.update_model({'$inc': {'like_count': 1}}) return {}
def play_video(vid): """播放视频 (GET) :uri: /videos/<string:vid>/play :returns: redirect(real_url) """ ut = request.values.get("ut", None) uid = User.uid_from_token(ut) start = int(time.time() * 1000) video = Video.get_one(vid) if not video: result = { 'status': error.VideoNotExist.errno, 'errmsg': error.VideoNotExist.errmsg, 'data': {}, 'time': int(time.time() * 1000) - start, } return jsonify(result) video.update_model({'$inc': {'vv': 1}}) # 如果是栏目视频,给对应频道增加播放量 channel = ShowChannel.get_one(video.channel) channel and channel.update_model({'$inc': {'play_count': 1}}) # 观看视频任务检查 if uid: UserTask.check_user_tasks(uid, PLAY_VIDEO, 1) # 更新活动播放量 avideos = ActivityVideo.get_activity_video(vid=vid) for avideo in avideos: ts = time.time() aconfig = ActivityConfig.get_one(str(avideo['activity_id']), check_online=False) if aconfig and aconfig.status == const.ACTIVITY_BEGIN \ and (aconfig.begin_at < ts and aconfig.end_at > ts): avideo = ActivityVideo.get_one(avideo['_id'], check_online=False) avideo.update_model({'$inc': {'vv': 1}}) return redirect(video.real_url())