在tweepy流中设置每个项目的推文计数

时间:2017-06-22 20:30:29

标签: python twitter filter stream tweepy

我遇到了问题,无法找到解决方案.. 我已经编写了一个python脚本来发布Twitter推文。 我的问题是我需要为给定列表中的每个单词阅读5条推文。

以下是代码:

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条推文,分别用于Cricket,Maths,Army&运动

我得到的是上述元素的无数推文。

任何帮助都将受到高度赞赏。

谢谢&问候。

1 个答案:

答案 0 :(得分: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: create_dict(list _)中的count_as_5 功能,如板球:5,数学:5,陆军:5,运动:5等等。然后我将列表与字典一起传递给TweetListener类。

我覆盖on_status函数以检索推文,然后将推文与我字典的关键字段进行比较。很明显会有匹配然后,在这种情况下,我将值(作为计数器)减少1。 当所有值都变为0时,我返回false以断开循环并关闭线程。

[注意,如果与某个键对应的任何值变为零,则表示已经捕获了所需的推文数,因此我们不再继续发布该单词的推文。] < / p>

然后在 performAction(键,状态) 功能{key =搜索到的一个单词和status = tweet capture}我执行了我所需的任务。