def getTweetsforCandidate(self, screen_name): storedTweets = Tweet.query().filter( Tweet.candidate == screen_name).order(Tweet.id).fetch() if not storedTweets: tweets = self.api.GetUserTimeline(screen_name=screen_name, count=100) else: tweets = self.api.GetUserTimeline(screen_name=screen_name, since_id=storedTweets[-1].id, count=100) for t in tweets: tweet = Tweet() tweet.candidate = screen_name tweet.text = t.text tweet.id = t.id tweet.dateCreated = datetime.strptime( t.created_at, '%a %b %d %H:%M:%S +0000 %Y') tweet.put() self.response.write('\n' + str(tweet))
def _extract_tweet(self, soup: BeautifulSoup) -> Tweet: stats_container = soup.find('div', class_='ProfileTweet-actionCountList') stats = self._extract_stats(stats_container) header_container = soup.select('div.stream-item-header')[0] account = self._extract_account(header_container) texts = soup.select('p.TweetTextSize.tweet-text')[0].findAll(text=True) tweet = Tweet() tweet.retweets = stats['retweet'] tweet.likes = stats['favorite'] tweet.replies = stats['reply'] tweet.text = ''.join(texts) tweet.hashtags = re.findall(r"(#\w+)", tweet.text) tweet.date = datetime.utcfromtimestamp( int( header_container.find('span', class_='_timestamp').attrs['data-time'])) tweet.account = account return tweet