예제 #1
0
    def func_enquiry_qrcode(self):
        """
        web 询问接口
        :return:
        """

        qrcode = self.extra_data.get('qrcode', '')
        if qrcode == "":
            raise response_code.ParamERR(errmsg='qrcode can not be empty!')
        try:
            qr_state = (redis_conn.get('{}'.format(qrcode)))
        except Exception as e:
            raise response_code.DatabaseERR(errmsg='{}'.format(e))

        if qr_state == "0":
            resp = set_resjson(err=1, errmsg='未扫描')
        elif qr_state == "1":
            resp = set_resjson(err=-2, errmsg='已扫描未登录')
        elif qr_state is None:
            resp = set_resjson(err=-4, errmsg='验证码已过期')
        else:
            try:
                user_info = mongo.db.user.find_one({"_id": qr_state}, {
                    "name": 1,
                    "headshot": 1,
                    "_id": 0
                })
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))
            resp = make_response(set_resjson(res_array=[user_info]))
            resp.headers["Authorization"] = encode_auth_token(qr_state)
        return resp
예제 #2
0
def qq_login(code):
    """
    QQ 登录
    :param code:
    :return:
    """
    oauth_qq = OAuthQQ()
    access_token = oauth_qq.get_access_token(code)
    unionid, openid = oauth_qq.get_unionid(access_token)
    try:
        user_info = mongo.db.user.find_one({"qq_unionid": unionid})
    except Exception as e:
        raise response_code.DatabaseERR(errmsg="{}".format(e))
    if not user_info:
        # 第一次登录
        user_info = oauth_qq.get_user_info(access_token, openid)
        try:
            pl = redis_conn.pipeline()
            pl.set("unionid_name_%s" % unionid, user_info['nickname'],
                   constants.SMS_CODE_REDIS_EXPIRES)
            pl.set("unionid_photo_url_%s" % unionid,
                   user_info['figureurl_qq_1'],
                   constants.SMS_CODE_REDIS_EXPIRES)
            pl.execute()
        except Exception as e:
            raise response_code.DatabaseERR(errmsg="{}".format(e))
        access_token = generate_save_user_token(unionid, 'qq')

        return set_resjson(res_array=[{"access_token": access_token}])

    else:
        response = not_first_login(user_info)

    return response
예제 #3
0
    def func_code_login(self):
        """
        login
        :return:
        """
        _id = None
        mobile = self.extra_data.get("mobile", "")
        code = self.extra_data.get('code', "")
        if not mobile_re.match('{}'.format(mobile)):
            raise response_code.ParamERR(errmsg="手机号码不正确")
        # 手机验证码验证
        sms_verify(mobile, code)

        try:
            user_info = mongo.db.user.find_one({"mobile": '{}'.format(mobile)},
                                               {
                                                   "headshot": 1,
                                                   "name": 1
                                               })
        except Exception as error:
            current_app.logger.error(error)
            raise response_code.DatabaseERR(errmsg='{}'.format(error))
        now_time = time.time()
        if not user_info:
            _id = get_user_id("id")
            try:

                mongo.db.user.insert_one({
                    "gender": "男",
                    "birthday": str(datetime.date.today()),
                    "name": ranstr(16),
                    "mobile": '{}'.format(mobile),
                    "_id": _id,
                    "headshot": self.head_shot_path,
                    "create_time": now_time,
                    "login_time": now_time,
                    "background": self.background_path,
                    "introduction": self.introduction
                })
            except Exception as error:
                current_app.logger.error(error)
                raise response_code.DatabaseERR(errmsg='{}'.format(error))
            user_info = {"name": ranstr(16), "headshot": self.head_shot_path}
        else:
            _id = user_info.pop("_id")
            try:
                mongo.db.user.update_one({"mobile": '{}'.format(mobile)},
                                         {"$set": {
                                             "login_time": now_time
                                         }})
            except Exception as err:
                current_app.logger.error(err)
                raise response_code.DatabaseERR(errmsg='{}'.format(err))
        # set the token information in the response
        response = make_response(set_resjson(res_array=[user_info]))
        response.headers["Authorization"] = encode_auth_token(_id)
        return response
예제 #4
0
    def func_quick_login(self):
        """
        手机一键登陆
        """
        login_token = self.extra_data.get("login_token", "")
        if login_token == "":
            raise response_code.ParamERR(
                errmsg="[ login_token ] must be provided")

        curl = 'https://api.verification.jpush.cn/v1/web/loginTokenVerify'
        dict_body = {"loginToken": login_token}
        json_body = json.dumps(dict_body)
        encrypt_phone = get_phone(curl, json_body)
        if not encrypt_phone:
            raise response_code.ParamERR(errmsg="登陆失败")
        phone = get_num(encrypt_phone, config.JI_GUANG_PRIKEY)
        user_info = mongo.db.user.find_one({"mobile": phone}, {
            "headshot": 1,
            "name": 1
        })
        now_time = time.time()
        if not user_info:
            _id = get_user_id("id")
            try:

                mongo.db.user.insert_one({
                    "gender": "男",
                    "birthday": str(datetime.date.today()),
                    "name": ranstr(16),
                    "mobile": '{}'.format(phone),
                    "_id": _id,
                    "headershot": self.head_shot_path,
                    "create_time": now_time,
                    "login_time": now_time,
                    "background": self.background_path,
                    "introduction": self.introduction
                })
            except Exception as error:
                current_app.logger.error(error)
                raise response_code.DatabaseERR(errmsg='{}'.format(error))
            user_info = {"name": ranstr(16), "headshot": self.head_shot_path}
        else:
            _id = user_info.pop("_id")
            try:
                mongo.db.user.update_one({"mobile": '{}'.format(phone)},
                                         {"$set": {
                                             "login_time": now_time
                                         }})
            except Exception as err:
                current_app.logger.error(err)
                raise response_code.DatabaseERR(errmsg='{}'.format(err))
        # set the token information in the response
        response = make_response(set_resjson(res_array=[user_info]))
        response.headers["Authorization"] = encode_auth_token(_id)
        return response
예제 #5
0
    def func_view_file(self):
        """
        查看课件
        """
        video_id = self.extra_data.get('video_id')
        video_document = {}
        res_list = []
        try:
            video_document_cursor = mongo.db.document.find(
                {"video_id": video_id})

        except Exception as e:
            raise response_code.DatabaseERR(errmsg="{}".format(e))

        for document in video_document_cursor:
            video_document["file_id"] = document["_id"]
            video_document["file_name"] = document["file_name"]
            video_document["file_path"] = document["file_path"]
            video_document["image_path"] = document["image_path"]
            video_document["price"] = document["price"]
            video_document["time"] = document["time"]
            res_list.append(deepcopy(video_document))

        if not video_document:
            raise response_code.RoleERR(errmsg="这个视频没有课件")
        return set_resjson(res_array=res_list)
예제 #6
0
    def func_get_information(self):
        """
        获取个人信息
        @return:
        """
        user = g.user
        res_dict = {}
        if not user:
            raise response_code.ParamERR(errmsg="用户未登陆")
        try:
            subscription_counts = mongo.db.subscription.find({
                "user_id":
                user["_id"],
                "state":
                0
            }).count()
            fans_counts = mongo.db.subscription.find({
                "relation_id": user["_id"],
                "state": 0
            }).count()

            video_id_list = [
                video.get("_id") for video in mongo.db.video.find(
                    {"user_id": user["_id"]}, {"_id": 1})
            ]
            like_counts = mongo.db.like.find({
                "user_id": user["_id"],
                "relation_id": {
                    "$in": video_id_list
                }
            }).count()

        except Exception as e:
            raise response_code.DatabaseERR(errmsg="{}".format(e))
        res_dict["user_name"] = user["name"]
        res_dict["user_id"] = user["_id"]
        res_dict["birthday"] = user.get(
            "birthday",
            time.strftime("%Y-%m-%d", time.localtime(user["create_time"])))
        res_dict["gender"] = user.get("gender", "男")
        res_dict["introduction"] = user["introduction"]
        res_dict["headshot"] = user["headshot"]
        res_dict["background"] = user["background"]
        res_dict["like_counts"] = like_counts
        res_dict["video_counts"] = len(video_id_list)
        res_dict["user_name"] = user["name"]
        res_dict["binding_webchat"] = 1 if user.get("wechat_unionid",
                                                    None) else 0
        res_dict["binding_qq"] = 1 if user.get("qq_unionid", None) else 0
        res_dict["binding_microblog"] = 1 if user.get("microblog_unionid",
                                                      None) else 0
        res_dict["subscription_counts"] = subscription_counts
        res_dict["fans_counts"] = fans_counts
        return set_resjson(res_array=[res_dict])
예제 #7
0
 def func_get_category(self):
     """
     查看标签信息
     """
     try:
         category_info = mongo.db.tool.find_one({
             "type": "category"
         }).get("data")
     except Exception as e:
         raise response_code.DatabaseERR(errmsg="{}".format(e))
     return set_resjson(res_array=category_info)
예제 #8
0
    def func_generate_code(self):
        """
         Send SMS verification code
        :return:
        """

        mobile = self.extra_data.get("mobile", "")
        if not mobile_re.match('{}'.format(mobile)):
            raise response_code.ParamERR(errmsg="手机号码不正确")

        send_flag = redis_conn.get("send_flag_{}".format(mobile))
        if send_flag:
            raise response_code.ReqERR(errmsg="请求次数过于频繁")

        # sms_code = "%04d" % random.randint(0, 9999)
        sms_code = "6666"

        # encrypted message
        hash1 = hashlib.sha256()
        hash1.update(bytes(sms_code, encoding="utf-8"))
        hash_sms_code = hash1.hexdigest()
        # Using redis transactions, save SMS and flag to redis,
        # SMS expiration time is 300 seconds, flag expiration time is 60 seconds
        try:
            pl = redis_conn.pipeline()
            pl.set("sms_code_%s" % mobile, sms_code,
                   constants.SMS_CODE_REDIS_EXPIRES)
            pl.set("send_flag_%s" % mobile, sms_code,
                   constants.SEND_SMS_CODE_INTERVAL)
            pl.execute()
        except Exception as error:
            current_app.logger.error(error)
            raise response_code.DatabaseERR(errmsg='{}'.format(error))
        # try:
        #
        #     resp = send_sms(mobile, constants.SMS_LOGIN_TEMPLATE_ID, constants.SMS_SIGN, sms_code)
        # except Exception as e:
        #     current_app.logger.error('[send_verification_code] {}'.format(e))
        #     raise response_code.ThirdERR(errmsg='{}'.format(e))
        # resp_dict = json.loads(resp.decode('utf-8'))
        # resp_code = resp_dict.get('Code', 'OK')
        # if resp_code != 'OK':
        #     redis_conn.delete("send_flag_{}".format(mobile))
        #     message = resp_dict.get('Message', '')
        #     current_app.logger.error(message)
        #     raise response_code.ThirdERR(errmsg=message)
        response = make_response(
            set_resjson(res_array=[{
                "code": hash_sms_code,
                'real_code': sms_code
            }]))
        return response
예제 #9
0
    def func_scan_qrcode(self):
        """
        移动端扫描二维码
        :return:
        """
        user = g.user
        if not user:
            raise response_code.UserERR(errmsg='用户未登录')
        qrcode = self.extra_data.get('qrcode', '')
        try:
            qr_state_byte = redis_conn.get('{}'.format(qrcode))
        except Exception as e:
            raise response_code.DatabaseERR(errmsg='{}'.format(e))
        if not qr_state_byte:
            raise response_code.ParamERR(errmsg='验证码过期')
        try:
            redis_conn.set(qrcode, user['_id'],
                           constants.QR_CODE_REDIS_EXPIRES)
        except Exception as e:
            raise response_code.DatabaseERR(errmsg='{}'.format(e))

        return set_resjson()
예제 #10
0
def wehcat_login(code):
    """
    微信登陆
    :param code:
    :return:
    """

    wechatlogin = WeChat(state='')
    access_token, openid, unionid, refresh_token = wechatlogin.get_access_token(
        code)
    try:
        user_info = mongo.db.user.find_one({"wechat_unionid": unionid})
    except Exception as e:
        raise response_code.DatabaseERR(errmsg="{}".format(e))
    if not user_info:
        # 第一次登录
        nickname, headimgurl, _, gender = wechatlogin.get_user_info(
            access_token, openid)
        try:
            pl = redis_conn.pipeline()
            pl.set("unionid_name_%s" % unionid, nickname,
                   constants.SMS_CODE_REDIS_EXPIRES)
            pl.set("unionid_gender_%s" % unionid, gender,
                   constants.SMS_CODE_REDIS_EXPIRES)
            pl.set("unionid_refresh_token_%s" % unionid, refresh_token,
                   constants.SMS_CODE_REDIS_EXPIRES)

            pl.set("unionid_photo_url_%s" % unionid, headimgurl,
                   constants.SMS_CODE_REDIS_EXPIRES)
            pl.execute()
        except Exception as e:
            raise response_code.DatabaseERR(errmsg="{}".format(e))
        access_token = generate_save_user_token(unionid, 'wechat')

        return set_resjson(res_array=[{"access_token": access_token}])
    else:
        response = not_first_login(user_info, refresh_token)

    return response
예제 #11
0
def not_first_login(user_info, refresh_token=None):
    """ 已经登陆过 """
    _id = user_info['_id']
    login_time = time.time()
    try:
        mongo.db.user.update_one({"_id": '{}'.format(_id)},
                                 {"$set": {
                                     "login_time": login_time
                                 }})
    except Exception as e:
        raise response_code.DatabaseERR(errmsg="{}".format(e))
    response = make_response(
        set_resjson(res_array=[{
            "name": user_info['name'],
            'headshot': user_info.get('headshot', "")
        }]))
    response.headers["Authorization"] = encode_auth_token(_id, refresh_token)
    return response
예제 #12
0
def sms_verify(mobile, sms_code):
    """
    手机验证码验证
    :param mobile:
    :param sms_code:
    :return:
    """
    try:
        real_sms_code = redis_conn.get("sms_code_{}".format(mobile))
    except Exception as error:
        current_app.logger.error(error)
        raise response_code.DatabaseERR(errmsg="{}".format(error))

    if not real_sms_code:
        raise response_code.DataExistERR

    elif '{}'.format(sms_code) != real_sms_code:
        raise response_code.DataERR(errmsg="短信验证码输入错误")
예제 #13
0
    def func_check_mobile(self):
        """
        查看手机号码重复
        @return:
        """
        mobile = self.extra_data.get('mobile', '')
        if not mobile_re.match('{}'.format(mobile)):
            raise response_code.ParamERR(errmsg="手机号码不正确")

        try:
            user_info = mongo.db.user.find_one({"mobile": '{}'.format(mobile)})
        except Exception as error:
            current_app.logger.error(error)
            raise response_code.DatabaseERR(errmsg='{}'.format(error))
        if user_info:
            resp = set_resjson(err=-1, errmsg='This mobile is already exist!')
        else:
            resp = set_resjson(err=0, errmsg="This mobile can be registered!")
        return resp
예제 #14
0
def generate_subtitle(task_id, lang):
    """
    生成字幕
    :param task_id:
    :param lang:
    :return:
    """
    from main import app, mongo
    try:

        with app.app_context():
            current_app.logger.info("生成字幕开始")
            subtitle = Subtitle(task_id)
            subtitle.generate_configs(video_id=task_id, lang=lang)
            current_app.logger.info("生成字幕结束")
    except Exception as e:
        print(e)
        try:
            mongo.db.video.update_one({'_id': task_id},
                                      {'$unset': {'subtitling': ''}})
        except Exception as e:
            raise response_code.DatabaseERR(errmsg='{}'.format(e))
예제 #15
0
    def func_download_file(self):
        """
        课件下载
        @return:
        """
        res_list = []
        file_id = self.extra_data.get("file_id", "")
        if file_id == "" or type(file_id) != list:
            raise response_code.ParamERR(
                errmsg="file_id be provide or type must array")
        for document_id in file_id:
            try:
                video_document = mongo.db.document.find_one(
                    {"_id": document_id}, {
                        "_id": 0,
                        "file_path": 1,
                        "download_counts": 1
                    })

                if not video_document:
                    video_document = {document_id: "此ID不存在"}
                else:
                    if "download_counts" in video_document.keys():
                        download_counts = video_document.pop("download_counts")
                    else:
                        download_counts = 0
                    mongo.db.document.update_one(
                        {"_id": document_id},
                        {"$set": {
                            "download_counts": download_counts + 1
                        }})

                res_list.append(deepcopy(video_document))
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))

        return set_resjson(res_array=res_list)
예제 #16
0
    def func_give_like(self):
        """
        视频点赞
        :return:
        """
        user = g.user
        if not user:
            raise response_code.UserERR(errmsg='用户未登录')
        relation_id = self.extra_data.get("relation_id", "")
        value = self.extra_data.get("value", "")
        like_type = self.extra_data.get("type", "")
        try:
            value = int(value)
        except Exception as e:
            raise response_code.ParamERR(
                errmsg="value type error: {}".format(e))
        if relation_id == "":
            raise response_code.ParamERR("[relation_id] must be provided")
        elif like_type not in ["video", "series", "comment"]:
            raise response_code.ParamERR(errmsg="type must be video or series")
        elif value not in [1, 0]:
            raise response_code.ParamERR(errmsg="value must be 1 or 0")

        if like_type == "video":
            try:
                video_info = mongo.db.video.find_one({"_id": relation_id})
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))
        elif like_type == "series":
            try:
                video_info = mongo.db.document.find_one({"_id": relation_id})
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))
        else:
            try:
                video_info = mongo.db.comment.find_one({"_id": relation_id})
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))

        if not video_info:
            raise response_code.DatabaseERR(
                errmsg="relation_id is incorrect !")
        else:
            try:
                like_info = mongo.db.like.find_one(
                    {"user_id": user["_id"], "relation_id": relation_id})
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))
            like_time = time.time()
            if value == 1:
                if not like_info:
                    try:
                        mongo.db.like.insert_one(
                            {"_id": create_uuid(), "user_id": user["_id"],
                             "relation_id": relation_id, "type": like_type,
                             "time": like_time, "read_state": 0})
                    except Exception as e:
                        raise response_code.DatabaseERR(
                            errmsg="{}".format(e))
                else:
                    raise response_code.ParamERR(errmsg="你已经点过赞了")
            else:
                if like_info:
                    try:
                        mongo.db.like.delete_one({"user_id": user["_id"],
                                                  "relation_id": relation_id})
                    except Exception as e:
                        raise response_code.DatabaseERR(
                            errmsg="{}".format(e))
                else:
                    raise response_code.ParamERR(errmsg="你没有点赞过此视频,无法取消")

        return set_resjson()
예제 #17
0
    def func_third_phone_login(self):
        """
        第三方移动端登陆
        """
        access_token = self.extra_data.get("access_token", "")
        openid = self.extra_data.get("openid", "")
        mode = self.extra_data.get('type', "")
        if access_token == "" or openid == "":
            raise response_code.ParamERR(
                errmsg="[ access_token, openid ] must be provided")
        elif mode not in ["qq", "wechat"]:
            raise response_code.ParamERR(errmsg='type must be qq or wechat')
        elif mode == "qq":
            oauth_qq = OAuthQQ(client_id=config.QQ_PHONE_APP_ID,
                               client_secret=config.QQ_PHONE_APP_Key)
            unionid, openid = oauth_qq.get_unionid(access_token)
            try:
                user_info = mongo.db.user.find_one({"qq_unionid": unionid})
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))
            if not user_info:
                user_info = oauth_qq.get_user_info(access_token, openid)
                try:
                    pl = redis_conn.pipeline()
                    pl.set("unionid_name_%s" % unionid, user_info['nickname'],
                           constants.SMS_CODE_REDIS_EXPIRES)
                    pl.set("unionid_photo_url_%s" % unionid,
                           user_info['figureurl_qq_1'],
                           constants.SMS_CODE_REDIS_EXPIRES)
                    pl.execute()
                except Exception as e:
                    raise response_code.DatabaseERR(errmsg="{}".format(e))
                access_token = generate_save_user_token(unionid, 'qq')

                return set_resjson(res_array=[{"access_token": access_token}])

            else:
                response = not_first_login(user_info)

            return response
        elif mode == 'wechat':
            wechatlogin = WeChat(appid=config.WECHAT_APP_ID,
                                 secret_key=config.WECHAT_APP_SECRET)

            nickname, headimgurl, unionid, gender = wechatlogin.get_user_info(
                access_token, openid)
            try:
                user_info = mongo.db.user.find_one({"wechat_unionid": unionid})
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))
            if not user_info:
                # 第一次登录
                nickname, headimgurl, unionid = wechatlogin.get_user_info(
                    access_token, openid)
                try:
                    pl = redis_conn.pipeline()
                    pl.set("unionid_name_%s" % unionid, nickname,
                           constants.SMS_CODE_REDIS_EXPIRES)
                    pl.set("unionid_photo_url_%s" % unionid, headimgurl,
                           constants.SMS_CODE_REDIS_EXPIRES)
                    pl.execute()
                except Exception as e:
                    raise response_code.DatabaseERR(errmsg="{}".format(e))
                access_token = generate_save_user_token(unionid, 'wechat')

                return set_resjson(res_array=[{"access_token": access_token}])
            else:
                response = not_first_login(user_info)

            return response
예제 #18
0
    def func_post_comment(self):
        """
        发表评论
        """
        user = g.user
        if not user:
            raise response_code.UserERR(errmsg='用户未登录')
        video_id = self.extra_data.get("video_id", "")
        parent_id = self.extra_data.get("parent_id", "")
        content = self.extra_data.get("content", "")
        # to_user_id = self.extra_data.get("to_user_id", "")
        # to_user_name = self.extra_data.get("to_user_name", "")
        collect_time = time.time()
        try:
            parent_id = int(parent_id)
        except Exception as e:
            raise response_code.ParamERR(errmsg="parent_id is incorrect !")
        if video_id == "" or content == "" or parent_id == "":
            raise response_code.UserERR(
                errmsg="[ video_id, parent_id, content ] must be provided")
        try:
            video_info = mongo.db.video.find_one({"_id": video_id})
        except Exception as e:
            raise response_code.DatabaseERR(errmsg="{}".format(e))
        if not video_info:
            raise response_code.ParamERR(errmsg="video_id is incorrect")
        _id = create_uuid()
        if parent_id != 0:
            try:
                comment_info = mongo.db.comment.find_one(
                    {"_id": "{}".format(parent_id)})
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))
            if not comment_info:
                raise response_code.ParamERR(errmsg="parent_id is incorrect")
            try:
                mongo.db.comment.insert({
                    "_id":
                    _id,
                    "parent_id":
                    "{}".format(parent_id),
                    "content":
                    content,
                    "time":
                    collect_time,
                    "video_id":
                    video_id,
                    "to_user_id":
                    comment_info["user_id"],
                    "user_name":
                    user["name"],
                    "headshot":
                    user["headshot"],
                    "user_id":
                    user["_id"],
                    "to_user_name":
                    comment_info["user_name"],
                    "state":
                    2
                })
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))
        else:
            try:
                mongo.db.comment.insert({
                    "_id": _id,
                    "parent_id": "{}".format(parent_id),
                    "content": content,
                    "time": collect_time,
                    "video_id": video_id,
                    "user_id": user["_id"],
                    "user_name": user["name"],
                    "headshot": user["headshot"],
                    "state": 2
                })
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))

        return set_resjson(res_array=[{"comment_id": _id}])
예제 #19
0
    def func_get_comment(self):
        '''
        获取评论
        :param video_id:
        :param parent_id:
        :param max_size:
        :param page:
        :return res_data:
        '''
        video_id = self.extra_data.get("video_id", "")
        parent_id = self.extra_data.get("parent_id", "")
        max_size = self.extra_data.get("max_size", "")
        page = self.extra_data.get("page", "")

        try:
            max_size = int(max_size)
            page = int(page)
        except Exception as e:
            raise response_code.ParamERR(errmsg="max_size, page must be int")
        res_data = []
        try:
            likes = mongo.db.like.find(
                {
                    'relation_id': video_id,
                    'type': 'comment'
                }, {'_id': 1})
            like_list = []
            if likes:
                for like in likes:
                    like_list.append(like['_id'])
            if parent_id:
                comments = mongo.db.comment.find({
                    'video_id': video_id,
                    'parent_id': parent_id,
                    "state": 2
                }).sort('time', -1).limit(max_size).skip(max_size * (page - 1))
            else:
                comments = mongo.db.comment.find({
                    'video_id': video_id,
                    'parent_id': "0"
                }).sort('time', -1).limit(max_size).skip(max_size * (page - 1))
            if comments:
                for comment in comments:
                    if comment['_id'] in like_list:
                        comment['is_like'] = 1
                    else:
                        comment['is_like'] = 0
                    like_counts = mongo.db.like.find({
                        "relation_id":
                        comment['_id'],
                        "type":
                        "comment"
                    }).count()
                    comment['like_counts'] = like_counts
                    if parent_id == "0":
                        comment_counts = mongo.db.comment.find({
                            "parent_id":
                            comment['_id'],
                            "state":
                            2
                        }).count()
                        comment['comment_counts'] = comment_counts
                    res_data.append(comment)
        except Exception as e:
            raise response_code.DatabaseERR(errmsg="{}".format(e))
        return set_resjson(res_array=res_data)
예제 #20
0
    def func_add_collection(self):
        """
        收藏
        :return:
        """
        user = g.user
        if not user:
            raise response_code.UserERR(errmsg='用户未登录')
        relation_id = self.extra_data.get("relation_id", "")
        value = self.extra_data.get("value", "")
        collect_type = self.extra_data.get("type", "")
        collect_time = time.time()
        try:
            value = int(value)
        except Exception as e:
            raise response_code.ParamERR(
                errmsg="value type error: {}".format(e))
        if relation_id == "":
            raise response_code.ParamERR("[relation_id] must be provided")
        elif collect_type not in ["video", "series"]:
            raise response_code.ParamERR(errmsg="type must be video or series")
        elif value not in [1, 0]:
            raise response_code.ParamERR(errmsg="value must be 1 or 0")
        if collect_type == "video":
            try:
                video_info = mongo.db.video.find_one({"_id": relation_id})
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))
        else:
            try:
                video_info = mongo.db.series.find_one({"_id": relation_id})
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))

        if not video_info:
            raise response_code.DatabaseERR(
                errmsg="relation_id is incorrect !")
        else:
            try:
                collect_info = mongo.db.collection.find_one({
                    "user_id":
                    user["_id"],
                    "relation_id":
                    relation_id
                })
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))
            if value == 1:
                if not collect_info:
                    try:
                        mongo.db.collection.insert_one({
                            "_id": create_uuid(),
                            "user_id": user["_id"],
                            "relation_id": relation_id,
                            "type": collect_type,
                            "time": collect_time,
                            "state": 0
                        })
                    except Exception as e:
                        raise response_code.DatabaseERR(errmsg="{}".format(e))

                elif collect_info["state"] == -1:
                    mongo.db.collection.update_one(
                        {"_id": collect_info["_id"]}, {"$set": {
                            "state": 0
                        }})
                else:
                    raise response_code.ParamERR(errmsg="该视频已经收藏")
            else:
                if collect_info:
                    if collect_info["state"] == 0:
                        try:
                            mongo.db.collection.update_one(
                                {
                                    "user_id": user["_id"],
                                    "relation_id": relation_id
                                }, {"$set": {
                                    "state": -1
                                }})
                        except Exception as e:
                            raise response_code.DatabaseERR(
                                errmsg="{}".format(e))
                    else:
                        raise response_code.ParamERR(errmsg="没有收藏此视频")
                else:
                    raise response_code.ParamERR(errmsg="没有收藏此视频")

        return set_resjson()
예제 #21
0
    def func_third_bind_mobile(self):
        """
        第一次登录绑定账号
        :return:
        """
        access_token = self.extra_data.get('access_token', "")
        mobile = self.extra_data.get('mobile', "")
        code = self.extra_data.get('code', "")
        refresh_token = None
        if access_token == "" or mobile == "" or code == "":
            raise response_code.ParamERR(
                '[access_token, mobile, code] can not be empty!')
        elif not mobile_re.match('{}'.format(mobile)):
            raise response_code.ParamERR(errmsg="Wrong phone number format!")
        sms_verify(mobile, code)
        now_time = time.time()
        unionid, third_type = check_save_user_token(access_token)
        if unionid is None:
            raise response_code.ReqERR(errmsg="access_token is wrong!")
        else:
            try:
                user_info = mongo.db.user.find_one(
                    {"mobile": '{}'.format(mobile)}, {
                        'name': 1,
                        'headshot': 1
                    })
            except Exception as e:
                raise response_code.DatabaseERR(errmsg="{}".format(e))
            if user_info:
                try:
                    _id = user_info.pop('_id')
                    mongo.db.user.update_one({"mobile": '{}'.format(mobile)}, {
                        '$set': {
                            '{}_unionid'.format(third_type): unionid,
                            "login_time": now_time
                        }
                    })
                except Exception as e:
                    raise response_code.DatabaseERR(errmsg="{}".format(e))
            else:
                _id = get_user_id("id")
                try:
                    name = redis_conn.get("unionid_name_%s" % unionid)
                    headshot = redis_conn.get("unionid_photo_url_%s" % unionid)
                    gender = redis_conn.get("unionid_gender_%s" % unionid)
                    refresh_token = redis_conn.get("unionid_refresh_token_%s" %
                                                   unionid)
                    mongo.db.user.insert_one({
                        "gender":
                        gender,
                        "birthday":
                        str(datetime.date.today()),
                        "name":
                        name,
                        "mobile":
                        '{}'.format(mobile),
                        "_id":
                        _id,
                        '{}_unionid'.format(third_type):
                        unionid,
                        "headshot":
                        headshot,
                        "create_time":
                        now_time,
                        "login_time":
                        now_time,
                        "background":
                        self.background_path,
                        "introduction":
                        self.introduction
                    })
                except Exception as error:
                    current_app.logger.error(error)
                    raise response_code.ThirdERR(errmsg="{}".format(error))

                user_info = {'name': name, 'headshot': headshot}
            response = make_response(set_resjson(res_array=[user_info]))
            response.headers["Authorization"] = encode_auth_token(
                _id, refresh_token)
            return response