我正在使用facepy facebook api从我的Facebook帐户中获取邮件。我使用API让自己long live access token
有效期为60天。现在,在我查询消息之前的程序中,我想检查我的令牌是否已经过期,如果过期则取一个新令牌。
我正在使用get_extended_access_token,它还返回一个描述令牌到期时间的日期时间实例。现在我认为使用get_extended_access_token
并不是一种有效的方式,因为每次我要查询新消息时它都会获取access token
(我知道它和以前一样)但我认为这是开销。
所以,我用Google搜索,发现我们也可以使用
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中实现这一点。
还要评论哪个更好的方法来检查其是否已过期?{/ 1}}
答案 0 :(得分:6)
现在,如果您查看expires_at字段,它显示1354445684秒,当我尝试将其转换为天/月时,它给了我15676天
然后你已经完成(或理解)了错误。
expires_at
1354445684是一个Unix时间戳,等于Sun, 02 Dec 2012 10:54:44 +0000
翻译成人类可读的日期。
这距离issued_at
时间戳1349261684,a.k.a。Wed, 03 Oct 2012 10:54:44 +0000
答案 1 :(得分:2)
我建议您依靠异常来验证令牌是否有效,而不是单独请求保证令牌:
from facepy import GraphAPI
graph = GraphAPI(token)
try:
graph.get('me')
except GraphAPI.OAuthError:
# Redirect the user to renew his or her token