예제 #1
0
def process_tweet(status):
    if 'retweeted_status' in status:
        print('Skipping retweet')
        process_tweet(status['retweeted_status'])
        return

    if status['lang'] != TWEETS_LANG:
        print('This is not persian :(')
        return

    if 'quoted_status' in status:
        print('Processing quoted tweet')
        process_tweet(status['quoted_status'])

    author = session.query(Author).filter(
        Author.twitter_id == status['user']['id_str']).first()

    if author is None:
        author = Author(
            twitter_id=status['user']['id_str'],
            screen_name=status['user']['screen_name'],
            followers_count=status['user']['followers_count'],
        )

        session.add(author)

    author.screen_name = status['user']['screen_name']
    author.followers_count = status['user']['followers_count']

    session.flush()

    tweet = session.query(Tweet).filter(
        Tweet.twitter_id == status['id']).first()

    if tweet is None:
        tweet = Tweet(
            twitter_id=status['id'],
            text=status['text'],
            time=datetime_parser.parse(status['created_at']),
            author=author,
        )

        session.add(tweet)

    tweet.likes = status['favorite_count']
    tweet.retweets = status['retweet_count']

    session.commit()

    if not status['user']['following']:
        print('Not following, following {}'.format(
            status['user']['screen_name']))
        twitter_api.create_friendship(id=status['user']['id'])
예제 #2
0
def get_best_talent(time_range):
    return session.query(Tweet)\
        .filter(Tweet.time >= (datetime.now() - time_range))\
        .filter(Tweet.likes > 50)\
        .join(Tweet.author)\
        .order_by(desc(Tweet.likes / Author.followers_count))\
        .first()
예제 #3
0
def get_all_tweets_count(time_range):
    return session.query(func.count(Tweet.id)).filter(
        Tweet.time >= (datetime.now() - time_range)).scalar()
예제 #4
0
def get_tweet_texts(time_range):
    return [
        result[0] for result in session.query(Tweet.text).filter(
            Tweet.time >= (datetime.now() - time_range)).all()
    ]
예제 #5
0
def get_most_retweeted(time_range):
    return session.query(Tweet)\
        .filter(Tweet.time >= (datetime.now() - time_range))\
        .order_by(desc(Tweet.retweets))\
        .first()