tweepy.error.TweepError: [{u'message': u'Invalid or expired token.', u'code': 89}]
令牌必须是硬编码的吗?我现在有OAuth和访问令牌硬编码,但令牌似乎每24小时到期一次。如何以编程方式更新令牌?我可以通过Tweepy获得新的令牌吗?
我的脚本的目标是在未经我许可的情况下每天过夜。我把它设置为cronjob。我不想做任何手动输入。
我只在一个帐户上使用API,我的帐户。所以我有用户名/密码等。
通常情况下,我通过点击"创建我的访问令牌来获取令牌,"然后当我几天后回来看时,令牌消失了,创建它的按钮又重新出现了。
再生并再使用一天后,再次发生了!屏幕截图:http://i.imgur.com/hhDqLnU.png
答案 0 :(得分:2)
不确定您应用的目标是什么,但要回答您的一些问题 -
令牌必须是硬编码的吗?
不,根据您编码的应用程序的性质,您可以在通过webform执行程序时请求此数据,或者在GUI中将文本字段包含在另一个文件中并对其进行加密或导入其所在的文件并使用它...
我现在有OAuth和访问令牌硬编码,但令牌 似乎每24小时到期一次。我该怎么做才能更新令牌 编程?
您无法获得API密钥和消费者密钥,这必须手动完成。根据{{3}}
,此信息应为永久性信息访问令牌是另一个故事,您可以使用API显然请求一个: https://dev.twitter.com/oauth/overview
POST oauth / request_token允许Consumer应用程序获取 OAuth请求令牌以请求用户授权。这种方法 履行OAuth 1.0身份验证流程的第6.1节。它是 强烈建议您对所有OAuth授权步骤使用HTTPS。 使用备注:oauth_nonce
仅接受ASCII值
资源网址 https://dev.twitter.com/oauth/reference/post/oauth/access_token
关于访问令牌到期:
访问令牌持续多长时间?我们目前无法访问 令牌。如果用户明确拒绝,您的访问令牌将无效 您的应用程序从他们的设置或Twitter管理员暂停 你的申请。如果您的申请被暂停,将会有一个 在您的应用程序页面上注明它已被暂停。如 每推特:
如果我的访问令牌变得无效,我该怎么办?你应该 计划用户的访问令牌可能随时变得无效而您 在这种情况下,将需要为该用户重新授权。 确保你优雅地处理这种情况对于a来说是必不可少的 优质的用户体验。
根据twitters文档https://api.twitter.com/oauth/request_token
API请求包含无效的承载令牌 使用不正确或已撤销的承载令牌发出API请求将导致:
HTTP / 1.1 401未经授权 Content-Type:application / json;字符集= utf-8的 内容长度:61 ...
{&#34;错误&#34;:[{&#34;消息&#34;:&#34;无效或过期的令牌&#34;,&#34;代码&#34;:89}]} < / p>
也许这需要在twitters方面解决?我建议直接与他们联系https://dev.twitter.com/oauth/application-only
答案 1 :(得分:0)
您可以使用以下代码获取访问令牌。我使用 configparser 来存储我的配置。一旦你有了令牌,它就不会过期。
if not config['APP']['AUTH_SECRET'] or not config['APP']['AUTH_TOKEN']:
try:
redirect_url = auth.get_authorization_url()
print redirect_url
except tweepy.TweepError:
print 'Error! Failed to get request token.'
# Example w/o callback (desktop)
# You even can start browser here
verifier = raw_input('Go to URL above, authorize and enter the code:')
try:
auth.get_access_token(verifier)
except tweepy.TweepError:
print 'Error! Failed to get access token.'
config['APP']['AUTH_SECRET'] = auth.access_token_secret
config['APP']['AUTH_TOKEN'] = auth.access_token
with open(CONFIG_FILE,'w') as configfile:
config.write(configfile)
else:
auth.set_access_token(config['APP']['AUTH_TOKEN'], config['APP']['AUTH_SECRET'])