您是否可以使用Graph API获取公共Facebook页面的提要,而不要求用户允许?

我从来没有使用过Facebook的Graph API或OAuth。 我只是试图使用Graph API获取公共Facebook页面的提要,但它需要一个访问令牌。 我不想麻烦用户login,并允许访问获得他们的令牌。 一个Facebook应用程序访问令牌可以用来获取公共提要,但我正在尝试完全使用Javascript,所以我不能使用应用程序的秘密这样做。 我读了一个Facebook应用程序访问令牌永远不会过期或更改,除非我手动重置密钥。 这是真的? 访问令牌硬编码是否安全? 如果没有,有什么办法可以validation应用程序来获取令牌,而不必涉及用户? 是否有某种types的通用应用令牌可以使用?

如果你像我这样的东西,你的客户不会想要一个标准的Facebook的Likebox插件,他们会希望它的风格和定制自己的方式。

你不需要花一整天的时间去阅读官方文档,想知道它是否适用于你这样简单的事情,这很容易。 混淆的出现是因为你认为用所有这些密钥和秘密ID你必须从Facebook页面获得许可或authentication,你想从中提取饲料 – 你不知道。 所有你需要的是一个有效的应用程序,你可以得到任何公共页面的饲料。

在Facebook上设置你的应用程序,它会给你一个应用程序ID和一个API密钥。 获取您想要的公共页面供稿的configuration文件ID,这就是您所需要的。 然后,您可以使用以下代码来检索身份validation令牌,然后使用它作为JSON对象返回馈送数据。

<?php function fetchUrl($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 20); // You may need to add the line below // curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); $feedData = curl_exec($ch); curl_close($ch); return $feedData; } $profile_id = "the_profile_id_of_the_page_you_want"; //App Info, needed for Auth $app_id = "your_app_id_in_here"; $app_secret = "your_app_secret_in_here"; //Retrieve auth token $authToken = fetchUrl("https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id={$app_id}&client_secret={$app_secret}"); $json_object = fetchUrl("https://graph.facebook.com/{$profile_id}/feed?{$authToken}"); 

由于编辑有人build议我认为这个代码来自这里 (无论如何看起来很熟悉:)),并在那里有更多的信息可能有帮助。

然后你可以parsing这个对象,这里有一些代码是基于这个线程在PHP中完成的;

处理PHP JSON对象中的数据

 $feedarray = json_decode($json_object); foreach ( $feedarray->data as $feed_data ) { echo "<h2>{$feed_data->name}</h2><br />"; echo "{$feed_data->message}<br /><br />"; } 

为了findjson对象中可用的东西,可以在浏览器中输出url,并将其复制/粘贴到这个有用的json可视化工具中;

http://chris.photobooks.com/json/default.htm

Facebook应用访问令牌不会过期或更改,除非我手动重置密钥

这是正确的。

应用令牌不会过期,除非App Secret被重置。 应用访问令牌对于每个应用都是唯一的。

由于公共提要采取任何有效的访问令牌,可以使用应用程序令牌。

https://developers.facebook.com/tools/access_token ,你不需要stream量。 然后你可以硬编码。当你重置密码的时候,这个方法是无效的。

 $access_token = '1111111111|2Cha_1-n5' $graph_url = "https://graph.facebook.com/Boo/posts?access_token=" . $access_token; $page_posts = json_decode(file_get_contents($graph_url), true); 

然后遍历页面

 foreach($page_posts['data'] as $post){ $post_link = $post['actions'][0]['link']; $page_id = $post['from']['id']; $page_name = $post['from']['name']; $message = ($post['message']) ? $post['message'] : " "; $name = ($post['name']) ? $post['name'] : " "; $story = ($post['story']) ? $post['story'] : " "; $post_time = $post['updated_time']; } 

资料来源: http : //philippeharewood.com/facebook/how-to-get-facebook-access-tokens-in-php-for-public-posts-the-basic-sauce/

为了响应@Psyked和@James_David_Low的消息,build议不要使用FQL,因为已弃用。

“… Facebook上有两个低级别的HTTP API用于访问图表:FQL和Legacy REST API,这些API包含类似和重叠的function,但不推荐使用。

新function通常只在Graph API中可用。 为了确保您的应用程序能够适应未来,您应该在应用程序中使用Graph API。

接受的答案不提供检索profileId / pageId的dynamic方法,甚至不能解释如何检索它。 看看我的回答/问题 。 从我的经验来看,接受的答案在要求app-idapp-secret的大括号方面也是错误的。 当我把它们包括进来的时候,我得到了一个错误。

这并没有比这更简单。

如果您想在应用中使用页面Feed(如您自己的页面Feed),以便将其展示给其他人。 只需使用你自己的access_token就可以了。
但! 因为它不被认为是一个好的做法,你也可以使用页面或应用程序login并使用他们的access_token。

有关更多信息,请阅读有关身份validation的官方文档

我想为了做到这一点,你必须使用FQL而不是简单的graphicsAPI。 这就是我正在做的(用你的页面的IDreplacePAGE_ID ,保留引号):

 SELECT post_id, created_time, type, message, attachment FROM stream WHERE source_id = 'PAGE_ID' AND actor_id = source_id 

https://developers.facebook.com/docs/reference/fql/stream/