2017-04-26 3 views
1

Ich versuche, ein einfaches Skript auszuführen, das Live-Tweets streamen wird. Mehrere Versuche, Retweets auszufiltern, waren nicht erfolgreich. Ich bekomme immer noch manuelle Retweets (mit dem Text "RT @") in meinem Stream. Ich habe andere Methoden einschließlich link und link versucht.Ignorieren von Retweets beim Streamen von Twitter Tweets

Wie lerne ich, mein Code ist sehr ähnlich wie die folgenden: link

Was kann ich tun, Retweets zu ignorieren?

Hier ist ein Ausschnitt aus meinem Code:

class StreamListener(tweepy.StreamListener): 

    def on_status(self, status): 
     if (status.retweeted) and ('RT @' not in status.text): 
      return 

    description = status.user.description 
    loc = status.user.location 
    text = status.text 
    coords = status.coordinates 
    geo = status.geo 
    name = status.user.screen_name 
    user_created = status.user.created_at 
    followers = status.user.followers_count 
    id_str = status.id_str 
    created = status.created_at 
    retweets = status.retweet_count 
    bg_color = status.user.profile_background_color 

    # Initialize TextBlob class on text of each tweet 
    # To get sentiment score from each class 
    blob = TextBlob(text) 
    sent = blob.sentiment 
+0

Wie sieht das Objekt 'status' aus? – ninesalt

+1

Ihre Logik scheint ein wenig verwirrt - '(status.retweeted) und ('RT @' nicht in status.text)' würde nur "offizielle" Retweets zurückgeben. Vielleicht solltest du '(status.retweeted) oder ('RT @' in status.text)' verwenden, um sowohl "offizielle" als auch "manuelle" Retweets auszuschließen – asongtoruin

Antwort

0

Was Sie tun können, eine andere Funktion ist erstellen innerhalb des on_status in Ihrem StreamListener zu nennen. Hier ist etwas, das für mich gearbeitet:

def analyze_status(text): 
    if 'RT' in text[0:3]: 
     print("This status was retweeted!") 
     print(text) 
    else: 
     print("This status was not retweeted!") 
     print(text) 

class MyStreamListener(tweepy.StreamListener): 
    def on_status(self, status): 
     analyze_status(status.text) 
    def on_error(self, status_code): 
     print(status_code) 

myStreamListener = MyStreamListener() 
myStream = tweepy.Stream(auth=twitter_api.auth, listener=myStreamListener) 
myStream.filter(track=['Trump']) 

, dass die folgenden ergibt:

This status was not retweeted! 
@baseballcrank @seanmdav But they won't, cause Trump's name is on it. I can already hear their stupidity, "I hate D… 
This status was retweeted! 
RT @OvenThelllegals: I'm about to end the Trump administration with a single tweet 
This status was retweeted! 
RT @kylegriffin1: FLASHBACK: April 2016 

SAVANNAH GUTHRIE: "Do you believe in raising taxes on the wealthy?" 

TRUMP: "I do. I do. Inc… 

Dies ist nicht die eleganteste Lösung, aber ich glaube, dass es das Problem behebt, die Sie konfrontiert waren.

+0

würde dies nicht "offizielle" Retweets annehmen (was ich glaube nicht unbedingt mit "RT @" beginnen) wurden nicht retweeted? – asongtoruin

+0

Ich habe eine 'StreamListener()' für eine lange Zeit mit einem beliebten Thema laufen lassen, nur wenn 'status.retweeted' gedruckt und es nie gedruckt. Vielleicht funktioniert das retweeted-Attribut nicht wie vorgesehen? – Brian

+0

hm, das scheint ungewöhnlich. Du könntest 'hasattr (Status, 'retweeted_status')' 'versuchen, was ziemlich einheitlich für traditionelle" Retweets "und" Anführungszeichen "zu sein scheint, vorausgesetzt, dass es über die Twitter-Schnittstelle erfolgt ist. – asongtoruin

Verwandte Themen