代码之家  ›  专栏  ›  技术社区  ›  Nat

不能让柜台在tweepy工作

  •  0
  • Nat  · 技术社区  · 6 年前
    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'])
    

    我是tweepy的新手,我要做的第一件事就是制作一个程序,扫描所有推文中的特定单词。一切都很顺利,直到我尝试添加一个计数器来计算该单词的实例数。无论我在哪里分配计数器,我总是在分配“错误”之前引用“UnboundLocalError:local variable”计数器。在这个程序中,我应该在哪里分配计数器?

    1 回复  |  直到 6 年前
        1
  •  1
  •   d parolin    6 年前

    假设上面的“不能”不在你的代码中,如果可能的话,更新你的问题以省略“”,因为它会扰乱可读性或更改为其他占位符文本。

    如错误所示,您尚未为计数器分配值,方法“on_status”将尝试递增计数器,但这只是方法的局部值,而不是对象的局部值,因此失败。

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

    您应该在 初始化 方法,然后使用self。相反,要反击。

    添加

    ...
    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_状态修改为

    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)