Хранение потоковых твитов в списке для дальнейшего анализа - PullRequest
0 голосов
/ 10 декабря 2018

Я создаю приложение для интеллектуального анализа данных, которое собирает твиты с использованием потокового API Twitter (через tweepy) и запускает на нем набор алгоритмов NLP.Пока все, что я смог сделать, это записать твиты во внешний файл.Из-за объема твитов, которые я собираюсь собрать, это 100 за раз (довольно мало) и проблем с развертыванием, я хочу собрать эти твиты в словарь или список для дальнейшего анализа.Однако мне это не удалось.Код, который у меня есть, приведен ниже:

import tweepy

class MyStreamListener(tweepy.StreamListener):
    def __init__(self, api=None):
        super(MyStreamListener, self).__init__()
        self.num_tweets = 0
        self.tweets = []

    def on_status(self, status):
        #print(status.text)
        self.num_tweets += 1
        self.tweets.append(status.text)
        if self.num_tweets > 100:
            return False

def getstreams(keyword):
    CONSUMER_KEY    = ''
    CONSUMER_SECRET = ''
    ACCESS_TOKEN  = ''
    ACCESS_SECRET = ''
    auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
    auth.set_access_token(ACCESS_TOKEN, ACCESS_SECRET)
    api = tweepy.API(auth, wait_on_rate_limit=True)
    myStreamListener = MyStreamListener()
    myStream = tweepy.Stream(auth = api.auth,listener=myStreamListener)
    tweet_list = myStream.filter(track=[keyword])
    return tweet_list.tweets

getstreams('Starbucks')

Однако, когда я запускаю это, все, что я получаю, это:

AttributeError: 'NoneType' object has no attribute 'tweets'

, указывающее на строку:

return tweet_list.tweets

Буду признателен, если кто-нибудь ответит, как решить эту проблему, и расскажет, как собрать n списков твитов в список.

1 Ответ

0 голосов
/ 11 декабря 2018

Вы можете использовать функцию on_data в своем классе.

def on_data(self, data):
    # Converting data , which is an object, into JSON
    tweet = json.loads(data)

    # my_tweet is our list declared globally
    my_tweet.append(tweet)
...