2012-11-04 23 views
5

मैं सार्वजनिक ट्विटर स्ट्रीम तक पहुंचने के लिए पायथन के लिए ट्वीपी लाइब्रेरी के साथ काम कर रहा था और एक बार समस्या में भाग गया जहां स्ट्रीम चलने के बाद, यह रुकता नहीं है। अब, यह समझ में आता है कि यह क्या करता है, लेकिन मैं चाहता था कि यह उपयोगकर्ता आईडी की खाली सूची के साथ फ़िल्टर करना शुरू कर दे और थोड़ी देर के बाद, किसी व्यक्ति को किसी विशेष ट्रैक शब्द को ट्वीट करने के बाद उपयोगकर्ता आईडी को सूची में जोड़ा जाता है, ताकि एक बार वे एक शब्द ट्वीट कर सकें , ट्रैकर अपनी सभी ट्वीट्स को ट्रैक करना शुरू कर देता है। समस्या यह है कि प्रारंभिक फ़िल्टर विकल्पों के साथ स्ट्रीम शुरू होने के बाद, चर बदलने से फ़िल्टर को प्रभावित नहीं होता है; यह केवल शुरुआती तर्कों का उपयोग करता रहता है।एक बदलती चर द्वारा ट्वीवी सार्वजनिक धारा फ़िल्टर

userIDs = [] 

trackWords = ["#Obama"] 

def stream(): 

    s = Stream(auth, StreamListener()) 

    s.filter(follow = userIDs, track = trackWords) 

मैं एक नया कीवर्ड जोड़ा गया है के बाद धारा परिभाषा फिर से याद करके इस पुरानी प्राप्त करने में सक्षम था, लेकिन मैं कई धाराओं खोज है और मैं उन्हें अलग धागे में डाल ताकि उन सभी को एक साथ चला सकते हैं। मैं धागे को रीफ्रेश करने का तरीका नहीं समझ सकता, इसलिए परिभाषा को याद किए बिना फ़िल्टर रीफ्रेश करने का प्रयास करना आसान लगता है।

मैं प्रोग्रामिंग के लिए काफी नया हूं, इसलिए शायद यह एक मौलिक अवधारणा है जिसे मैं अभी तक नहीं जानता, लेकिन उम्मीद है कि इसे रीफ्रेश करने के लिए एक आसान चाल है।

यहां मेरा सभी प्रासंगिक कोड है यदि यह किसी की सहायता करता है।

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() 

उत्तर

1

Tweepy अजगर पुस्तकालय एपीआई व्यवहार आप देख रहे हैं का समर्थन नहीं करता: उपरोक्त मदद करने के लिए दिखाने के बारे में मैं क्या बात कर रहा हूँ बस एक त्वरित बात थी। स्ट्रीम के साथ जुड़े पैरामीटर को संशोधित करने का कोई तरीका नहीं है जिसका सब्सक्राइब किया जा रहा है।

असल में, ट्विटर एपीआई स्वयं बदलते पैरामीटर मध्य-स्ट्रीम का समर्थन नहीं करता है। वे इसके खिलाफ सावधानी बरतते हैं। यह कहना नहीं है कि इसे काम करना संभव नहीं होगा (केवल सावधान रहें और दर सीमा से अधिक से बचें)।

मैं नए क्वेरी पैरामीटर के साथ दूसरी स्ट्रीम शुरू करने के लिए अपना दृष्टिकोण समायोजित करूंगा, ट्वीट ट्वीट्स का उपयोग दो बार एक ही ट्वीट को पास/जारी रखने से बचने के लिए करता हूं, और फिर दूसरी स्ट्रीम स्थापित होने के बाद आप प्रारंभिक स्ट्रीम बंद कर देंगे ।

0

आप ट्वीट्स की संख्या पर एक निश्चित शर्त/आवश्यकता पर ट्वीट को रोकने के लिए चाहते हैं, self.num_tweets = 0 को संपादित करने और उस पर एक गिनती रखने के लिए और यू डीईएफ़ on_status

में एक सीमक के रूप में उपयोग कर सकते हैं,