Twitter API: How to exclude retweets when searching tweets using Twython
Asked Answered
B

1

5

I'm trying to exclude retweets and replies in my Twython search.

Here is my code:

from twython import Twython, TwythonError

app_key = "xxxx"
app_secret = "xxxx"
oauth_token = "xxxx"
oauth_token_secret = "xxxx"   

naughty_words = [" -RT"]
good_words = ["search phrase", "another search phrase"]
filter = " OR ".join(good_words)
blacklist = " -".join(naughty_words)
keywords = filter + blacklist

twitter = Twython(app_key, app_secret, oauth_token, oauth_token_secret) 
search_results = twitter.search(q=keywords, count=100)

The problem is that the -RT function isn't really working.

EDIT:

I've tried @forge suggestion, and while it does print the if tweets are not retweets or replies, when I incorporate them into the code below, the bot still finds tweets, retweets, quotes and replies.

twitter = Twython(app_key, app_secret, oauth_token, oauth_token_secret) query = 'beer OR wine AND -filter:retweets AND -filter:replies' 
response = twitter.search(q=query, count=100) 
statuses = response['statuses'] 
try: 
for tweet in statuses: 
try: 
twitter.retweet(id = tweet["id_str"]) 
except TwythonError as e: 
print e 
except TwythonError as e: 
print e

Any ideas? Is there a filter:quotes?

Buttery answered 11/3, 2016 at 10:45 Comment(2)
i have tried including "-filter:retweets" and "-filter:replies" in my bad words field but not getting any luck. is it really this difficult just to have the api return just tweets and not replies quotes or retweets?Buttery
You can also use as the tutorial given by [Craig Addyman] - craigaddyman.com/mining-all-tweets-with-pythonScoles
S
11

The correct syntax is -filter:retweets.

If you would like to search on terms "search phrase" or "another search phrase" and exclude retweets, then the query should be:

query = "search_phrase OR another_search_phrase -filter:retweets"

To exclude replies as well, add -filter:replies like this:

query = "search_phrase OR another_search_phrase -filter:retweets AND -filter:replies"

This should be working, you can verify it by checking the status fields in_reply_to_status_id and retweeted_status:

  • Status is not a reply if in_reply_to_status_id is empty
  • Status is not a retweet if it doesn't have the field retweeted_status

With Twython:

import twython

twitter = twython.Twython(APP_KEY, APP_SECRET, OAUTH_TOKEN, OAUTH_TOKEN_SECRET) 

query = 'wine OR beer -filter:retweets AND -filter:replies' 
response = twitter.search(q=query, count=100)
statuses = response['statuses']
for status in statuses:
    print status['in_reply_to_status_id'], status.has_key('retweeted_status')

# Output should be (None, False) to any status
Stamps answered 15/3, 2016 at 21:14 Comment(1)
Beautiful! Also, if anyone wants the API doc for various filters: developer.twitter.com/en/docs/tweets/rules-and-filtering/…Hukill

© 2022 - 2024 — McMap. All rights reserved.