Example #1
0
def search_user():
    """搜索用户"""
    form = SearchForm().validate_for_api()
    page_data = BaseUser.query.filter(BaseUser.name.like("%" + form.q.data + "%")). \
        paginate(error_out=False, page=int(form.page.data), per_page=20)
    baseusers = []
    for i in page_data.items:
        user = User.query.filter(User.id == i.id).first()
        baseuser = {
            "id":
            i.id,
            "name":
            i.name,
            "info":
            user.info,
            "face":
            user.face,
            "post_num":
            0,
            "fannum":
            num_assign(Follow.query.filter(Follow.follow_id == i.id).count()),
            "follownum":
            num_assign(Follow.query.filter(Follow.user_id == i.id).count()),
        }
        baseusers.append(baseuser)
    r = {
        "has_next": page_data.has_next,
        "has_prev": page_data.has_prev,
        "pages": page_data.pages,
        "page": page_data.page,
        "total": page_data.total,
        "baseusers": baseusers
    }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #2
0
def get_latest():
    """获取最新投稿"""
    form = NewForm().validate_for_api()
    tag = None
    if form.tag_id.data == -1:
        videos = Video.query.limit(form.number.data).all()
    else:
        # 获取标签及其子标签
        sub_tags = [i.id for i in Tag.query.filter(Tag.parent_id == form.tag_id.data).all()]
        videos = Video.query.filter(or_(Video.tag_id == form.tag_id.data, Video.tag_id.in_(sub_tags))).order_by(
            Video.create_time.desc()).limit(form.number.data).all()
        tag = Tag.query.filter(Tag.id == form.tag_id.data).first()
    random.shuffle(videos)
    r = {
        "tag": tag.name if tag else "全部",
        "total": len(videos),
        "videos": [{
            "id": i.id,
            "name": i.name,
            "playnum": num_assign(i.playnum),
            "commentnum": num_assign(i.commentnum),
            "logo": i.logo,
            "length": i.length,
            "is_bangumi": False
        } for i in videos]
    }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #3
0
def get_relevant():
    """获得视频页面下的相关推荐视频"""
    form = TagForm().validate_for_api()
    videos = Video.query.filter(Video.tag_id == form.tag_id.data). \
        order_by(Video.create_time.desc()).limit(30).all()
    random.shuffle(videos)
    if len(videos) <= 10:
        pass
    else:
        videos = random.sample(videos, random.randint(len(videos) - random.randint(2, 9), len(videos)))
    tmp = []
    for i in videos:
        baseuser = BaseUser.query.filter(BaseUser.id == i.user_id).first()
        video = {
            "id": i.id,
            "name": i.name,
            "logo": i.logo,
            "playnum": num_assign(i.playnum),
            "commentnum": num_assign(i.commentnum),
            "user": {
                "id": baseuser.id,
                "name": baseuser.name
            },
            "length": i.length,
            "is_bangumi": False
        }
        tmp.append(video)
    r = {
        "total": len(videos),
        "videos": tmp
    }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #4
0
def get_user():
    """查看用户信息"""
    baseuser = BaseUser.query.filter(BaseUser.id == current_user.id). \
        first_or_404(description="找不到该用户")
    user = User.query.filter(User.id == baseuser.id).first()
    r = {
        "user": {
            "id": baseuser.id,
            "name": baseuser.name,
            "account": baseuser.account,
            "gender": GenderEnum(baseuser.gender).name,
            "email": user.email if user else None,
            "phone": user.phone if user else None,
            "info": user.info if user else None,
            "face": user.face if user else None,
            "create_time": baseuser.create_time.strftime("%Y-%m-%d %H:%M:%S")
        },
        "follownum":
        num_assign(
            Follow.query.filter(Follow.user_id == current_user.id).count()),
        "fannum":
        num_assign(
            Follow.query.filter(Follow.follow_id == current_user.id).count())
    }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #5
0
def get_fan_or_follow():
    """查看粉丝或者关注"""
    form = FanOrFollowForm().validate_for_api()
    if form.tag_id.data == 1:
        # 查找粉丝,查找Follow表中follow_id等于自己的id
        fans = Follow.query.order_by(Follow.create_time.desc()).filter(
            Follow.follow_id == current_user.id).all()
        fans = [i.user_id for i in fans]
        r = {
            "fans": [{
                "id":
                i.id,
                "name":
                BaseUser.query.filter(BaseUser.id == i.id).first().name,
                "info":
                i.info,
                "follownum":
                num_assign(
                    Follow.query.filter(
                        Follow.user_id == current_user.id).count()),
                "fannum":
                num_assign(
                    Follow.query.filter(
                        Follow.follow_id == current_user.id).count()),
                "face":
                i.face
            } for i in User.query.filter(User.id.in_(fans))],
            "total":
            int(len(fans))
        }
    else:
        # 查找Follow表中user_id等于自己的id
        follows = Follow.query.filter(Follow.user_id == current_user.id).all()
        follows = [i.follow_id for i in follows]
        r = {
            "follows": [{
                "id":
                i.id,
                "name":
                BaseUser.query.filter(BaseUser.id == i.id).first().name,
                "info":
                i.info,
                "follownum":
                num_assign(
                    Follow.query.filter(Follow.user_id == i.id).count()),
                "fannum":
                num_assign(
                    Follow.query.filter(Follow.follow_id == i.id).count()),
                "face":
                i.face
            } for i in User.query.filter(User.id.in_(follows))],
            "total":
            int(len(follows))
        }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #6
0
def get_one():
    """通过视频id获取视频信息"""
    form = IdForm().validate_for_api()
    video = Video.query.filter(Video.id == form.id.data).first_or_404(description="找不到该视频资源")
    baseuser = BaseUser.query.filter(BaseUser.id == video.user_id).first()
    user = User.query.filter(User.id == baseuser.id).first() if baseuser else None
    # 子标签
    sub = Tag.query.filter(Tag.id == video.tag_id).first()
    # 父标签
    index = Tag.query.filter(Tag.id == sub.parent_id).first() if sub else None
    r = {
        "id": video.id,
        "name": video.name,
        "url": video.url,
        "logo": video.logo,
        "info": video.info,
        "user": {
            "id": baseuser.id,
            "name": baseuser.name,
            "face": user.face,
            "fannum": num_assign(Follow.query.filter(Follow.follow_id == baseuser.id).count()),
            "follownum": num_assign(Follow.query.filter(Follow.user_id == baseuser.id).count()),
            "info": user.info
        } if baseuser else None,
        "tag": {
            "id": index.id if index else None,
            "name": index.name if index else None,
            "sub_id": sub.id if sub else None,
            "sub_name": sub.name if sub else None
        },
        "is_bangumi": False,
        "playnum": num_assign(video.playnum),
        "commentnum": num_assign(video.commentnum),
        "colnum": num_assign(video.colnum),
        "release_time": video.release_time.strftime("%Y-%m-%d %H:%M:%S")
    }
    with db.auto_commit():
        viewlog = ViewLog.query.filter(ViewLog.user_id == current_user.id,
                                       ViewLog.video_id == video.id).first()
        if not viewlog:
            viewlog = ViewLog()
            viewlog.user_id = current_user.id
            viewlog.video_id = video.id
        viewlog.update_time = datetime.datetime.now()
        db.session.add(viewlog)
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #7
0
def get_relevant():
    """获取番剧页面下的相关推荐视频"""
    videos = Video.query.filter(Video.name.like("%" + "" +
                                                "%")).limit(10).all()
    r = {
        "total":
        10,
        "videos": [{
            "id": i.id,
            "name": i.name,
            "logo": i.logo,
            "playnum": num_assign(i.playnum),
            "commentnum": num_assign(i.commentnum),
            "length": i.length
        } for i in videos]
    }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #8
0
def get_rank():
    """获取排行榜"""
    form = RankForm().validate_for_api()
    # 获取标签及其子标签
    sub_tags = [i.id for i in Tag.query.filter(Tag.parent_id == form.tag_id.data).all()]
    now_time = datetime.datetime.now()
    if form.tag_id.data == -1:
        videos = Video.query.filter(
            Video.release_time.between(now_time - datetime.timedelta(days=form.time.data), now_time)). \
            order_by(Video.score.desc()).limit(form.number.data).all()
    else:
        videos = Video.query.filter(
            Video.release_time.between(now_time - datetime.timedelta(days=form.time.data), now_time), or_(
                Video.tag_id == form.tag_id.data, Video.tag_id.in_(sub_tags))). \
            order_by(Video.score.desc()).limit(form.number.data).all()
    tmp = []
    for i in videos:
        baseuser = BaseUser.query.filter(BaseUser.id == i.user_id).first()
        video = {
            "id": i.id,
            "name": i.name,
            "score": i.score,
            "info": i.info,
            "playnum": num_assign(i.playnum),
            "commentnum": num_assign(i.commentnum),
            "colnum": num_assign(i.colnum),
            "logo": i.logo,
            "user": {
                "id": baseuser.id,
                "name": baseuser.name
            },
            "is_bangumi": False,
            "release_time": i.release_time.strftime("%Y-%m-%d %H:%M:%S")
        }
        tmp.append(video)
    tag = Tag.query.filter(Tag.id == form.tag_id.data).first()
    r = {
        "time": form.time.data,
        "tag": tag.name if tag else "全部",
        "total": len(videos),
        "videos": tmp
    }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #9
0
def get_one():
    """通过bangumi的id获取信息"""
    form = IdForm().validate_for_api()
    bangumi = Bangumi.query.filter(Bangumi.id == form.id.data, Bangumi.status == 1). \
        first_or_404(description="找不到该番剧")
    videos = [{
        "video_id": i.video_id,
        "piece": i.piece
    } for i in Episode.query.filter(Episode.bangumi_id == bangumi.id).all()]
    episodes = []
    for i in videos:
        video = Video.query.filter(Video.id == i["video_id"]).first()
        episode = {
            "id": video.id,
            "piece": i["piece"],
            "name": video.name,
            "logo": video.logo,
            "is_bangumi": True
        }
        episodes.append(episode)
    r = {
        "id": bangumi.id,
        "name": bangumi.name,
        "logo": bangumi.logo,
        "info": bangumi.info,
        "playnum": num_assign(bangumi.playnum),
        "commentnum": num_assign(bangumi.commentnum),
        "colnum": num_assign(bangumi.colnum),
        "fannum": num_assign(bangumi.fannum),
        "grade": bangumi.grade,
        "voice_actors": bangumi.voice_actors,
        "staff": bangumi.staff,
        "episodes": episodes,
        "is_finish": bangumi.is_finish,
        "start_date": bangumi.start_date.strftime("%Y-%m-%d"),
        "update_time": bangumi.update_time.strftime("%H:%M:%S"),
        "update_weekday": bangumi.update_weekday
    }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #10
0
def get_rank():
    """获取番剧/国产动画排行榜"""
    form = RankForm().validate_for_api()
    if form.tag_id.data == -1 or form.tag_id.data == 2:
        # 查找番剧排行榜
        bangumis = Bangumi.query.filter(
            Bangumi.tag_id == 2, Bangumi.status == 1).order_by(
                Bangumi.score.desc()).limit(form.number.data).all()
    else:
        # 查找国产动画排行榜
        bangumis = Bangumi.query.filter(
            Bangumi.tag_id == 1, Bangumi.status == 1).order_by(
                Bangumi.score.desc()).limit(form.number.data).all()
    tmp = []
    for i in bangumis:
        fannum = BangumiCol.query.filter(BangumiCol.bangumi_id == i.id).count()
        bangumi = {
            "id": i.id,
            "name": i.name,
            "score": i.score,
            "playnum": num_assign(i.playnum),
            "commentnum": num_assign(i.commentnum),
            "colnum": num_assign(i.colnum),
            "fannum": num_assign(fannum),
            "logo": i.logo,
            "new_piece": i.new_piece,
            "is_finish": i.is_finish,
            "episodes": i.episodes
        }
        tmp.append(bangumi)
    r = {
        "time": form.time.data,
        "tag": "国产动画" if form.tag_id.data == 1 else "番剧",
        "total": len(bangumis),
        "bangumis": tmp
    }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #11
0
def get_recommend():
    """获取首页及分区的推荐视频"""
    form = RankForm().validate_for_api()
    now_time = datetime.datetime.now()
    # now_time = now_time.replace(hour=12, minute=0, second=0)
    if form.tag_id.data == -1:
        videos = Video.query.filter(
            Video.release_time.between(now_time - datetime.timedelta(days=form.time.data), now_time)). \
            order_by(Video.score.desc()).limit(form.number.data).all()
    else:
        # 获取标签及其子标签
        sub_tags = [i.id for i in Tag.query.filter(Tag.parent_id == form.tag_id.data).all()]
        videos = Video.query.filter(
            Video.release_time.between(now_time - datetime.timedelta(days=form.time.data), now_time),
            or_(Video.tag_id == form.tag_id.data, Video.tag_id.in_(sub_tags))). \
            order_by(Video.score.desc()).limit(form.number.data).all()
    tmp = []
    for i in videos:
        baseuser = BaseUser.query.filter(BaseUser.id == i.user_id).first()
        video = {
            "id": i.id,
            "name": i.name,
            "playnum": num_assign(i.playnum),
            "logo": i.logo,
            "user": {
                "id": baseuser.id,
                "name": baseuser.name
            },
            "is_bangumi": False
        }
        tmp.append(video)
    r = {
        "time": form.time.data,
        "total": 8,
        "videos": tmp
    }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #12
0
def load_comment():
    """加载评论,用于观看视频时加载"""
    form = LoadComForm().validate_for_api()
    page_data = Comment.query.filter(Comment.video_id == form.video_id.data, Comment.root_id == None). \
        paginate(error_out=False,page=int(form.page.data), per_page=int(current_app.config["PER_COM_PAGE"]))
    comments = []
    for i in page_data.items:
        # 查找根节点评论下的评论
        reply = Comment.query.filter(Comment.root_id == i.id).all()
        reply_comments = []
        for j in reply:
            # 查找评论所属的用户
            baseuser = BaseUser.query.filter(BaseUser.id == j.user_id).first()
            user = User.query.filter(User.id == j.user_id).first()
            # 查找回复评论的用户
            reply_baseuser = None
            reply_user = None
            tmp_com = Comment.query.filter(Comment.id == j.parent_id).first()
            if tmp_com:
                # 如果评论的parent_id存在则说明有回复用户
                reply_baseuser = BaseUser.query.filter(
                    BaseUser.id == tmp_com.user_id).first()
                reply_user = User.query.filter(
                    User.id == tmp_com.user_id).first()
            reply_comment = {
                "id": j.id,
                "content": j.content,
                "create_time": j.create_time.strftime("%Y-%m-%d %H:%M:%S"),
                "user": {
                    "id":
                    baseuser.id,
                    "name":
                    baseuser.name,
                    "face":
                    user.face,
                    "follownum":
                    num_assign(
                        Follow.query.filter(
                            Follow.user_id == i.user_id).count()),
                    "fannum":
                    num_assign(
                        Follow.query.filter(
                            Follow.follow_id == i.user_id).count()),
                    "info":
                    user.info,
                    "gender":
                    baseuser.gender
                },
                "reply_user": {
                    "id":
                    reply_baseuser.id,
                    "name":
                    reply_baseuser.name,
                    "face":
                    reply_user.face,
                    "follownum":
                    num_assign(
                        Follow.query.filter(
                            Follow.user_id == reply_baseuser.id).count()),
                    "fannum":
                    num_assign(
                        Follow.query.filter(
                            Follow.follow_id == reply_baseuser.id).count()),
                    "info":
                    reply_user.info,
                    "gender":
                    reply_baseuser.gender
                } if reply_baseuser else None
            }
            reply_comments.append(reply_comment)
        # 查找当前根节点评论的所属用户
        user = User.query.filter(User.id == i.user_id).first()
        baseuser = BaseUser.query.filter(BaseUser.id == i.user_id).first()
        comment = {
            "id": i.id,
            "content": i.content,
            "create_time": i.create_time.strftime("%Y-%m-%d %H:%M:%S"),
            "user": {
                "id":
                baseuser.id,
                "name":
                baseuser.name,
                "face":
                user.face,
                "follownum":
                num_assign(
                    Follow.query.filter(Follow.user_id == i.user_id).count()),
                "fannum":
                num_assign(
                    Follow.query.filter(
                        Follow.follow_id == i.user_id).count()),
                "info":
                user.info,
                "gender":
                baseuser.gender
            },
            "reply_comments": reply_comments
        }
        comments.append(comment)
    r = {
        "has_next":
        page_data.has_next,
        "has_prev":
        page_data.has_prev,
        "pages":
        page_data.pages,
        "page":
        page_data.page,
        "total":
        Comment.query.filter(Comment.video_id == form.video_id.data).count(),
        "comments":
        comments
    }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #13
0
def search_video():
    """根据名字或者ID搜索视频"""
    form = SearchVideoForm().validate_for_api()
    select = Video.query.filter(Video.tag_id != None)
    # 排序筛选
    order = Video.score.desc()
    if form.order.data == -1:
        pass
    elif form.order.data == 1:
        order = Video.playnum.desc()
    elif form.order.data == 2:
        order = Video.release_time.desc()
    elif form.order.data == 3:
        order = Video.danmunum.desc()
    elif form.order.data == 4:
        order = Video.colnum.desc()

    # 时长筛选
    if form.length.data == -1:
        pass
    elif form.length.data == 1:
        select = select.filter(Video.length.between(0, 10 * 60))
    elif form.length.data == 2:
        select = select.filter(Video.length.between(10 * 60, 30 * 60))
    elif form.length.data == 3:
        select = select.filter(Video.length.between(30 * 60, 60 * 60))
    elif form.length.data == 4:
        select = select.filter(Video.length > 60 * 60)

    # 分区筛选
    if form.tag_id.data == -1:
        pass
    else:
        select = select.filter(Video.tag_id == form.tag_id.data)
    page_data = select.filter(
        or_(Video.name.like("%" + form.q.data + "%"),
            Video.id == form.q.data.lower().replace(
                "av", ""))).order_by(order).paginate(error_out=False,
                                                     page=int(form.page.data),
                                                     per_page=20)
    videos = []
    for i in page_data.items:
        baseuser = BaseUser.query.filter(BaseUser.id == i.user_id).first()
        video = {
            "id": i.id,
            "name": i.name,
            "length": i.length,
            "playnum": num_assign(i.playnum),
            "logo": i.logo,
            "user": {
                "id": baseuser.id,
                "name": baseuser.name
            } if baseuser else None,
            "release_time": i.release_time.strftime("%Y-%m-%d"),
        }
        videos.append(video)
    r = {
        "has_next": page_data.has_next,
        "has_prev": page_data.has_prev,
        "pages": page_data.pages,
        "page": page_data.page,
        "total": page_data.total,
        "videos": videos
    }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)
Example #14
0
def get_index():
    """获取番剧索引"""
    form = IndexForm().validate_for_api()
    select = Bangumi.query.filter(Bangumi.tag_id == 2, Bangumi.status == 1)

    # 地区筛选
    if form.area.data == -1:
        pass
    elif form.area.data == 0:
        select = select.filter(Bangumi.area == "日本")
    elif form.area.data == 1:
        select = select.filter(Bangumi.area == "美国")

    # 是否完结筛选
    if form.is_finish.data == -1:
        pass
    elif form.is_finish.data == 0:
        select = select.filter(Bangumi.is_finish == 0)
    elif form.is_finish.data == 1:
        select = select.filter(Bangumi.is_finish == 1)

    # 季节筛选
    if form.season.data == -1:
        pass
    elif form.season.data == 1:
        select = select.filter(Bangumi.season == 1)
    elif form.season.data == 2:
        select = select.filter(Bangumi.is_finish == 2)
    elif form.season.data == 3:
        select = select.filter(Bangumi.is_finish == 3)
    elif form.season.data == 4:
        select = select.filter(Bangumi.is_finish == 4)

    # 年份筛选
    if form.pub_date.data == -1:
        pass
    else:
        select = select.filter(
            Bangumi.start_date.between(
                datetime.date(year=form.pub_date.data, month=1, day=1),
                datetime.datetime.now().date()))

    # 类型筛选
    if form.order.data == 1:
        order = Bangumi.fannum
    elif form.order.data == 2:
        order = Bangumi.update_time
    elif form.order.data == 3:
        order = Bangumi.score
    elif form.order.data == 4:
        order = Bangumi.playnum
    elif form.order.data == 5:
        order = Bangumi.start_date

    if form.sort.data == 0:
        order = order.desc()

    page_data = select.order_by(order).paginate(error_out=False,
                                                page=int(form.page.data),
                                                per_page=20)

    r = {
        "has_next":
        page_data.has_next,
        "has_prev":
        page_data.has_prev,
        "pages":
        page_data.pages,
        "page":
        page_data.page,
        "total":
        page_data.total,
        "bangumis": [{
            "id": i.id,
            "name": i.name,
            "logo": i.logo,
            "playnum": num_assign(i.playnum),
            "fannum": num_assign(i.fannum),
            "score": i.score,
            "start_date": i.start_date.strftime("%Y-%m-%d")
        } for i in page_data.items]
    }
    return ReturnObj.get_response(ReturnEnum.SUCCESS.value, "success", data=r)