ich mit der Tweepy Bibliothek für Python Arbeiten wurde die Öffentlichkeit Twitter-Stream zugreifen und lief in ein Problem, wo einmal der Strom läuft, ist es nicht zu stoppen. Nun, das macht Sinn für das, was es tut, aber ich wollte, dass es mit einer leeren Liste von Benutzer-IDs filtert und nach einer Weile werden Benutzer-IDs zu der Liste hinzugefügt, nachdem jemand ein bestimmtes Titelwort getweetet hat, so dass sie ein Wort twittern , beginnt der Tracker alle ihre Tweets zu verfolgen. Das Problem ist, dass das Ändern der Variablen den Filter nicht beeinflusst, sobald der Stream mit den anfänglichen Filteroptionen gestartet wird; Es verwendet nur die anfänglichen Argumente.Tweepy öffentlichen Stromfilter durch eine sich ändernde Variable
userIDs = []
trackWords = ["#Obama"]
def stream():
s = Stream(auth, StreamListener())
s.filter(follow = userIDs, track = trackWords)
ich war in der Lage, um dieses Ziel früher zu erreichen, indem die Stromdefinition wieder, nachdem ein neues Schlüsselwort hinzugefügt wird erinnert, aber ich habe mehrere Streams suchen und ich habe sie in separaten Threads, so dass sie alle gleichzeitig ausgeführt werden können. Ich kann nicht herausfinden, wie die Threads aktualisiert werden. Daher scheint es einfacher zu sein, den Filter zu aktualisieren, ohne die Definition erneut aufzurufen.
Ich bin ziemlich neu in der Programmierung, so vielleicht ist dies ein grundlegendes Konzept ist, weiß ich noch nicht, aber hoffentlich gibt es einen einfachen Trick es auffrischen zu bekommen.
Hier ist meine ganze relevante Code, wenn das jemand hilft. Die oben war nur eine kurze Sache zu zeigen, zu helfen, was ich spreche:
userIDs = []
userNames = []
account = ['@DMS_423']
publicKeyWords = ['the','be','to','of','and','are','is','were','was']
class AStreamListener(StreamListener):
def on_status(self, status):
if status.author.screen_name not in userNames:
userNames.append(str(status.author.screen_name))
userIDs.append(str(api.get_user(str(status.author.screen_name)).id))
print status.author.screen_name, "has joined the game."
def uStream():
s = Stream(auth, StreamListener())
s.filter(follow = userIDs)
def pStream():
ps = PStream(pAuth, PStreamListener())
ps.filter(track = publicKeyWords)
def aStream():
adds = Stream(auth, AStreamListener())
adds.filter(track = account)
t1 = Thread(target = aStream)
t2 = Thread(target = uStream)
t3 = Thread(target = pStream)
def run():
t1.start()
t2.start()
t3.start()
run()