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"])

到目前为止,我已经尝试了以下方法:

  1. 正在生成新的消费者密钥、消费者秘密、访问令牌和访问令牌秘密。我使用了 4 组不同的键,这些键以前是有效的。
  2. 从 apps.twitter.com 创建了一个全新的应用程序。填写回调 url 因为一些用户反映 401 "Authorization Required" 与 twitter 应用程序页面中缺少回调 URL 字段有关。
  3. 将我的时钟与本地服务器和生产服务器上的 ntp 服务器同步。我的时钟没有关闭。
  4. 我的应用程序有正确的权限,我在配置后收到了访问令牌和密码。

请求如下:

'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 的错误消息一点也不简洁。