为什么会收到TweepError('需要验证!')?

时间:2019-08-06 18:29:15

标签: python api tweepy

我正在尝试使用Tweepy创建一个Twitter机器人,该机器人将搜索我的时间轴上的tweet,并找到与特定关键字(“ brexit”)匹配的tweet,然后转发这些tweet。我的开发者帐户与我要转发的帐户相同。

我相信,我已经遵循了本书的所有内容。这是我的代码:


import tweepy
from tweepy import OAuthHandler
import time

auth = tweepy.OAuthHandler("XXX", "XXX")
auth.set_access_token("XXX", "XXX")
api = tweepy.API(auth)

class listener(tweepy.StreamListener):

    def on_status(self, status):
        print("Tweet arrived!")
        print("Authors name: %s" % status.author.screen_name)
        status.retweet()
        time.sleep(10)

    def on_error(selfself, status_code):
        if status_code == 420:
            return False

keywords = ["brexit"]

def search_tweets():
    api = tweepy.API(auth)
    tweetlistener = listener()
    stream = tweepy.Stream(tweepy.api.home_timeline(), listener = tweetlistener)
    stream.filter(track=keywords)

search_tweets()

但是,我收到以下错误消息:

Traceback (most recent call last):
  File "C:/Users/borde/Documents/PythonProjects/brexitbot/botcode.py", line 29, in <module>
    search_tweets()
  File "C:/Users/borde/Documents/PythonProjects/brexitbot/botcode.py", line 26, in search_tweets
    stream = tweepy.Stream(tweepy.api.home_timeline(), listener = tweetlistener)
  File "C:\Users\borde\AppData\Local\Programs\Python\Python37-32\lib\site-packages\tweepy\binder.py", line 245, in _call
    method = APIMethod(args, kwargs)
  File "C:\Users\borde\AppData\Local\Programs\Python\Python37-32\lib\site-packages\tweepy\binder.py", line 44, in __init__
    raise TweepError('Authentication required!')
tweepy.error.TweepError: Authentication required!

我尝试重置密钥,以确保它们没有超时,但是仍然无法正常工作。我还尝试过更改侦听器类,以便只打印找到的推文,而不是转发它们。

我对此完全陌生,我们将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您查看documentation,将会看到该Stream调用的第一个参数应该是您实例化的api对象的auth属性:

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

您只是实例化了TWICE API,而根本没有使用它。从search_tweets删除重复的行,并实例化流,如下所示:

stream = tweepy.Stream(auth=api.auth, listener = tweetlistener)

P.S。您传递的是实例而不是类,请使用c / p代替函数:

def search_tweets():
    stream = tweepy.Stream(auth=api.auth, listener=listener)
    stream.filter(track=keywords)

顺便说一句,您应该以大写字母开头的类命名,将class listener(tweepy.StreamListener):更改为class Listener(tweepy.StreamListener):,在我刚刚提供的代码中,listener=Listener