Pracowałem z biblioteką Tweepy dla Pythona, aby uzyskać dostęp do publicznego strumienia twitter i napotkałem problem, gdy po uruchomieniu strumienia, to się nie zatrzymuje. Teraz ma to sens w tym, co robi, ale chciałem, aby zaczęło filtrowanie z pustą listą identyfikatorów użytkowników, a po pewnym czasie identyfikatory użytkownika zostaną dodane do listy po tym, jak ktoś zrobi tweetowanie określonego słowa utworu, tak, że po tweetowaniu słowa , tracker zaczyna śledzić wszystkie swoje tweety. Problem polega na tym, że po uruchomieniu strumienia z początkowymi opcjami filtrowania zmiana zmiennych nie wpływa na filtr; po prostu używa początkowych argumentów.Publiczny filtr strumienia Tweepy przez zmienną zmienną
userIDs = []
trackWords = ["#Obama"]
def stream():
s = Stream(auth, StreamListener())
s.filter(follow = userIDs, track = trackWords)
udało mi się obejść ten problem wcześniej od przypomnienia definicji strumienia ponownie po nowe słowo kluczowe dodaje, ale mam wielu strumieni poszukiwania i umieścić je w oddzielnych wątkach więc wszystkie one mogą działać jednocześnie. Nie wiem, jak odświeżyć wątki, więc próba odświeżenia filtru bez przywoływania definicji wydaje się łatwiejsza.
Jestem dość nowy w programowaniu, więc być może jest to podstawowa koncepcja, której jeszcze nie znam, ale mam nadzieję, że jest prosta sztuczka, aby ją odświeżyć.
Oto cały mój odpowiedni kod, jeśli to pomoże każdemu. Powyższe było szybką rzeczą, aby pomóc pokazać, o czym mówię:
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()