我正在尝试连接到twitter stream 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"])
到目前为止,我已经尝试了以下内容:
以下是请求:
'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未经授权的“需要授权”回复,我们将不胜感激。
编辑:我也尝试过使用Twython,我从twitter上得到了相同的回复。
由于
答案 0 :(得分:0)
如果您不需要发回推文,也许可以尝试使用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
(带有漂亮代码的新版本)
答案 1 :(得分:0)
经过2周的故障排除后,我能够解决问题。对于tweepy,您需要手动设置用于通过twitter进行身份验证的auth对象的回调URL。
此修正后,请前往apps.twitter.com并取消选中“允许此应用程序用于使用Twitter登录”框。 Twitter API对于错误消息并不简洁。