Ejemplo n.º 1
0
 def store_likes(self, user, limit=1000, store=facebook_settings.FACEBOOK_STORE_LIKES):
     from django_facebook.models import FacebookLike
     likes_response = self.get_connections('me', 'likes', limit=limit)
     likes = likes_response and likes_response.get('data')
     logger.info('found %s likes', len(likes))
     
     if likes and store:
         base_queryset = FacebookLike.objects.filter(user=user)
         global_defaults = dict(user=user)
         id_field = 'facebook_id'
         default_dict = {}
         for like in likes:
             name = like.get('name')
             created_time = datetime.datetime.strptime(like['created_time'], "%Y-%m-%dT%H:%M:%S+0000")
             default_dict[like['id']] = dict(
                 created_time = created_time,
                 category = like['category'],
                 name = name
             )
         current_likes, inserted_likes = mass_get_or_create(
             FacebookLike, base_queryset, id_field, default_dict, global_defaults
         )
         logger.debug('found %s likes and inserted %s new likes', len(current_likes), len(inserted_likes))
            
     return likes
Ejemplo n.º 2
0
    def _store_likes(self, user, likes):
        current_likes = inserted_likes = None

        if likes:
            from django_facebook.models import FacebookLike
            base_queryset = FacebookLike.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            id_field = 'facebook_id'
            default_dict = {}
            for like in likes:
                name = like.get('name')
                created_time_string = like.get('created_time')
                created_time = None
                if created_time_string:
                    created_time = parse_date(like['created_time'])
                default_dict[like['id']] = dict(
                    created_time=created_time,
                    category=like.get('category'),
                    name=name
                )
            current_likes, inserted_likes = mass_get_or_create(
                FacebookLike, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s likes and inserted %s new likes',
                         len(current_likes), len(inserted_likes))

        # fire an event, so u can do things like personalizing the users' account
        # based on the likes
        signals.facebook_post_store_likes.send(sender=get_profile_model(),
                                               user=user, likes=likes, current_likes=current_likes,
                                               inserted_likes=inserted_likes,
                                               )

        return likes
Ejemplo n.º 3
0
    def _store_friends(self, user, friends):
        from django_facebook.models import FacebookUser
        current_friends = inserted_friends = None
        
        #store the users for later retrieval
        if friends:
            #see which ids this user already stored
            base_queryset = FacebookUser.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            default_dict = {}
            for f in friends:
                name = f.get('name')
                default_dict[str(f['id'])] = dict(name=name)
            id_field = 'facebook_id'

            current_friends, inserted_friends = mass_get_or_create(
                FacebookUser, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s friends and inserted %s new ones',
                         len(current_friends), len(inserted_friends))
            
        #fire an event, so u can do things like personalizing suggested users
        #to follow
        signals.facebook_post_store_friends.send(sender=get_profile_class(),
            user=user, friends=friends, current_friends=current_friends,
            inserted_friends=inserted_friends,
        )

        return friends
Ejemplo n.º 4
0
    def _store_likes(self, user, likes):
        current_likes = inserted_likes = None

        if likes:
            from django_facebook.models import FacebookLike
            base_queryset = FacebookLike.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            id_field = 'facebook_id'
            default_dict = {}
            for like in likes:
                name = like.get('name')
                created_time_string = like.get('created_time')
                created_time = None
                if created_time_string:
                    created_time = parse_date(like['created_time'])
                default_dict[like['id']] = dict(created_time=created_time,
                                                category=like.get('category'),
                                                name=name)
            current_likes, inserted_likes = mass_get_or_create(
                FacebookLike, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s likes and inserted %s new likes',
                         len(current_likes), len(inserted_likes))

        # fire an event, so u can do things like personalizing the users' account
        # based on the likes
        signals.facebook_post_store_likes.send(
            sender=get_profile_model(),
            user=user,
            likes=likes,
            current_likes=current_likes,
            inserted_likes=inserted_likes,
        )

        return likes
Ejemplo n.º 5
0
    def _store_friends(self, user, friends):
        from django_facebook.models import FacebookUser
        current_friends = inserted_friends = None

        #store the users for later retrieval
        if friends:
            #see which ids this user already stored
            base_queryset = FacebookUser.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            default_dict = {}
            for f in friends:
                name = f.get('name')
                default_dict[str(f['id'])] = dict(name=name)
            id_field = 'facebook_id'

            current_friends, inserted_friends = mass_get_or_create(
                FacebookUser, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s friends and inserted %s new ones',
                         len(current_friends), len(inserted_friends))

        #fire an event, so u can do things like personalizing suggested users
        #to follow
        signals.facebook_post_store_friends.send(
            sender=get_profile_class(),
            user=user,
            friends=friends,
            current_friends=current_friends,
            inserted_friends=inserted_friends,
        )

        return friends
Ejemplo n.º 6
0
    def _store_likes(self, user, likes):
        if likes:
            from django_facebook.models import FacebookLike
            base_queryset = FacebookLike.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            id_field = 'facebook_id'
            default_dict = {}
            for like in likes:
                name = like.get('name')
                created_time_string = like.get('created_time')
                created_time = None
                if created_time_string:
                    created_time = datetime.datetime.strptime(
                        like['created_time'], "%Y-%m-%dT%H:%M:%S+0000")
                default_dict[like['id']] = dict(
                    created_time=created_time,
                    category=like.get('category'),
                    name=name
                )
            current_likes, inserted_likes = mass_get_or_create(
                FacebookLike, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s likes and inserted %s new likes',
                         len(current_likes), len(inserted_likes))

        return likes
Ejemplo n.º 7
0
    def _store_likes(self, user, likes):
        current_likes = inserted_likes = None

        if likes:
            from django_facebook.models import FacebookLike

            base_queryset = FacebookLike.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            id_field = "facebook_id"
            default_dict = {}
            for like in likes:
                name = like.get("name")
                created_time_string = like.get("created_time")
                created_time = None
                if created_time_string:
                    created_time = datetime.datetime.strptime(like["created_time"], "%Y-%m-%dT%H:%M:%S+0000")
                default_dict[like["id"]] = dict(created_time=created_time, category=like.get("category"), name=name)
            current_likes, inserted_likes = mass_get_or_create(
                FacebookLike, base_queryset, id_field, default_dict, global_defaults
            )
            logger.debug("found %s likes and inserted %s new likes", len(current_likes), len(inserted_likes))

        # fire an event, so u can do things like personalizing the users' account
        # based on the likes
        signals.facebook_post_store_likes.send(
            sender=get_profile_class(),
            user=user,
            likes=likes,
            current_likes=current_likes,
            inserted_likes=inserted_likes,
        )

        return likes
Ejemplo n.º 8
0
    def _store_groups(self, user, groups):
        current_groups = inserted_groups = None

        if groups:
            from django_facebook.models import FacebookGroup
            base_queryset = FacebookGroup.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            id_field = 'facebook_id'
            default_dict = {}
            for group in groups:
                name = group.get('name')
                bookmark_order = group.get('bookmark_order')
                description = group.get('description')
                default_dict[group['id']] = dict(bookmark_order=bookmark_order,
                                                 name=name)
            current_groups, inserted_groups = mass_get_or_create(
                FacebookGroup, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s groups and inserted %s new groups',
                         len(current_groups), len(inserted_groups))

        #fire an event, so u can do things like personalizing the users' account
        #based on the groups
        # NOT DONE YET
        signals.facebook_post_store_groups.send(
            sender=get_profile_class(),
            user=user,
            groups=groups,
            current_groups=current_groups,
            inserted_groups=inserted_groups,
        )

        return groups
Ejemplo n.º 9
0
    def store_friends(self, user, limit=1000, store=facebook_settings.FACEBOOK_STORE_FRIENDS):
        '''
        Sends a request to the facebook api to retrieve a users friends and stores them locally
        '''
        from django_facebook.models import FacebookUser
        
        #get the users friends
        friends = getattr(self, '_friends', None)
        if friends is None:
            friends_response = self.get_connections('me', 'friends', limit=limit)
            friends = friends_response and friends_response.get('data')
            logger.info('found %s friends', len(friends))
            
            #store the users for later retrieval
            if store and friends:
                #see which ids this user already stored
                base_queryset = FacebookUser.objects.filter(user=user)
                global_defaults = dict(user=user)
                default_dict = {}
                for f in friends:
                    name = f.get('name')
                    default_dict[f['id']] = dict(name=name)
                id_field = 'facebook_id'

                current_friends, inserted_friends = mass_get_or_create(
                    FacebookUser, base_queryset, id_field, default_dict, global_defaults
                )
                logger.debug('found %s friends and inserted %s new ones', len(current_friends), len(inserted_friends))
                    
        return friends
Ejemplo n.º 10
0
    def _store_friends(self, user, friends):
        from django_facebook.models import FacebookUser
        current_friends = inserted_friends = None

        #store the users for later retrieval
        if friends:
            #see which ids this user already stored
            base_queryset = FacebookUser.objects.filter(user_id=user.id)
            #if none if your friend have a gender clean the old data
            genders = FacebookUser.objects.filter(user_id=user.id,
                                                  gender__in=('M',
                                                              'F')).count()
            if not genders:
                FacebookUser.objects.filter(user_id=user.id).delete()

            global_defaults = dict(user_id=user.id)
            default_dict = {}
            gender_map = dict(female='F', male='M')
            for f in friends:
                name = f.get('name')
                gender = None
                birthday_date = None

                if f.get('sex'):
                    gender = gender_map[f.get('sex')]

                if f.get('birthday_date'):
                    birthday_date = f.get('birthday_date')

                default_dict[str(f['id'])] = dict(name=name,
                                                  gender=gender,
                                                  birthday=birthday_date)
            id_field = 'facebook_id'

            current_friends, inserted_friends = mass_get_or_create(
                FacebookUser, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s friends and inserted %s new ones',
                         len(current_friends), len(inserted_friends))

        #fire an event, so u can do things like personalizing suggested users
        #to follow
        signals.facebook_post_store_friends.send(
            sender=get_profile_class(),
            user=user,
            friends=friends,
            current_friends=current_friends,
            inserted_friends=inserted_friends,
        )

        return friends
Ejemplo n.º 11
0
    def _store_movies(self, user, movies):
        current_movies = inserted_movies = None

        if movies:
            from django_facebook.models import FacebookUserMovies

            base_queryset = FacebookUserMovies.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            id_field = 'facebook_id'
            default_dict = {}
            for movie in movies:
                name = movie.get('name')
                movie_id = movie.get('id')
                movie_details = self.open_facebook.get(movie_id)

                movie_cover = movie_details.get('cover', None)
                movie_source = None
                if movie_cover is not None:
                    movie_source = movie_cover.get('source', None)

                if movie_source is None:
                    movie_source = self.get_image_from_google_api(name)
                    print movie_source
                movie_about = movie_details.get('about', None)
                created_time_string = movie.get('created_time')
                created_time = None
                if created_time_string:
                    created_time = parse_date(movie['created_time'])
                default_dict[movie['id']] = dict(
                    created_time=created_time,
                    category=movie.get('category'),
                    name=name,
                    movie_source=movie_source,
                    movie_about=movie_about
                )
            current_movies, inserted_movies = mass_get_or_create(
                FacebookUserMovies, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s movies and inserted %s new likes',
                         len(current_movies), len(inserted_movies))

        # fire an event, so u can do things like personalizing the users' account
        # based on the likes
        # signals.facebook_post_store_likes.send(sender=get_profile_model(),
        # user=user, likes=likes, current_likes=current_likes,
        #                                        inserted_likes=inserted_likes,
        #                                        )

        return movies
Ejemplo n.º 12
0
    def _store_friends(self, user, friends):
        from django_facebook.models import FacebookUser
        current_friends = inserted_friends = None

        #store the users for later retrieval
        if friends:
            #see which ids this user already stored
            base_queryset = FacebookUser.objects.filter(user_id=user.id)
            #if none if your friend have a gender clean the old data
            genders = FacebookUser.objects.filter(
                user_id=user.id, gender__in=('M', 'F')).count()
            if not genders:
                FacebookUser.objects.filter(user_id=user.id).delete()

            global_defaults = dict(user_id=user.id)
            default_dict = {}
            gender_map = dict(female='F', male='M')
            for f in friends:
                name = f.get('name')
                gender = None
                birthday_date = None

                if f.get('sex'):
                    gender = gender_map[f.get('sex')]

                if f.get('birthday_date'):
                    birthday_date = f.get('birthday_date')

                default_dict[str(f['id'])] = dict(name=name, gender=gender, birthday=birthday_date)
            id_field = 'facebook_id'

            current_friends, inserted_friends = mass_get_or_create(
                FacebookUser, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s friends and inserted %s new ones',
                         len(current_friends), len(inserted_friends))

        #fire an event, so u can do things like personalizing suggested users
        #to follow
        signals.facebook_post_store_friends.send(sender=get_profile_class(),
                                                 user=user, friends=friends, current_friends=current_friends,
                                                 inserted_friends=inserted_friends,
                                                 )

        return friends
Ejemplo n.º 13
0
    def _store_friends(self, user, friends):
        from django_facebook.models import FacebookUser
        #store the users for later retrieval
        if friends:
            #see which ids this user already stored
            base_queryset = FacebookUser.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            default_dict = {}
            for f in friends:
                name = f.get('name')
                default_dict[str(f['id'])] = dict(name=name)
            id_field = 'facebook_id'

            current_friends, inserted_friends = mass_get_or_create(
                FacebookUser, base_queryset, id_field, default_dict, global_defaults
            )
            logger.debug('found %s friends and inserted %s new ones', len(current_friends), len(inserted_friends))
                    
        return friends
Ejemplo n.º 14
0
    def _store_free_for_sale(self, user, items):
        current_items = inserted_items = None

        if items:
            from django_facebook.models import FreeForSaleItem
            base_queryset = FreeForSaleItem.objects.all()
            global_defaults = dict(user_id=user.id)
            id_field = 'facebook_id'
            default_dict = {}
            for item in items:
                seller_name = item.get('from').get('name')
                post_url = item.get('actions').get('link')
                try:
                    message = item.get('message')
                except:
                    continue

                created_time_string = item.get('created_time')
                created_time = None
                if created_time_string:
                    created_time = datetime.datetime.strptime(
                        item['created_time'], "%Y-%m-%dT%H:%M:%S+0000")

                default_dict[item['id']] = dict(created_time=created_time,
                                                seller_name=seller_name,
                                                post_url=post_url,
                                                message=message)
            current_items, inserted_items = mass_get_or_create(
                FreeForSaleItem, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s items and inserted %s new items',
                         len(current_items), len(inserted_items))

        #fire an event, so u can do things like personalizing the users' account
        #based on the likes
        signals.facebook_post_store_items.send(
            sender=get_profile_class(),
            user=user,
            items=items,
            current_items=current_items,
            inserted_items=inserted_items,
        )
        return items
Ejemplo n.º 15
0
    def _store_friends(self, user, friends):
        from django_facebook.models import FacebookUser

        current_friends = inserted_friends = None

        # store the users for later retrieval
        if friends:
            # see which ids this user already stored
            base_queryset = FacebookUser.objects.filter(user_id=user.id)
            # if none if your friend have a gender clean the old data
            genders = FacebookUser.objects.filter(user_id=user.id, gender__in=("M", "F")).count()
            if not genders:
                FacebookUser.objects.filter(user_id=user.id).delete()

            global_defaults = dict(user_id=user.id)
            default_dict = {}
            gender_map = dict(female="F", male="M")
            gender_map["male (hidden)"] = "M"
            gender_map["female (hidden)"] = "F"
            for f in friends:
                name = f.get("name")
                gender = None
                if f.get("sex"):
                    gender = gender_map[f.get("sex")]
                default_dict[str(f["id"])] = dict(name=name, gender=gender)
            id_field = "facebook_id"

            current_friends, inserted_friends = mass_get_or_create(
                FacebookUser, base_queryset, id_field, default_dict, global_defaults
            )
            logger.debug("found %s friends and inserted %s new ones", len(current_friends), len(inserted_friends))

        # fire an event, so u can do things like personalizing suggested users
        # to follow
        signals.facebook_post_store_friends.send(
            sender=get_profile_model(),
            user=user,
            friends=friends,
            current_friends=current_friends,
            inserted_friends=inserted_friends,
        )

        return friends
Ejemplo n.º 16
0
    def _store_friends(self, user, friends):
        from django_facebook.models import FacebookUser
        #store the users for later retrieval
        if friends:
            #see which ids this user already stored
            base_queryset = FacebookUser.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            default_dict = {}
            for f in friends:
                name = f.get('name')
                default_dict[str(f['id'])] = dict(name=name)
            id_field = 'facebook_id'

            current_friends, inserted_friends = mass_get_or_create(
                FacebookUser, base_queryset, id_field, default_dict, global_defaults
            )
            logger.debug('found %s friends and inserted %s new ones', len(current_friends), len(inserted_friends))
                    
        return friends
Ejemplo n.º 17
0
    def generate_and_store_random_pairs(self, user, movies):
        from django_facebook.models import FacebookUserMovies
        movies = FacebookUserMovies.objects.filter(user_id=user.id)
        if movies:
            movies_list = list(movies)
            import random
            random.shuffle(movies_list)
            from django_facebook.models import FacebookUserExperiment
            base_queryset = FacebookUserExperiment.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            id_field = 'facebook_id_first'
            default_dict = {}

            if len(movies_list) > 20:
                movies_list = movies_list[:20]

            for i in range(1, len(movies_list)):
                movie_name_first = movies_list[i-1].name
                facebook_id_first = movies_list[i-1].facebook_id
                movie_source_first = movies_list[i-1].movie_source
                movie_about_first = movies_list[i-1].movie_about

                movie_name_second = movies_list[i].name
                facebook_id_second = movies_list[i].facebook_id
                movie_source_second = movies_list[i].movie_source
                movie_about_second = movies_list[i].movie_about

                default_dict[str(facebook_id_first)] = dict(
                    movie_name_first=movie_name_first,
                    movie_source_first=movie_source_first,
                    movie_about_first=movie_about_first,
                    movie_name_second=movie_name_second,
                    facebook_id_second=facebook_id_second,
                    movie_source_second=movie_source_second,
                    movie_about_second=movie_about_second
                )
            temp1, temp2 = mass_get_or_create(
                FacebookUserExperiment, base_queryset, id_field, default_dict,
                global_defaults)
Ejemplo n.º 18
0
    def _store_likes(self, user, likes):
        if likes:
            from django_facebook.models import FacebookLike
            base_queryset = FacebookLike.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            id_field = 'facebook_id'
            default_dict = {}
            for like in likes:
                name = like.get('name')
                created_time_string = like.get('created_time')
                created_time = None
                if created_time_string:
                    created_time = datetime.datetime.strptime(
                        like['created_time'], "%Y-%m-%dT%H:%M:%S+0000")
                default_dict[like['id']] = dict(created_time=created_time,
                                                category=like.get('category'),
                                                name=name)
            current_likes, inserted_likes = mass_get_or_create(
                FacebookLike, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s likes and inserted %s new likes',
                         len(current_likes), len(inserted_likes))

        return likes
Ejemplo n.º 19
0
    def _store_reads(self, user, reads):
        current_reads = inserted_reads = None
        
        if reads:
            from django_facebook.models import FacebookRead
            base_queryset = FacebookRead.objects.filter(user_id=user.id)
            global_defaults = dict(user_id=user.id)
            id_field = 'read_id'
            default_dict = {}
            for read in reads:
                read_id = read['id']
                user_id = read['from']['id']
                user_name = read['from']['name']

                start_time_string = read['start_time']
                start_time = None
                if start_time_string:
                    start_time = datetime.datetime.strptime(
                        read['start_time'], "%Y-%m-%dT%H:%M:%S+0000")

                end_time_string = read['end_time']
                end_time = None
                if end_time_string:
                    end_time = datetime.datetime.strptime(
                        read['end_time'], "%Y-%m-%dT%H:%M:%S+0000")

                publish_time_string = read['publish_time']
                publish_time = None
                if publish_time_string:
                    publish_time = datetime.datetime.strptime(
                        read['publish_time'], "%Y-%m-%dT%H:%M:%S+0000")

                book_facebook_id  = read['data']['book']['id']
                book_url  = read['data']['book']['url']
                book_id  = book_url.split('/')[-1]
                book_title  = read['data']['book']['title']

                likes  = read['likes']['count']
                comments  = read['comments']['count']

                default_dict[read['id']] = dict(
                    read_id = read_id,
                    user_id = user_id,
                    user_facebook_id = user.get_profile().facebook_id,
                    user_name = user_name,

                    start_time = start_time,
                    end_time = end_time,
                    publish_time = publish_time,

                    book_facebook_id = book_facebook_id,
                    book_id = book_id,
                    book_url = book_url,
                    book_title = book_title,
                    likes = likes,
                    comments = comments,
                )

            current_reads, inserted_reads = mass_get_or_create(
                FacebookRead, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s reads and inserted %s new reads',
                         len(current_reads), len(inserted_reads))

        #fire an event, so u can do things read personalizing the users' account
        #based on the reads
        signals.facebook_post_store_reads.send(sender=get_profile_class(),
            user=user, reads=reads, current_reads=current_reads,
            inserted_reads=inserted_reads,
        )
        
        return reads
Ejemplo n.º 20
0
    def _store_friends(self, user, friends):
        from django_facebook.models import FacebookUser
        current_friends = inserted_friends = None

        #store the users for later retrieval
        allppl = [x.facebook_id for x in FacebookProfile.objects.all()]

        friends_on_this_site = []

        for friend in friends:
            if friend['id'] in allppl:
                friends_on_this_site.append(friend)
                userid = FacebookProfile.objects.filter(
                    facebook_id=friend['id'])[0].user_id
                up = user.get_profile()
                FacebookUser(
                    user_id=userid,
                    facebook_id=up.facebook_id,
                    name=up.facebook_name).save(
                    )  #no gender for now, don't think we need that -rory

        friends = friends_on_this_site

        if friends:

            #see which ids this user already stored
            base_queryset = FacebookUser.objects.filter(user_id=user.id)
            #if none if your friend have a gender clean the old data
            genders = FacebookUser.objects.filter(user_id=user.id,
                                                  gender__in=('M',
                                                              'F')).count()
            if not genders:
                FacebookUser.objects.filter(user_id=user.id).delete()

            global_defaults = dict(user_id=user.id)
            default_dict = {}
            gender_map = dict(female='F', male='M')
            for f in friends:
                name = f.get('name')
                gender = None
                if f.get('sex'):
                    gender = gender_map[f.get('sex')]
                default_dict[str(f['id'])] = dict(name=name, gender=gender)
            id_field = 'facebook_id'

            current_friends, inserted_friends = mass_get_or_create(
                FacebookUser, base_queryset, id_field, default_dict,
                global_defaults)
            logger.debug('found %s friends and inserted %s new ones',
                         len(current_friends), len(inserted_friends))

        #fire an event, so u can do things like personalizing suggested users
        #to follow
        signals.facebook_post_store_friends.send(
            sender=get_profile_class(),
            user=user,
            friends=friends,
            current_friends=current_friends,
            inserted_friends=inserted_friends,
        )

        return friends
Ejemplo n.º 21
0
def _store_fb_events(user):
    events = get_fb_events(user)
    maps_client = googlemaps.Client(key=settings.GOOGLE_PLACES_API_KEY)
    if events:
        FacebookEvent.objects.filter(user_id=user.id).delete()
        base_queryset = []
        global_defaults = dict(user_id=user.id)
        id_field = 'facebook_id'
        default_dict = {}
        for event in events:
            start_time_string = event.get('start_time')
            start_time = None
            if start_time_string:
                start_time = parse_date(event['start_time'])

            end_time_string = event.get('end_time')
            end_time = None
            if end_time_string:
                end_time = parse_date(event['end_time'])

            try:
                raw_data = json.dumps(event)
            except (ValueError, TypeError) as err:
                raw_data = None

            owner = event.get('owner')
            owner_text = json.dumps(owner) if owner else None

            cover = event.get('cover')
            cover_text = json.dumps(cover) if cover else None

            picture = event.get('picture')
            picture_text = json.dumps(picture) if picture else None

            place = event.get('place')
            place_text = json.dumps(place) if place else None

            location_gp = None
            location_name = place.get('name') if place else None
            location = event.get('place', {}).get('location')
            if location:
                location_gp = Geoposition(location.get('latitude', 0),
                                          location.get('longitude', 0))
            else:
                if location_name:
                    latitude, longitude = get_google_maps_geocode(
                        maps_client, location_name)
                    if latitude and longitude:
                        location_gp = Geoposition(latitude, longitude)

            description = event.get('description')
            description_text = description[:1000] if description else None

            default_dict[event['id']] = dict(
                name=event.get('name'),
                description=description_text,
                rsvp_status=event.get('rsvp_status'),
                attending_count=event.get('attending_count'),
                category=event.get('category'),
                owner=owner_text,
                cover=cover_text,
                picture=picture_text,
                place=place_text,
                raw_data=raw_data,
                start_time=start_time,
                end_time=end_time,
                type=event.get('type'),
                location=location_gp,
                location_name=location_name)
        current_events, inserted_events = mass_get_or_create(
            FacebookEvent, base_queryset, id_field, default_dict,
            global_defaults)
        logger.debug('found %s events and inserted %s new events',
                     len(current_events), len(inserted_events))