Не могу получить счетчик, работающий в твипе

from tweepy import OAuthHandler

import tweepy
from tweepy import StreamListener
from tweepy import Stream


import time



consumer_key = 'super secret consumer key'
consumer_secret = 'shhhhh can't tell anyone this!'
access_token = 'hmmmmmmmmmmmmm'
access_secret = 'arrays should start at 0'

auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)

api = tweepy.API(auth)
print('')
print('starting...')
time.sleep(3)

class MySteamListener(tweepy.StreamListener):







    def on_status(self, status):
        #prints status text. can be replaced with a counter probably.
        counter = counter + 1
        print(status.text)


    def on_error(self, status_code):
        if status_code == 420:
            print('420 error')
            #Ends stream in case of rate limiting
            return False


mySteamListener = MySteamListener()

myStream = tweepy.Stream(auth = api.auth, listener = mySteamListener)

myStream.filter(track = ['Warriors'])

Я новичок в твипи, и первое, что я пытаюсь сделать, - это создать программу, которая сканирует все твиты на наличие определенных слов. Все работало хорошо, пока я не попытался добавить счетчик для числа экземпляров для этого слова. Независимо от того, где я присваиваю счетчик, я всегда получаю ошибку "UnboundLocalError: локальная переменная" counter ", на которую ссылаются перед присваиванием". Где я должен назначить счетчик в этой программе?

1 ответ

Решение

Предполагая, что вышеприведенное "не" на самом деле отсутствует в вашем коде, по возможности обновите ваш вопрос, чтобы пропустить "", так как это портит читабельность или изменится на другой текст-заполнитель.

Как указывает ошибка, вы еще не присвоили значение счетчику, метод on_status будет пытаться увеличить счетчик, но это только локально для метода, а не для объекта, поэтому он завершится неудачно.

def on_status(self, status):
        #prints status text. can be replaced with a counter probably.
        counter = counter + 1
        print(status.text)

Вы должны инициализировать счетчик в методе init, а затем использовать self.counter.

добавлять

...
class MySteamListener(tweepy.StreamListener):

    def __init__(self):
        # Not sure if necessary, to make this work, but you could
        # Initialize the inherited class as well (this may work only in Python 3)
        # super().__init__()
        self.counter = 0
...

Изменить on_status на

def on_status(self, status):
        #prints status text. can be replaced with a counter probably.
        self.counter = self.counter + 1
        # Can be written as 'self.counter += 1'
        print(status.text)
Другие вопросы по тегам