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

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

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

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


当前回答

我找到了这个答案,它指的是这个工具,它真的很有用。

我希望当你读到这篇文章时,这个答案仍然有效。

其他回答

截至2020年4月,我之前的永久页面令牌开始在1到12小时内到期。我开始使用具有manage_pages权限的用户令牌来实现前面的目标(轮询页面的事件)。这些代币似乎是永久的。

我根据这篇文章中找到的信息创建了一个python脚本,托管在github.com/k-funk/facebook_permanent_token上,以跟踪需要哪些参数,以及获取永久令牌的方法是有效的。

以下是我的解决方案,只使用图形API资源管理器和访问令牌调试器:

Graph API Explorer: Select your App from the top right dropdown menu Select "Get User Access Token" from dropdown (right of access token field) and select needed permissions Copy user access token Access Token Debugger: Paste copied token and press "Debug" Press "Extend Access Token" and copy the generated long-lived user access token Graph API Explorer: Paste copied token into the "Access Token" field Make a GET request with "PAGE_ID?fields=access_token" Find the permanent page access token in the response (node "access_token") (Optional) Access Token Debugger: Paste the permanent token and press "Debug" "Expires" should be "Never"

(API版本2.9-2.11,3.0-3.1测试)

另一个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

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

我尝试了这些步骤: https://developers.facebook.com/docs/marketing-api/access#graph-api-explorer

获取永久页面访问令牌

进入图形API资源管理器 在应用程序中选择你的应用程序 将长寿命访问令牌粘贴到access token中 在“访问令牌”旁边,选择要为其设置访问令牌的页面。访问令牌显示为一个新字符串。 单击i查看此访问令牌的属性 再次点击“打开访问令牌工具”按钮,打开“访问令牌调试器”工具,检查属性

一个提示,它只适用于我的网页语言是英语。