def post(self): uid = self.request.get("user_id") start = self.request.get("start",0) end = self.request.get("end",0) user = FBUser.get_by_key_name(uid) logging.debug('User ID (%s) Start (%s) End(%s)' % (str(user.id),str(start),str(end))) data = memcache.get('friends_%s' % str(user.id)) if not data: graph = facebook.GraphAPI(user.access_token) friends = graph.get_connections(user.id, "friends") friends = friends.get('data',[]) else: friends = data try: friends = self._storeFriends(friends,int(start),int(end),user.key()) actualFriends = user.friends friends = [f.key() for f in friends if f.key() not in actualFriends] actualFriends.extend(friends) user.friends = actualFriends user.put() except DeadlineExceededError: self.response.clear() self.response.set_status(500) self.response.out.write("This operation could not be completed in time...") finally: queues = memcache.get('queues_%s' % str(user.id)) queues.remove((int(start),int(end))) if queues: # Ainda temos uma fila? memcache.replace('queues_%s' % str(user.id),queues) else: logging.debug('Adding friendsFriendsUp') taskqueue.add(queue_name='friendsFriendsUp' ,url='/queue/queueFriends', params={'user_id':user.id,})
def post(self): limit = 40 uid = self.request.get("user_id") user = FBUser.get_by_key_name(uid) fql = facebook.FQL(user.access_token) query ={"friends": """SELECT uid,first_name,last_name,name,sex,birthday_date FROM user WHERE uid in (SELECT uid2 FROM friend WHERE uid1=%s)""" % str(user.id), "friendFriends": """SELECT uid1, uid2 FROM friend WHERE uid1 IN (SELECT uid FROM #friends) AND uid2 in (SELECT uid FROM #friends) """} try: friendsQuery,ffQuery = fql.multiquery(queries = query) except ValueError: logging.debug(fql.multiquery(queries = query)) return '' friendsQuery = friendsQuery[u'fql_result_set'] ffQuery = ffQuery[u'fql_result_set'] tmpFF = {} for relation in ffQuery: uid1 = relation.get('uid1') uid2 = relation.get('uid2') if not str(uid1) in tmpFF: tmpFF[str(uid1)] = [] tmpFF[str(uid1)].append(str(uid2)) friends = [] for friend in friendsQuery: friend['id'] = str(friend['uid']) friend['friends'] = tmpFF.get(str(friend['uid']),[]) friends.append(friend) if friends: memcache.add(key="friends_%s" % str(user.id), value=friends, time=180) if tmpFF: memcache.add(key='queue_%s' % str(user.id),value=tmpFF,time=240) nUsers = len(friends) ranges = [(r,((((r+limit)<nUsers) and (r+limit)) or nUsers)) for r in range(0,nUsers,limit)] memcache.delete(key='queues_%s' % str(user.id)) tmpQueues = [] for s,e in ranges: tmpQueues.append((s,e)) logging.debug('Adiciona tarefa na fila %d - %d' % (s,e)) taskqueue.add(queue_name='friendsUp' ,url='/queue/friend_fetch', params={'user_id':user.id, 'start':s, 'end':e,}) memcache.add(key='queues_%s' % str(user.id),value=tmpQueues,time=180)
def get(self): uid = self.request.get("uid",'534881870') user = FBUser.get_by_key_name(uid) friends = memcache.get(key='FriendReports_%s') if not friends: friends = FBUser.gql('WHERE friends = :1 ORDER BY name,id',user.key()).run() memcache.add(key='FriendReports_%s' % str(user.id),value=friends,time=240) base_path = os.path.join(os.path.dirname(__file__).replace('reports',''), "templates") path = os.path.join(base_path, "header.html") self.response.out.write(template.render(path, {})) args = dict(user=user,friends=friends) path = os.path.join(base_path, "user.html") self.response.out.write(template.render(path, args)) path = os.path.join(base_path, "footer.html") self.response.out.write(template.render(path, {}))
def get(self): uid = self.request.get("uid",'534881870') # Key #userKey = escape(self.request.get('uk','') #user = db.get(userKey) user = FBUser.get_by_key_name(uid) friends = memcache.get(key='FriendReports_%s' % uid) if not friends and user: friends = FBUser.gql('WHERE friends = :1 ORDER BY name,id',user.key()).run() memcache.add(key='FriendReports_%s' % str(user.id),value=friends,time=240) if user: data = [{'name':f.name, 'id':f.id, 'pic':'http://graph.facebook.com/%s/picture?type=square' % f.id, 'friends':[ff.id_or_name() for ff in f.friends]} for f in friends] self.response.out.write(json.dumps(data))
def current_user(self): if not hasattr(self, "_current_user"): self._current_user = None self.cookie = facebook.get_user_from_cookie(self.request.cookies, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET) if self.cookie: user = FBUser.get_by_key_name(self.cookie["uid"]) graph = facebook.GraphAPI(self.cookie["access_token"]) profile = graph.get_object("me") if not user: user = self.createUser(accessed=True,profile=profile) user.access_token = self.cookie["access_token"] elif user.access_token != self.cookie["access_token"]: user.access_token = self.cookie["access_token"] self.updateUser(user,profile=profile) user.accessed = True user.put() self._current_user = user return self._current_user
def post(self): limit = 100 user_id = self.request.get("user_id") logging.debug('QueueFriends Start') data = memcache.get('queue_%s' % str(user_id)) if not data: return '' users = FBUser.get_by_key_name(data.keys()) nUsers = len(users) dictUsers = dict([(u.id,u.key()) for u in users]) ranges = [(r,((((r+limit)<nUsers) and (r+limit)) or nUsers)) for r in range(0,nUsers,limit)] for s,e in ranges: tmpUsers = [] for user in users[s:e]: actualFriends = user.friends newFriends = [dictUsers.get(uid,None) for uid in data[user.id] if not(dictUsers.get(uid,None) in actualFriends)] actualFriends.extend([k for k in newFriends if k]) if actualFriends: user.friends = actualFriends tmpUsers.append(user) db.put(tmpUsers) memcache.delete('queue_%s' % str(user_id))
def getUserById(self,id): ''' Given a user_id we get a instance of FBUser ''' return FBUser.get_by_key_name(id)