2017-06-22 124 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捕获}我执行我所需的任务。