【问题标题】:Set tweets counts for each items in tweepy stream为 tweepy 流中的每个项目设置推文计数
【发布时间】:2017-06-22 20:30:29
【问题描述】:

我有一个问题,无法找到解决方案.. 我已经编写了一个 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)

这里我需要为 Cricket、Maths、Army 和 Sports 分别获取 5 条推文

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

我们将不胜感激。

感谢和问候。

【问题讨论】:

  • 你的代码中应该限制返回推文的数量?
  • 啊,是的。我需要为每个项目提供有限数量的推文,比如每个项目只有 4 或 5 条推文
  • 流媒体的整个想法是获得无限数量的推文。您需要在收集到您心中想要的推文后关闭流,或者使用 RESTful api 并以这种方式检索您想要的(过去)推文数量
  • 好的,我可以获取推文到达的元素名称吗?就像“板球”的推文到达……打印声明的其余部分在这里……。“体育”的推文到达……打印声明的其余部分在这里……
  • 您为什么要为此使用StreamListener?您是否需要在推文发生时返回推文,或者您对已经存在的推文感兴趣?

标签: python twitter filter stream tweepy


【解决方案1】:
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)

在这里,我初始化了一个列表,其中包含要搜索推文的所有必需单词,然后在 create_dict(list_) 中创建一个 key:value 为 word_to_be_searched:count_as_5 的字典 函数,如 Cricket:5、Maths:5、Army:5、Sports:5 等。然后我将列表和字典一起传递给 TweetListener 类。

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

[注意,如果某个键对应的任何值都变为零,则表示已捕获所需的推文数,因此我们不会继续对该词进行任何推文。]

然后在 performAction(key, status) 函数中 {key=one of the searched words and status = tweet capture} 我执行我需要的任务。

【讨论】:

    猜你喜欢
    • 2016-11-04
    • 1970-01-01
    • 2016-07-10
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多