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'])
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()
def get_all_tweets_count(time_range): return session.query(func.count(Tweet.id)).filter( Tweet.time >= (datetime.now() - time_range)).scalar()
def get_tweet_texts(time_range): return [ result[0] for result in session.query(Tweet.text).filter( Tweet.time >= (datetime.now() - time_range)).all() ]
def get_most_retweeted(time_range): return session.query(Tweet)\ .filter(Tweet.time >= (datetime.now() - time_range))\ .order_by(desc(Tweet.retweets))\ .first()