我从事的一个项目将Facebook页面作为其数据源之一。它周期性地从它导入一些数据,不涉及GUI。然后我们使用一个网络应用程序来显示我们已经拥有的数据。

并非所有信息都是公开的。这意味着我必须访问一次数据,然后保存它。然而,我不知道这个过程,我还没有找到一个好的教程。我想我需要一个access_token,我怎么能从用户得到它,一步一步?用户是一个facebook页面的管理员,他是否必须添加一些我们的FB应用程序的页面?

编辑:感谢@phwd的提示。我做了一个教程,如何获得一个永久的页面访问令牌,即使offline_access不再存在。

编辑:我刚刚发现它的答案在这里:持久的FB访问令牌服务器拉FB页面信息


当前回答

按照Facebook扩展页面令牌文档中列出的说明,我能够获得一个不会过期的页面访问令牌。

我建议使用Graph API Explorer完成所有这些步骤,除非另有说明。

0. 创建Facebook应用

如果你已经有一个应用程序,跳到第一步。

进入我的应用程序。 点击“+添加新应用”。 建立一个网站应用程序。

你不需要改变它的权限之类的。你只需要一个应用程序,在你完成访问令牌之前不会消失。

1. 获取用户短期访问令牌

转到图形API资源管理器。 选择你想要获取访问令牌的应用程序(在“应用程序”下拉菜单中,而不是“我的应用程序”菜单中)。 点击“获取令牌”>“获取用户接入令牌”。 在弹出的“扩展权限”选项卡下,选中“manage_pages”。 点击“获取访问令牌”。 授予具有管理目标页面权限的Facebook帐户的访问权限。请注意,如果该用户失去访问权限,最终的、永不过期的访问令牌可能会停止工作。

出现在“访问令牌”字段中的令牌是您的短期访问令牌。

2. 生成长期访问令牌

按照Facebook文档中的这些说明,向

https://graph.facebook.com/v2.10/oauth/access_token?grant_type=fb_exchange_token&client_id= {app_id} client_secret = {app_secret} &fb_exchange_token = {short_lived_token}

输入应用程序的ID和secret以及在前一步中生成的短期令牌。

不能使用图形API资源管理器。由于某种原因,它在这个请求上卡住了。我认为这是因为响应不是JSON,而是一个查询字符串。因为它是一个GET请求,所以您可以直接在浏览器中访问URL。

响应应该是这样的:

{“access_token”:“ABC123”,“token_type”:“持票人”、“expires_in”:5183791}

“ABC123”将是您的长期访问令牌。您可以将其放入访问令牌调试器中进行验证。在“Expires”下面应该有类似“2个月”的内容。

3.获取用户ID

使用长期访问令牌,向

https://graph.facebook.com/v2.10/me?access_token= {long_lived_access_token}

id字段是您的帐户id。下一步将需要它。

4. 获取永久页面访问令牌

发出GET请求

https://graph.facebook.com/v2.10/ {account_id} /账户? access_token = {long_lived_access_token}

JSON响应应该有一个数据字段,下面是用户可以访问的项的数组。找到要从中获得永久访问令牌的页面的项。access_token字段应该有您的永久访问令牌。复制它并在访问令牌调试器中测试它。在“过期”下面应该显示“永不”。

其他回答

按照Facebook扩展页面令牌文档中列出的说明,我能够获得一个不会过期的页面访问令牌。

我建议使用Graph API Explorer完成所有这些步骤,除非另有说明。

0. 创建Facebook应用

如果你已经有一个应用程序,跳到第一步。

进入我的应用程序。 点击“+添加新应用”。 建立一个网站应用程序。

你不需要改变它的权限之类的。你只需要一个应用程序,在你完成访问令牌之前不会消失。

1. 获取用户短期访问令牌

转到图形API资源管理器。 选择你想要获取访问令牌的应用程序(在“应用程序”下拉菜单中,而不是“我的应用程序”菜单中)。 点击“获取令牌”>“获取用户接入令牌”。 在弹出的“扩展权限”选项卡下,选中“manage_pages”。 点击“获取访问令牌”。 授予具有管理目标页面权限的Facebook帐户的访问权限。请注意,如果该用户失去访问权限,最终的、永不过期的访问令牌可能会停止工作。

出现在“访问令牌”字段中的令牌是您的短期访问令牌。

2. 生成长期访问令牌

按照Facebook文档中的这些说明,向

https://graph.facebook.com/v2.10/oauth/access_token?grant_type=fb_exchange_token&client_id= {app_id} client_secret = {app_secret} &fb_exchange_token = {short_lived_token}

输入应用程序的ID和secret以及在前一步中生成的短期令牌。

不能使用图形API资源管理器。由于某种原因,它在这个请求上卡住了。我认为这是因为响应不是JSON,而是一个查询字符串。因为它是一个GET请求,所以您可以直接在浏览器中访问URL。

响应应该是这样的:

{“access_token”:“ABC123”,“token_type”:“持票人”、“expires_in”:5183791}

“ABC123”将是您的长期访问令牌。您可以将其放入访问令牌调试器中进行验证。在“Expires”下面应该有类似“2个月”的内容。

3.获取用户ID

使用长期访问令牌,向

https://graph.facebook.com/v2.10/me?access_token= {long_lived_access_token}

id字段是您的帐户id。下一步将需要它。

4. 获取永久页面访问令牌

发出GET请求

https://graph.facebook.com/v2.10/ {account_id} /账户? access_token = {long_lived_access_token}

JSON响应应该有一个数据字段,下面是用户可以访问的项的数组。找到要从中获得永久访问令牌的页面的项。access_token字段应该有您的永久访问令牌。复制它并在访问令牌调试器中测试它。在“过期”下面应该显示“永不”。

除了上面提到的方法,值得一提的是,对于服务器到服务器的应用程序,你也可以使用这种形式的永久访问令牌: app_id | app_secret 这种类型的访问令牌称为App令牌。它通常可用于调用Graph API并在应用程序后端查询公共节点。 这里提到:https://developers.facebook.com/docs/facebook-login/access-tokens

如果只请求页数据,则可以使用页访问令牌。您只需授权用户一次即可获得用户访问令牌;将有效期延长到两个月,然后请求该页的令牌。这在场景5中都有解释。请注意,获取的页面访问令牌仅在用户访问令牌有效期间有效。

另一个PHP答案使生活更简单。更新为Facebook Graph API 2.9。把它装满,装上。

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'usertoken'=>'',
    'appid'=>'',
    'appsecret'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/oauth/access_token?grant_type=fb_exchange_token&client_id={$args['appid']}&client_secret={$args['appsecret']}&fb_exchange_token={$args['usertoken']}")); // get long-lived token
    $longtoken=$r->access_token;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/me?access_token={$longtoken}")); // get user id
    $userid=$r->id;
    $r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$userid}?fields=access_token&access_token={$longtoken}")); // get permanent token
    if($r->id==$args['pageid']) $finaltoken=$r->access_token;
    return $finaltoken;
}
?>

附录(备选):

从图2.9开始,在调试了短访问令牌之后,只需单击访问令牌调试器工具底部的扩展访问令牌,就可以跳过获取长访问令牌的许多麻烦。掌握了pageid和longlivetoken的信息后,运行下面的php以获得永久访问令牌。

<?php
$args=[
/*-- Permanent access token generator for Facebook Graph API version 2.9 --*/
//Instructions: Fill Input Area below and then run this php file
/*-- INPUT AREA START --*/
    'longlivedtoken'=>'',
    'pageid'=>''
/*-- INPUT AREA END --*/
];
echo 'Permanent access token is: <input type="text" value="'.generate_token($args).'"></input>';
function generate_token($args){
$r=json_decode(file_get_contents("https://graph.facebook.com/v2.9/{$args['pageid']}?fields=access_token&access_token={$args['longlivedtoken']}"));
return $r->access_token;
}
?>

尽管第二个代码为您节省了很多麻烦,但我建议运行第一个php代码,除非您非常着急,因为它会交叉检查pageid和userid。如果您错误地选择了user令牌,则第二个代码将无法工作。

感谢dw1和Rob

除了在Vlasec回答中推荐的步骤,您还可以使用:

图形API资源管理器进行查询,例如/{pageId}?= access_token&access_token = THE_ACCESS_TOKEN_PROVIDED_BY_GRAPH_EXPLORER字段 访问令牌调试器以获取有关访问令牌的信息。