Tweepy 流式传输 returns 401 需要授权
Tweepy streaming returns 401 Authorization Required
我正在尝试连接到 Twitter 流 api 以实时获取推文。这段代码一直工作到 5-6 年前。突然之间,我开始一直收到 401。奇怪的是,这既发生在我的本地机器上,也发生在我们位于云端的生产服务器上,所以我认为这不是网络相关的问题。
代码如下:
l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
auth.callback = 'https://localhost' #no effect commented/uncommented
stream = Stream(auth, l)
stream.filter(track=['twitter'], languages=["es"])
到目前为止,我已经尝试了以下方法:
- 正在生成新的消费者密钥、消费者秘密、访问令牌和访问令牌秘密。我使用了 4 组不同的键,这些键以前是有效的。
- 从 apps.twitter.com 创建了一个全新的应用程序。填写回调 url 因为一些用户反映 401 "Authorization Required" 与 twitter 应用程序页面中缺少回调 URL 字段有关。
- 将我的时钟与本地服务器和生产服务器上的 ntp 服务器同步。我的时钟没有关闭。
- 我的应用程序有正确的权限,我在配置后收到了访问令牌和密码。
请求如下:
'Content-Length': '22'
'Content-Type': 'application/x-www-form-urlencoded'
'Authorization': 'OAuth oauth_nonce="161484371946745487981492681844"
oauth_timestamp="1492681844"
oauth_version="1.0"
oauth_signature_method="HMAC-SHA1"
oauth_consumer_key="<oauth_consumer_key>"
oauth_token="<oauth_token>"
oauth_signature="tphQqFWaBvEo2byjZ%2BRqNAM30I0%3D"'
Method: 'POST'
URL: 'https://stream.twitter.com/1.1/statuses/filter.json?delimited=length'
如果我能得到 401 Unauthorized "Need Authorization" 响应的任何帮助,我们将不胜感激。
编辑:我也尝试过使用 Twython,我从 Twitter 得到了相同的回复。
谢谢
如果你不需要回推,也许你可以尝试使用 Twython OAuth2 连接
Twython Auth
或尝试使用此代码。
# Put the consumer keys
auth = tweepy.OAuthHandler("consumer_key", "consumer_secret")
# Redirect user to Twitter to authorize
redirect_user(auth.get_authorization_url())
# Get access token
auth.get_access_token("verifier_value")
# Construct the API instance
api = tweepy.API(auth)
#Create the stream
streamClass= StdOutListener()
stream= tweepy.Stream(auth = api.auth, listener=streamClass)
这应该有效。
也许您的机器人未在该帐户上获得授权,这可能是错误。但我不这么认为。
如果需要示例,请查看我的 BOT 的身份验证:
ED_Postcards BOT
(新版本来了漂亮的代码)
经过 2 周的故障排除,我终于解决了这个问题。对于 tweepy,您需要手动设置用于通过 Twitter 进行身份验证的 auth 对象的回调 url。
更正后转到 apps.twitter.com 并取消选中框 "Allow this application to to be used to Sign in with Twitter"。 Twitter API 的错误消息一点也不简洁。
我正在尝试连接到 Twitter 流 api 以实时获取推文。这段代码一直工作到 5-6 年前。突然之间,我开始一直收到 401。奇怪的是,这既发生在我的本地机器上,也发生在我们位于云端的生产服务器上,所以我认为这不是网络相关的问题。
代码如下:
l = StdOutListener()
auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
auth.callback = 'https://localhost' #no effect commented/uncommented
stream = Stream(auth, l)
stream.filter(track=['twitter'], languages=["es"])
到目前为止,我已经尝试了以下方法:
- 正在生成新的消费者密钥、消费者秘密、访问令牌和访问令牌秘密。我使用了 4 组不同的键,这些键以前是有效的。
- 从 apps.twitter.com 创建了一个全新的应用程序。填写回调 url 因为一些用户反映 401 "Authorization Required" 与 twitter 应用程序页面中缺少回调 URL 字段有关。
- 将我的时钟与本地服务器和生产服务器上的 ntp 服务器同步。我的时钟没有关闭。
- 我的应用程序有正确的权限,我在配置后收到了访问令牌和密码。
请求如下:
'Content-Length': '22'
'Content-Type': 'application/x-www-form-urlencoded'
'Authorization': 'OAuth oauth_nonce="161484371946745487981492681844"
oauth_timestamp="1492681844"
oauth_version="1.0"
oauth_signature_method="HMAC-SHA1"
oauth_consumer_key="<oauth_consumer_key>"
oauth_token="<oauth_token>"
oauth_signature="tphQqFWaBvEo2byjZ%2BRqNAM30I0%3D"'
Method: 'POST'
URL: 'https://stream.twitter.com/1.1/statuses/filter.json?delimited=length'
如果我能得到 401 Unauthorized "Need Authorization" 响应的任何帮助,我们将不胜感激。
编辑:我也尝试过使用 Twython,我从 Twitter 得到了相同的回复。
谢谢
如果你不需要回推,也许你可以尝试使用 Twython OAuth2 连接 Twython Auth
或尝试使用此代码。
# Put the consumer keys
auth = tweepy.OAuthHandler("consumer_key", "consumer_secret")
# Redirect user to Twitter to authorize
redirect_user(auth.get_authorization_url())
# Get access token
auth.get_access_token("verifier_value")
# Construct the API instance
api = tweepy.API(auth)
#Create the stream
streamClass= StdOutListener()
stream= tweepy.Stream(auth = api.auth, listener=streamClass)
这应该有效。 也许您的机器人未在该帐户上获得授权,这可能是错误。但我不这么认为。
如果需要示例,请查看我的 BOT 的身份验证:
ED_Postcards BOT
(新版本来了漂亮的代码)
经过 2 周的故障排除,我终于解决了这个问题。对于 tweepy,您需要手动设置用于通过 Twitter 进行身份验证的 auth 对象的回调 url。
更正后转到 apps.twitter.com 并取消选中框 "Allow this application to to be used to Sign in with Twitter"。 Twitter API 的错误消息一点也不简洁。