0

我正在使用facepy facebook api 从我的 facebook 帐户中获取消息。我long live access token使用 API 的有效期为 60 天。现在,在我的程序中查询消息之前,我想检查我的令牌是否已过期,如果过期则获取一个新的。

我正在使用 get_extended_access_token,它还返回一个描述令牌何时过期的日期时间实例。现在我认为这不是一种有效的使用方式,get_extended_access_token因为每次我要查询新消息时,它也会获取access token(我知道它和以前一样)但我认为这是一个开销。

所以,我用谷歌搜索,发现我们也可以使用

https://graph.facebook.com/debug_token?input_token=INPUT_TOKEN&access_token=ACCESS_TOKEN

调试令牌

所以我提供了我的long live access token代替,INPUT_TOKEN and ACCESS_TOKEN它给了我一个 json 响应:

{
   "data": {
      "app_id": XXXXX,
      "is_valid": true,
      "application": "YYYYY",
      "user_id": ZZZZZZ,
      "issued_at": 1349261684,
      "expires_at": 1354445684,
      "scopes": [
         "read_mailbox"
      ]
   }
}

现在,如果您查看expires_at它显示的字段1354445684 seconds,当我尝试将其转换为天/月时,它给了我15676 days,当我使用它显示的调试选项在图形资源管理器中检查相同的标记时

expires_at: 1354445684(about 2 months)

现在,我不明白的是如何1354445684等效于2 months以及如何在 python 中实现这一点。

还评论哪个是检查令牌是否过期的更好方法API or using the facebook url

4

2 回答 2

7

现在,如果您查看 expires_at 字段,它显示 1354445684 秒,当我尝试将其转换为天/月时,它给了我 15676 天

然后你做错了(或理解)了一些错误。

expires_at1354445684 是一个 Unix 时间戳,等于Sun, 02 Dec 2012 10:54:44 +0000翻译成人类可读的日期。

这距离issued_at时间戳 1349261684 差不多两个月,又名Wed, 03 Oct 2012 10:54:44 +0000

于 2012-10-08T15:48:50.690 回答
2

我建议您依靠异常来验证令牌是否有效,而不是发出单独的请求来保证它:

from facepy import GraphAPI

graph = GraphAPI(token)

try:
    graph.get('me')
except GraphAPI.OAuthError:
    # Redirect the user to renew his or her token
于 2012-10-19T13:56:37.230 回答