{I/am使用以下两种方法访问我的邮箱:
第一种方法:
我使用了access token
我从Graph Explorer
facebook页面获得的access token
,并使用以下代码:
from facepy import GraphAPI
graph = GraphAPI(token)
print graph.get('/me')
#Rest of the code
上面的代码运行得很好,我可以使用FQL Query
检索我的所有消息。当我的认证令牌expired
过了一段时间后,问题就出现了。在
所以,在谷歌上搜索了一下之后,我转到了第二种方法:
现在,我所做的就是创建一个facebook应用程序给它read_mailbox
权限并获得id and key
,然后使用facepy的get_application_access_token方法来获取令牌。在
取回我使用的令牌后:
^{pr2}$现在,您可以看到在使用应用程序令牌时生成的错误(commented #
)。在
我相信我得到的错误是因为facebook需要user_token
,而我提供给它的是app_token
。在
那么,是否可以使用app_令牌访问用户数据?如果没有,那么如何发出一个extended token
来访问用户数据。在
更新:
所以,我听从了@Johannes的建议,尝试了一下,但是遇到了错误:
from facepy.utils import get_extended_access_token
from facepy import GraphAPI
token = "My user access token got from https://developers.facebook.com/tools/explorer"
long_lived_access_token = get_extended_access_token(token)
graph = GraphAPI(long_lived_access_token)
graph.get('/me')
现在,当我运行上面的代码时
TypeError: get_extended_access_token() takes exactly 3 arguments (1 given)
所以,我把它改成long_lived_access_token = get_extended_access_token(token, None, None)
,然后得到
facepy.exceptions.OAuthError
所以,我再次将它改为long_lived_access_token = get_extended_access_token(token, app_id, key)
,得到了与上面相同的异常/错误。在
所以,这是一个错误还是我做错了什么。在
附言:我从git安装了最新版本。在
您的假设是正确的,您不能使用应用程序访问令牌来读取用户的邮箱,但是您得到的错误源于您根本没有用访问令牌初始化
graph
。在尽管如此,您在询问如何扩展用户的访问令牌时是正确的。正如您已经发现的,Facepy-HEAD(即将成为0.9版)有一个函数
get_extended_access_token
,它接受现有的短期用户访问令牌并扩展它。扩展用户访问令牌的有效期为2个月,您可以在Facebook的文档removal of offline_access permission上阅读更多关于它们的信息。在如果要立即使用
get_extended_access_token
,则必须从git安装facepy:一旦安装了正确版本的Facepy,就可以扩展现有的短期用户访问令牌,并用它初始化
^{pr2}$GraphAPI
的新实例:API没有什么问题,你只是没有以正确的方式解释结果。 如果您试图打印
long_lived_access_token = get_extended_access_token(token)
的结果,它不会直接给您一个long_lived_access_token
,而是为您提供一个包含以下内容的元组:您可以通过查看utils.py的源代码来验证这一点。如果您查看
get_extended_access_token
方法,它将返回token, expires_at
。在根据facebook docs要获得
^{pr2}$extended
访问令牌,必须在下面的端点发出请求答案是}表示60天。在
token=mytoken&expire=5184000
,其中{因此,您的最终代码如下所示:
相关问题 更多 >
编程相关推荐