Exemplo n.º 1
0
 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,})
Exemplo n.º 2
0
 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)                                                                       
Exemplo n.º 3
0
 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, {}))
Exemplo n.º 4
0
 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))
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
 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))
Exemplo n.º 7
0
 def getUserById(self,id):
     ''' Given a user_id we get a instance of FBUser
     '''
     return FBUser.get_by_key_name(id)