运行StreamListener(Tweepy)并同时分析推文

时间:2017-04-09 18:21:37

标签: python twitter stream tweepy

我目前正在使用Tweepy来传输推文,并在json文件中输出每条推文。一旦我完成了收听和关闭流,我正在分析推文的情绪。我想知道是否有办法同时做到这一点。我想启动流,在json文件中输出推文,然后在该推文上运行我的情绪分析,然后对每个推文实时反复执行。

def on_status(self, status):
    self.output.write(status + "\n")

    self.counter += 1

    if self.counter >= 20000:

        self.output.close()
        self.output = open('../streaming_data/' + self.fprefix + '.' + time.strftime('%Y%m%d-%H%M%S') + '.json', 'w')

上面是我的流媒体监听器。输出文件是self.output。

tweets = {}

with open(output.json, 'r') as file:
    lines = (line.rstrip() for line in file)
    lines = (line for line in lines if line)

    for line in lines:
        tweet = json.loads(line)
        tweets[tweet['id']]= tweet

以上是我如何在推文中存储每条推文,以便我可以使用函数分析它们。我的函数将推文作为参数。

function = myFunction(tweets, pos, neg)

基本上StreamListener收集推文并将它们存储在json文件中。但是我想收到推文并在收到后立即对其进行分析。所以收集一条推文,然后分析它,然后再做一遍。

1 个答案:

答案 0 :(得分:1)

为什么要将推文存储为json文件,有什么特别的原因吗?为什么不简单地将推文文本存储为文本文件,因为我假设您只是对推文的文本进行分析。另外,为什么不调用函数来处理推文并让它同时写入文件?

可能如下所示:

import tweepy
import secrets


class MyStreamListener(tweepy.StreamListener):
    def on_status(self, status):
        process_tweet(status.text)


def process_tweet(tweet):
    with open('tweets.txt', 'w') as tweet_file:
        tweet_file.write(tweet)
        sentiment_analysis(tweet)


def sentiment_analysis(tweet):
    #code to determine the sentiment of a tweet

您应该使用async参数在另一个线程中执行流:

aStream.filter(track=[aFilter], async=True)

aStream.userstream(async=True)