Example #1
0
def main():
    logger.info('Starting follow neighbour script')
    try:
        db.init_db()
        lat, lon = config.TWEET_HOME_GEO
        radius = '100km'
        geocode = ','.join([str(lat), str(lon), radius])
        registered_users = [
            user.user_id for user in db.session.query(User).all()]
        results = getTweets([config.TWEET_LOCATION.split(',')[0]],
                            result_type='recent')
        near_tweets = []
        for tweet in results:
            if tweet.get('place'):
                if tweet.get('place').get('full_name') == 'San Francisco, CA':
                    near_tweets.append(tweet)
        near_tweets[0]
        authors = [tweet.get('user') for tweet in near_tweets]
        authors_id_list = set([author.get('id_str') for author in authors])
        follow_list = [author for author in authors_id_list
                       if author not in registered_users]
        logger.info('Found %d  new neighbours' % len(follow_list))
        followUsers(follow_list[:30])
    except Exception, err:
        logger.error('%s: %s' % (Exception, err))
Example #2
0
def main():
    try:
        follows = 30
        db.init_db()
        users = db.session.query(User).all()
        favorite = None
        user_list = []
        logger.debug('Starting follow routine.')
        for user in users:
            user_list.append(user.user_id)
            if user.favorited:
                if user.favorited.date() == datetime.today().date():
                    favorite = user.user_id
                    break
        if not favorite:
            logger.debug('No favorite for today.')
            new_favorite = db.session.query(
                User).filter(User.favorited == None).first()
            logger.debug('%s is todays new favorite.' % new_favorite.user_id)
            new_favorite.favorited = datetime.now()
            db.session.merge(new_favorite)
            db.session.commit()
            favorite = new_favorite.user_id
        logger.debug(
            "Following todays favorite's (%s) followers" % favorite)
        favorite_followers = getFollowers(favorite, follows)
        favorite_followers_ids = [follower.get('id_str') for follower
                                  in favorite_followers[:follows]
                                  if (follower not in user_list
                                  and follower != config.TWEET_USER_ID)]
        followUsers(favorite_followers_ids)
        new_favorite = User()
        new_favorite.user_id = favorite_followers[0].get('id_str')
        new_favorite.favorited = datetime.now() + timedelta(days=6)
    except Exception, err:
        logger.error('%s: %s' % (Exception, err))
Example #3
0
def update_users(users, user_followers=False):
    db.init_db()
    for user in users:
        stored_user = db.session.query(
            User).filter_by(user_id=user['id_str']).first()
        updated_user = stored_user or User(user_id=user['id_str'])
        # Follow user back if not already followed
        if user_followers and not updated_user.followed:
            followUsers([updated_user.user_id])
            updated_user.followed = datetime.now()
        # Add followed_back date if user is friend and it is not set
        if (user_followers and not updated_user.followed_back):
            updated_user.followed_back = datetime.now()
        join_date = parser.parse(user['created_at']).replace(tzinfo=None)
        updated_user.join_date = join_date
        updated_user.contributors_enabled = user.get('contributors_enabled')
        updated_user.default_profile = user.get('default_profile')
        updated_user.default_profile_image = user.get('default_profile_image')
        updated_user.favourites_count = user.get('favourites_count')
        updated_user.follow_request_sent = user.get('follow_request_sent')
        updated_user.followers_count = user.get('followers_count')
        updated_user.following = user.get('following')
        updated_user.friends_count = user.get('friends_count')
        updated_user.geo_enabled = user.get('geo_enabled')
        updated_user.is_translator = user.get('is_translator')
        updated_user.language = get_language(user.get('lang'))
        updated_user.listed_count = user.get('listed_count')
        updated_user.profile_background_color = user.get(
            'profile_background_color')
        updated_user.profile_background_image_url = user.get(
            'profile_background_image_url')
        updated_user.profile_background_image_url_https = user.get(
            'profile_background_image_url_https')
        updated_user.profile_background_tile = user.get(
            'profile_background_tile')
        updated_user.profile_banner_url = user.get('profile_banner_url')
        updated_user.profile_image_url = user.get('profile_image_url')
        updated_user.profile_image_url_https = user.get(
            'profile_image_url_https')
        updated_user.profile_link_color = user.get('profile_link_color')
        updated_user.profile_sidebar_border_color = user.get(
            'profile_sidebar_border_color')
        updated_user.profile_sidebar_fill_color = user.get(
            'profile_sidebar_fill_color')
        updated_user.profile_text_color = user.get('profile_text_color')
        updated_user.profile_use_background_image = user.get(
            'profile_use_background_image')
        updated_user.protected = user.get('protected')
        updated_user.screen_name = user.get('screen_name')
        updated_user.show_all_inline_media = user.get('show_all_inline_media')
        updated_user.statuses_count = user.get('statuses_count')
        updated_user.time_zone = user.get('time_zone')
        updated_user.url = user.get('url')
        updated_user.utc_offset = user.get('utc_offset')
        updated_user.verified = user.get('verified')
        updated_user.withheld_in_countries = user.get('withheld_in_countries')
        updated_user.withheld_scope = user.get('withheld_scope')

        for attribute in ['description', 'name', 'location']:
            try:
                data = user.get(attribute)
                data.decode('utf-8')
                updated_user.__setattr__(attribute, data)
            except:
                # logger.debug('Encoding error for %s for user: %s' %
                #              (attribute, updated_user.screen_name))
                pass

        db.session.merge(updated_user)
        db.session.commit()
    logger.info('Updating %d users' % len(users))