2017-06-22 42 views
0

每個項目組的鳴叫計數我有一個問題,並不能得到一個解決方案.. 我寫了一個python腳本到流嘰嘰喳喳的鳴叫。 我的問題是我需要閱讀給定列表中每個單詞的5條推文。在tweepy流

下面是代碼:

class TweetListener(StreamListener): 

    def on_status(self,status):   
     print "TWEET ARRIVED!!!" 
     print "Tweet Text : %s" % status.text 
     print "Author's name : %s" % status.author.screen_name 
     print "Time of creation : %s" % status.created_at 
     print "Source of Tweet : %s" % status.source  
     time.sleep(10)  
     return True 

    def on_error(self, status):   
     print status 
     if status == 420: 
      print "Too soon reconnected, Exiting!!" 
      return False 
     sys.exit() 


def search_tweets(): 
    twitterStream = Stream(connect().auth, TweetListener())   
    twitterStream.filter(track=['Cricket','Maths','Army','Sports'],languages = ["en"],async=True) 

在這裏,我需要獲得5個鳴叫每一板球,數學,陸軍&體育

我所得到的是微博對上述元素的無限多。

任何幫助將不勝感激。

感謝&問候。

+0

什麼在你的代碼應該限制返回鳴叫的次數? – JohanL

+0

啊有點是的。我需要的鳴叫每個項目的數量有限,只能說每個 –

+0

4周或5的鳴叫流的整體思路是讓鳴叫無限多的。你需要關閉流,一旦你收到鳴叫到你的心中,或者使用REST風格的API,並以這種方式檢索你想要的(過去)鳴叫次數 – teknoboy

回答

0
class TweetListener(StreamListener): 
    def __init__(self, list_=None,dict_= None): 
     self.keys_= list_ 
     self.dict = dict_ 

    def on_status(self, status): 
     str_ = status.text.lower()   
     for key in self.dict.keys(): 
      if key.lower() in str_.lower(): 
       if self.dict[key] <= 0: 
        return True 
       else: 
        self.dict[key] -=1 
        self.performAction(key,status)          

     if all(value == 0 for value in self.dict.values()): 
      return False 

    def on_error(self, status):   
     print status 
     if status == 420: 
      print "Too soon reconnected . Will terminate the program" 
      return False 
     sys.exit()  


def create_dict(list_): 
    no_of_tweets = 5 
    dict_ = {k:no_of_tweets for k in list_ } 
    return dict_ 


def search_tweets(): 
    search_word = ['Cricket','Maths','Army','Sports']  
    twitterStream = Stream(connect().auth, TweetListener(list_=search_word , dict_=create_dict(search_word))) 
    twitterStream.filter(track=search_word ,languages = ["en"],async=True) 

在這裏,我初始化所有需要的話是要搜索的鳴叫,然後我創建密鑰的字典清單:值word_to_be_searched:count_as_5在create_dict(list_)功能,像板球:5,數學:5,軍隊:5,體育:5等等。然後,我將該列表與詞典一起傳遞給TweetListener類。

我重寫on_status函數來檢索鳴叫,然後用微博我的字典的關鍵領域進行比較。很明顯會有一場比賽,然後,在這種情況下,我用1 減少值(計數器這裏)當所有的值變爲0,然後我返回false打破循環並關閉線程。

[注意,如果對應於一鍵的任何數值變成零時,則表明無需鳴叫已經捕獲,所以我們不會對這個詞更多的鳴叫進行。]

然後在performAction(鍵,狀態)函數{鍵=搜索到的單詞之一和狀態= tweet捕獲}我執行我所需的任務。