def harvest_tweets(fact, tweets_per_fact=10): if settings.TWITTER_APP_KEY is None: return if not fact.expression: return for expression in search_expressions(fact): SEARCH_COUNT = 100 tweets = _search_tweets(expression, SEARCH_COUNT) tweets = _cull_spammy_tweets(tweets, SEARCH_COUNT) tweets_with_frequencies = [] for tweet in tweets: frequencies = word_frequencies(tweet['text']) try: average = sum(frequencies) / float(len(frequencies)) except ZeroDivisionError: average = 0 tweets_with_frequencies.append((average, tweet)) sorted_tweets = sorted_by_usefulness_estimate(tweets_with_frequencies) top_tweets = sorted_tweets[:tweets_per_fact] for average_word_frequency, tweet in top_tweets: try: ExpressionTweet.objects.create( search_expression=expression, tweet=tweet, tweet_id=tweet['id_str'], average_word_frequency=average_word_frequency, ) except IntegrityError: continue
def get_queryset(self): fact = get_object_or_404(Fact, id=self.kwargs["fact_id"]) # TODO: Use DRF permissions. if fact.deck.owner_id != self.request.user.id: raise PermissionDenied("You do not own this fact.") tweets = ExpressionTweet.objects.filter(search_expression__in=search_expressions(fact)) tweets = tweets.order_by("-average_word_frequency") return tweets[: self.MAX_COUNT]
def get_queryset(self): fact = get_object_or_404(Fact.objects.select_related('deck'), id=self.kwargs['fact_id']) # TODO: Use DRF permissions. if fact.deck.owner_id != self.request.user.id: raise PermissionDenied('You do not own this fact.') tweets = ExpressionTweet.objects.filter( search_expression__in=search_expressions(fact), ) tweets = tweets.order_by('-average_word_frequency') return tweets[:self.MAX_COUNT]
def harvest_tweets(fact, tweets_per_fact=10): if settings.TWITTER_APP_KEY is None: return if not fact.expression: return for expression in search_expressions(fact): SEARCH_COUNT = 100 tweets = _search_tweets(expression, SEARCH_COUNT) tweets = _cull_spammy_tweets(tweets, SEARCH_COUNT) tweets_with_frequencies = [] for tweet in tweets: frequencies = word_frequencies(tweet['text']) try: average = sum(frequencies) / float(len(frequencies)) except ZeroDivisionError: average = 0 tweets_with_frequencies.append((average, tweet)) sorted_tweets = sorted_by_usefulness_estimate( tweets_with_frequencies) top_tweets = sorted_tweets[:tweets_per_fact] for average_word_frequency, tweet in top_tweets: try: ExpressionTweet.objects.create( search_expression=expression, tweet=tweet, tweet_id=tweet['id_str'], average_word_frequency=average_word_frequency, ) except IntegrityError: continue