Не могу получить счетчик, работающий в твипе - PullRequest
0 голосов
/ 01 июня 2018
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 Ответ

0 голосов
/ 01 июня 2018

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

Какошибка указывает, что вы еще не присвоили значение для счетчика, метод "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)
...