Facebook:如何以编程方式检索访问令牌?
我需要在我自己的Facebook页面上发布一条消息;我需要以编程的方式(在我的例子中是使用Python)完成这项工作。我使用以下代码(在Python中)完成了这一部分: 已正确返回FB页面上生成帖子的ID:Facebook:如何以编程方式检索访问令牌?,facebook,facebook-graph-api,Facebook,Facebook Graph Api,我需要在我自己的Facebook页面上发布一条消息;我需要以编程的方式(在我的例子中是使用Python)完成这项工作。我使用以下代码(在Python中)完成了这一部分: 已正确返回FB页面上生成帖子的ID: In [11]: response.readlines() Out[11]: ['{"id":"135386143198208_461964357207050"}'] 问题: 为了生成access\u令牌并发出上述API请求,我必须手动执行详细说明的三个步骤 但实际上,这种手动过程是不可接
In [11]: response.readlines()
Out[11]: ['{"id":"135386143198208_461964357207050"}']
问题:
为了生成access\u令牌
并发出上述API请求,我必须手动执行详细说明的三个步骤
但实际上,这种手动过程是不可接受的,因为我需要从cron作业运行此任务。因此,我需要将其自动化,因为Facebook中的access\u token
是临时的。即,每次运行此脚本时,我都需要获取访问令牌。怎么做
您可以在回答中随意使用任何脚本工具(curl、JavaScript、Java、PHP),只要您传达了所涉及的步骤。请注意,我需要使用任何服务器端语言(Python/Ruby/PHP)来执行此操作。您无法通过编程方式检索短期令牌。它违背了用户交互的目的 Facebook故意这样做是为了确保用户能够完全手动控制他们安装的应用程序 一旦用户授予初始访问权限,您就可以在两个月内自动执行该过程(如果用户通过更改密码等方式使令牌无效,则可以提前两个月执行) 通过对
https://graph.facebook.com/oauth/access_token?
grant_type=fb_exchange_token&
client_id=APP_ID&
client_secret=APP_SECRET&
fb_exchange_token=SHORT_LIVED_ACCESS_TOKEN
这两个月结束后,必须由用户重新授予对应用程序的访问权限,并提供一个新的短期令牌,然后您可以使用上述代码重新扩展该令牌。如果您扩展(用户)访问令牌,则您可以请求一个实际上根本不会过期的(页面)访问令牌
请参阅以下文档的“扩展页面访问令牌”部分:要以编程方式为普通用户获取facebook令牌,您可能对此感兴趣:,这是一个python脚本,用于在提供电子邮件/密码时自动检索令牌
MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; U; en-gb; KFTHWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.16 Safari/535.19"
FB_AUTH = "https://www.facebook.com/v2.6/dialog/oauth?redirect_uri=fb464891386855067%3A%2F%2Fauthorize%2F&display=touch&state=%7B%22challenge%22%3A%22IUUkEUqIGud332lfu%252BMJhxL4Wlc%253D%22%2C%220_auth_logger_id%22%3A%2230F06532-A1B9-4B10-BB28-B29956C71AB1%22%2C%22com.facebook.sdk_client_state%22%3Atrue%2C%223_method%22%3A%22sfvc_auth%22%7D&scope=user_birthday%2Cuser_photos%2Cuser_education_history%2Cemail%2Cuser_relationship_details%2Cuser_friends%2Cuser_work_history%2Cuser_likes&response_type=token%2Csigned_request&default_audience=friends&return_scopes=true&auth_type=rerequest&client_id=464891386855067&ret=login&sdk=ios&logger_id=30F06532-A1B9-4B10-BB28-B29956C71AB1&ext=1470840777&hash=AeZqkIcf-NEW6vBd"
def get_access_token(email, password):
s = robobrowser.RoboBrowser(user_agent=MOBILE_USER_AGENT, parser="lxml")
s.open(FB_AUTH)
##submit login form##
f = s.get_form()
f["pass"] = password
f["email"] = email
s.submit_form(f)
##click the 'ok' button on the dialog informing you that you have already authenticated with the Tinder app##
f = s.get_form()
s.submit_form(f, submit=f.submit_fields['__CONFIRM__'])
##get access token from the html response##
access_token = re.search(r"access_token=([\w\d]+)", s.response.content.decode()).groups()[0]
#print s.response.content.decode()
return access_token
确保安装了lxml
、请求
和robobrowser
,因为这些都是先决条件。请求
和机器人浏览器
都可以通过运行
pip安装机器人浏览器
和
pip安装请求
lxml“有点”棘手,因为它必须被编译(以获得最新版本)。遵循这一点:祝福编写这段代码的灵魂。不是我,而是在某处找到的。工作顺利。使用您的电子邮件和密码调用此功能
MOBILE_USER_AGENT = "Mozilla/5.0 (Linux; U; en-gb; KFTHWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.16 Safari/535.19"
FB_AUTH = "https://www.facebook.com/v2.6/dialog/oauth?redirect_uri=fb464891386855067%3A%2F%2Fauthorize%2F&display=touch&state=%7B%22challenge%22%3A%22IUUkEUqIGud332lfu%252BMJhxL4Wlc%253D%22%2C%220_auth_logger_id%22%3A%2230F06532-A1B9-4B10-BB28-B29956C71AB1%22%2C%22com.facebook.sdk_client_state%22%3Atrue%2C%223_method%22%3A%22sfvc_auth%22%7D&scope=user_birthday%2Cuser_photos%2Cuser_education_history%2Cemail%2Cuser_relationship_details%2Cuser_friends%2Cuser_work_history%2Cuser_likes&response_type=token%2Csigned_request&default_audience=friends&return_scopes=true&auth_type=rerequest&client_id=464891386855067&ret=login&sdk=ios&logger_id=30F06532-A1B9-4B10-BB28-B29956C71AB1&ext=1470840777&hash=AeZqkIcf-NEW6vBd"
def get_access_token(email, password):
s = robobrowser.RoboBrowser(user_agent=MOBILE_USER_AGENT, parser="lxml")
s.open(FB_AUTH)
##submit login form##
f = s.get_form()
f["pass"] = password
f["email"] = email
s.submit_form(f)
##click the 'ok' button on the dialog informing you that you have already authenticated with the Tinder app##
f = s.get_form()
s.submit_form(f, submit=f.submit_fields['__CONFIRM__'])
##get access token from the html response##
access_token = re.search(r"access_token=([\w\d]+)", s.response.content.decode()).groups()[0]
#print s.response.content.decode()
return access_token
投票失败的原因是什么??谢谢;)您不能绕过Facebook访问令牌的手动用户身份验证。它是有目的的。@phwd并且必须至少每两个月对手动
访问令牌进行一次手动身份验证。。。我说的对吗?如果您实现了扩展用户访问令牌方案,那么是的。@phwd它是短期访问令牌还是长期访问令牌重要吗?确实如此!谢谢这甚至不需要通过编程来完成,因为我可以只做一次,而且不会过期。正确吗?什么APP\u ID
和APP\u SECRET
应该传递到该URL?注册Facebook应用程序时,您将获得应用程序ID和密码。(创建一个后,它将显示在页面顶部)