我已经开始阅读
Displaying Facebook posts to non-Facebook users这是有用的,但我不敢相信这是很难从Facebook获得公共饲料.
我想要一个Feed的页面是公开的,您不需要登录即可.
假设我需要一个access_token来获取这些信息,尝试访问URL而不会导致OAuth错误.
所以流程应该是这样的(大量,过于复杂):
>使用用户验证(如果用户不在Facebook上怎么办?)
>一些复杂的OAuth废话 – 只是为了阅读Feed,我甚至不想要一个像按钮或贴在墙上的功能
>使用用户的access_token,使用PHP请求获取正确的URL
渲染饲料
假设用户不在Facebook上,你做什么,使用通用应用程序获取Feed?
>使用我的通用应用程序的ID和秘密,将身份验证请求硬编码到Facebook
>一些复杂的OAuth废话
>使用应用程序的access_token,使用PHP请求获取正确的URL
渲染饲料
>哦,不,auth已经过期,重新认证并捕获这个新的access_token以供将来的请求使用.
这似乎真的很复杂,除了Facebook想知道一切正在发生的事情之外,没有任何理由,使用XPath更容易做一个cURL和从公共URL中删除内容.
对此的任何帮助将是巨大的.
谢谢,
可靠的人
编辑
显示此的编辑不是完全重复的.
我有一个access_token的工作,但现在它失败了,令牌已经过期,我不能再使用它从公共墙壁获取信息.
我试图使用其他帖子中提到的方法来延长此令牌的到期日期,但是这并没有起作用,而且到期日期还没有延长 – 我们现在在这里,使用无效的令牌,而不会再延续.
看来,必须批准OAuth请求的手动过程意味着无法以编程方式获取公共页面的Feed.
两年之后,您可以使用Facebook应用程序(使用PHP和Slim的示例)以编程方式执行此操作:
https://developers.facebook.com/apps/
$base_api="https://graph.facebook.com/";
$client_id="XXXXXX";
$app_secret="XXXXXX";
//get a profile Feed (can be from a page,user,event,group)
$app->get('/Feed/:profileid/since/:start_date',function ($profile_id,$start_date) {
$start_time=date('m/d/Y h:i:s',$start_date);
$request = new FacebookRequest(
getSession(),'GET','/'.$profile_id.'/Feed?since='.$start_time
);
$response = $request->execute();
$graphObject = $response->getGraphObject();
//do something with $graphObject
});
function getSession(){
$session = new FacebookSession(getAccesstoken());
return $session;
}
function getAccesstoken(){
global $base_api,$client_id,$app_secret;
$url=$base_api."oauth/access_token?client_id=".$client_id."&client_secret=".$app_secret."&grant_type=client_credentials";
$str = file_get_contents($url);
$token = str_replace ( "access_token=","",$str );
return $token;
}