def recommend(cls, para): uid = para['uid'] uid_list = cls.getNearby(uid, cls.REC_NUM) ret = [] for u in uid_list: if Social.isFriend(uid, u): continue user = User(u) data = {'uid':u, 'name':user.getName(), 'icon':user.getIcon(), 'level':user.level} if user.country is not None: data['country'] = user.country if user.region is not None: data['region'] = user.region ret.append(data) return {'users': ret}
def getFriends(cls, para): uid = para['uid'] frds = [] l = Redis().smembers(cls.gen_frd_key(uid)) #l.add(uid) from UserGift import UserGift for u in l: user = User(int(u)) frds.append({'uid': int(u), 'level': user.level, 'name': user.getName(), 'icon': user.getIcon(), 'coin': user.coin, 'login_time': user.login_time, 'is_sent': UserGift.isSent(uid, u),}) #sort by level return {'friends': sorted(frds, key = lambda x: x['level'])}
def getRankInfo(self, uid): all_ret = {} range_id = self.getRangeId(uid) k = self.getRankKey(range_id) cli = DB.Redis() player_num = cli.zcard(k) all_ret['player_num'] = player_num rank = cli.zrevrank(k, uid) start = 0 ret = [] if rank is None: ret = cli.zrevrange(k, -2, -1, withscores=True) start = player_num - len(ret) + 1 elif rank == 0: ret = cli.zrevrange(k, rank, rank + 2, withscores=True) start = 1 elif rank == player_num - 1: ret = cli.zrevrange(k, -3, -1, withscores=True) start = player_num - len(ret) + 1 else: ret = cli.zrevrange(k, rank-1, rank+1, withscores=True) start = rank result = [] for idx, (u, score) in enumerate(ret): user = User(u) result.append({'uid': u, 'name': user.getName(), 'icon': user.getIcon(), 'pts': int(score) / 100 / self.WIN_PER_POINT, 'rank': start + idx}) if rank is None: user = User(uid) result.append({'uid': uid, 'name': user.getName(), 'icon': user.getIcon(), 'pts': 0, 'rank': 0}) all_ret['rank'] = result #top 3 result = [] ret = cli.zrevrange(k, 0, 2, withscores=True) for idx, (u, score) in enumerate(ret): user = User(u) result.append({'uid': u, 'name': user.getName(), 'icon': user.getIcon(), 'pts': int(score) / 100 / self.WIN_PER_POINT, 'rank': idx + 1}) all_ret['top_rank'] = result info = self.getRangeInfo(uid) cfg = CfgTable(CfgTable.CFG_TOURNAMENT, self.key_) total_prize = int(cfg.prize) + info['prize'] all_ret['prize'] = total_prize all_ret['reward_info'] = self.getRewardInfo(int(cfg.prize), range_id) total_time = int(cfg.time) left_time = self.start_time + total_time - int(time.time()) if left_time < 0: left_time = 0 all_ret['left_time'] = left_time all_ret['level_range'] = self.getLevelRange(range_id) return all_ret