【问题标题】:Invalid or expired token. Request new token via Tweepy?无效或过期的令牌。通过 Tweepy 请求新令牌?
【发布时间】:2016-09-06 00:31:00
【问题描述】:
tweepy.error.TweepError: [{u'message': u'Invalid or expired token.', u'code': 89}]

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

我的脚本的目标是在未经我允许的情况下每天通宵运行。我将其设置为 cronjob。我不想做任何手动输入。

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

通常,我通过单击“创建我的访问令牌”获取令牌,然后当我几天后再次查看时,令牌已消失,创建它的按钮再次出现。

重新生成并使用了一天后,又发生了!截图:http://i.imgur.com/hhDqLnU.png

【问题讨论】:

  • Twitter 在他们的 OAuth 常见问题解答中声明他们不会使身份验证令牌过期。
  • @KlausD。我知道,这不奇怪吗?令牌在使用一两天后消失。它已经对我做了 3 次了。我不相信他们说的是实话。无论如何我该如何处理这个错误?我不明白他们的陈述在随机停止工作时如何是真的?
  • 如何获取token?
  • @KlausD。我单击apps.twitter.com/app/12312345/keys 处的按钮,我还刚刚在 OP 中添加了一个屏幕截图

标签: python twitter tweepy


【解决方案1】:

不确定您的应用的目标是什么,但要回答您的一些问题 - 疑虑:

令牌必须硬编码吗?

不,根据您正在编码的应用程序的性质,您可以在通过 webform 或 GUI 中的文本字段执行程序时请求此数据,或将其包含在另一个文件中并加密或导入它所在的文件并使用它...

我现在有硬编码的 OAuth 和访问令牌,但是令牌 似乎每 24 小时过期一次。我可以做些什么来更新令牌 以编程方式?

您不能获取 API 密钥和消费者秘密,这必须手动完成。此信息应该是永久的,基于https://dev.twitter.com/oauth/overview

访问令牌是另一回事,您显然可以使用 API 请求一个: https://dev.twitter.com/oauth/reference/post/oauth/access_token

POST oauth/request_token 允许消费者应用程序获取 用于请求用户授权的 OAuth 请求令牌。这种方法 满足 OAuth 1.0 身份验证流程的第 6.1 节。它是 强烈建议您对所有 OAuth 授权步骤使用 HTTPS。 使用说明:oauth_nonce 只接受 ASCII 值

资源网址 https://api.twitter.com/oauth/request_token

关于访问令牌过期:

访问令牌的有效期是多久?我们目前没有使访问权限过期 令牌。如果用户明确拒绝,您的访问令牌将无效 您的应用程序从他们的设置中,或者如果 Twitter 管理员暂停 你的申请。如果您的申请被暂停,将会有一个 在您的申请页面上注明它已被暂停。作为 每个推特:

如果我的访问令牌失效了怎么办?你应该 计划用户的访问令牌可能随时失效,而您 如果确实如此,则需要为该用户重新授权。 确保您优雅地处理这种情况对于 优质的用户体验。

根据推特文档https://dev.twitter.com/oauth/application-only

API 请求包含无效的不记名令牌 使用不正确或已撤销的不记名令牌发出 API 请求将导致:

HTTP/1.1 401 未经授权 内容类型:应用程序/json;字符集=utf-8 内容长度:61 ...

{"errors":[{"message":"Invalid or expired token","code":89}]}

也许这需要在推特方面解决?我建议直接联系他们https://dev.twitter.com/solutions/customer-service

【讨论】:

  • 所以API访问需要用户每24小时输入一次? via webform, or textfield in a GUI。我注意到您说了一些关于加密和导入文件的内容,这可能意味着我不需要用户输入?
  • 这可以在这里介绍:stackoverflow.com/questions/7014953/… 也许您可以描述您正在编写什么样的应用程序以供将来参考。不,api 访问不需要用户每 24 小时输入一次。再次,取决于您的需求
  • 另外,如果你能提供你想要达到的目标的代码示例,以及你是如何使用 tweepy 得到错误的,那将会很有帮助
  • 我正在尝试关注和取消关注人
  • 很高兴知道 =) ...再次,如果您的令牌不时被撤销,您应该向 twitters 客服举旗,这不正常,我有我的一年现在,对于一个应用程序,并且我的还没有被撤销或过期
【解决方案2】:

您可以使用以下代码获取您的访问令牌。我使用 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'])

【讨论】:

  • 这需要用户手动输入,但这是一个午夜运行的 cronjob。
  • 第一次需要手动输入
猜你喜欢
  • 1970-01-01
  • 2018-02-14
  • 2017-09-24
  • 2020-05-24
  • 2016-05-24
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 2013-02-24
相关资源
最近更新 更多