令牌无效或过期。通过Tweepy申请新令牌?

时间:2016-05-10 20:36:54

标签: python twitter tweepy

tweepy.error.TweepError: [{u'message': u'Invalid or expired token.', u'code': 89}]

令牌必须是硬编码的吗?我现在有OAuth和访问令牌硬编码,但令牌似乎每24小时到期一次。如何以编程方式更新令牌?我可以通过Tweepy获得新的令牌吗?

我的脚本的目标是在未经我许可的情况下每天过夜。我把它设置为cronjob。我不想做任何手动输入。

我只在一个帐户上使用API​​,我的帐户。所以我有用户名/密码等。

通常情况下,我通过点击"创建我的访问令牌来获取令牌,"然后当我几天后回来看时,令牌消失了,创建它的按钮又重新出现了。

enter image description here

再生并再使用一天后,再次发生了!屏幕截图:http://i.imgur.com/hhDqLnU.png

2 个答案:

答案 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'])