使用 Tweepy 检索 Twitter 数据时出现 401 错误

Posted

技术标签:

【中文标题】使用 Tweepy 检索 Twitter 数据时出现 401 错误【英文标题】:401 Error when retrieving Twitter data using Tweepy 【发布时间】:2015-04-09 08:44:51 【问题描述】:

我正在尝试使用 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 帐户中授权了该应用程序? [帮助链接][1] [1]:***.com/questions/19095257/… 不幸的是,我仍然有同样的错误。 我也尝试使用 twitter 字段检查登录,但没有用。任何帮助!!! 我猜是你机器的日期和时间问题,请检查它们是否更新?如果您的凭据不正确或者您使用的是过时版本的 tweepy,这很常见 哦,我找到了解决方案。在这个链接link,所有关于国家,时间设置在您的计算机中。谢谢所有 【参考方案1】:

只需重置系统时钟。

如果用于身份验证的 API 请求来自声称其时间超出 Twitter 时间 15 分钟的服务器,则会失败并出现 401 错误。

谢谢你

【讨论】:

我认为实际上是 5 分钟,而不是 15 分钟。此外,这仅适用于流式传输请求。即使时钟不同步,REST API 请求也能正常工作。 完美地解决了我的问题。由于土耳其新的全年 DST 政策,我的旧 Mac Pro 时间错误。手动修复它导致我的 tweepy 脚本给出 401 错误。谢谢。【参考方案2】:

您可能只是在从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'])

【讨论】:

【参考方案4】:

我有同样的问题 - 这里没有解决它。对我来说,诀窍是使用 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【参考方案5】:

就我而言,发生错误是因为我使用的是AppAuthHandler 而不是OAuthHandler。切换到OAuthHandler 解决了这个问题。

【讨论】:

【参考方案6】:

就我而言,我遇到了这个问题,但它与时间无关。

我的应用拥有“只读”权限。 我必须将其更改为“读写”权限才能停止错误。

您可以通过转到应用设置页面中的“用户身份验证”来执行此操作。

【讨论】:

以上是关于使用 Tweepy 检索 Twitter 数据时出现 401 错误的主要内容,如果未能解决你的问题,请参考以下文章

Tweepy1——抓取Twitter数据

如何使用 Tweepy 获取 Twitter 生物信息

使用 Python Tweepy 的 Twitter 流 API

使用 Tweepy 搜索 Twitter 提要

从 twitter 流中排除回复 - tweepy

如何在 Python 上使用 Tweepy 创建 Twitter 线程