使用Tweepy获取Twitter数据时出现401错误

18

我正在尝试使用Tweepy获取Twitter数据,使用以下代码,但是返回401错误,我重新生成了访问和秘密令牌,但是出现了相同的错误。

#imports
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener

#setting up the keys
consumer_key = 'xxxxxxx'
consumer_secret = 'xxxxxxxx' 
access_token = 'xxxxxxxxxx'
access_secret = 'xxxxxxxxxxxxx'

class TweetListener(StreamListener):
# A listener handles tweets are the received from the stream.
#This is a basic listener that just prints received tweets to standard output

   def on_data(self, data):
       print (data)
       return True

   def on_error(self, status):
       print (status)



#printing all the tweets to the standard output
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)



stream = Stream(auth, TweetListener())

t = u"#سوريا"
stream.filter(track=[t])

你在 Twitter 帐户中授权了这个应用吗?帮助链接 - Tiket_dev
我猜测问题出在你机器的日期和时间上,请检查它们是否已更新?如果你的凭据不正确或者你正在使用过时的 tweepy 版本,这是相当常见的。 - ZdaR
我的 tweepy 版本是 2.7,之前一直可以正常获取数据,但突然出现了这个问题,原因不明! - user3643380
我已经重新安装了 tweepy 版本 3.2.0,但是没有用,更新 tweepy 后我仍然遇到了同样的问题。 - user3643380
2
哦,我找到了解决方案。在这个链接link中,问题出在你电脑的国家和时间设置上。感谢大家。 - user3643380
显示剩余3条评论
7个回答

20

只需重置您系统的时钟。

如果来自声称时间超出 Twitter 时间 15 分钟的服务器的 API 请求进行身份验证,则会因 401 错误而失败。

谢谢您


3
我认为实际上是5分钟,而不是15分钟。此外,这仅适用于流式请求。即使时钟不同步,REST API请求也可以正常工作。 - Jonas

6
您可能在从apps.twitter.com页面复制访问令牌时犯了错误。需要复制完整的访问令牌,而不仅仅是-后面的字符串。例如,复制并粘贴整个字符串,如74376347-jkghdui456hjkbjhgbm45gj,而不仅仅是jkghdui456hjkbjhgbm45gj。【请注意上述字符串只是我随机输入的示例。您的实际访问令牌也会像这样,即 "一串数字-字母数字混合字符串"】。

3

只需将您的键放入双引号中,您无需在上次Twitter身份验证中定义您的键。

#Import the necessary methods from tweepy library
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream

#Variables that contains the user credentials to access Twitter API
access_token = 'X3YIzD'
access_token_secret = 'PiwPirr'

consumer_key = 'ekaOmyGn'
consumer_secret = 'RkFXRIOf83r'


#This is a basic listener that just prints received tweets to stdout.
class StdOutListener(StreamListener):

def on_data(self, data):
    print data
    return True

def on_error(self, status):
    print status


if __name__ == '__main__':

#This handles Twitter authetification and the connection to Twitter 
Streaming API
l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
stream = Stream(auth, l)

#This line filter Twitter Streams to capture data by the keywords: 'python', 
'javascript', 'ruby'
stream.filter(track=['python', 'javascript', 'ruby'])

2
我曾遇到同样的问题 - 这里没有什么可以解决它。对我来说,技巧是使用Tweepy流式传输推文显然需要1A身份验证,而不是2A (参见-https://github.com/tweepy/tweepy/issues/1346)。这意味着您需要在身份验证对象中使用访问令牌以及使用者令牌。
import tweepy

# user credentials
access_token = '...'
access_token_secret = '...'

consumer_key = '...'
consumer_secret = '...'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

# this is the main difference
auth.set_access_token(access_token, access_token_secret)

stream = tweepy.Stream(auth, tweepy.StreamListener)

嗨,我收到了401未授权的错误。 - Anshuman Jayaprakash

0
在我的情况下,出现错误是因为我使用了AppAuthHandler而不是OAuthHandler。切换到OAuthHandler解决了这个问题。

0
在我的情况下,我遇到了这个问题,但它与时间无关。
我的应用程序只有“只读”权限。 我必须将其更改为“读写”权限才能使错误停止。
您可以通过转到应用程序设置页面中的“用户身份验证”来执行此操作。

请问您能否添加一些截图来说明这些指示吗? - mrtig

0

更改只读权限后,您必须重新生成访问令牌,然后将其放入代码中。感谢您的帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接