我从未使用过 Facebook 的 Graph API 或 OAuth。我只是想使用 Graph API 获取公共 Facebook 页面的提要,但它需要访问令牌。我不想麻烦用户登录并允许访问以获取他们的令牌。Facebook 应用访问令牌可用于获取公共提要,但我正在尝试完全使用 Javascript 执行此操作,因此我无法使用应用机密来执行此操作。我在某处读到 Facebook 应用程序访问令牌不会过期或更改,除非我手动重置密码。这是真的?仅在访问令牌中进行硬编码是否安全?如果没有,是否有某种方法可以验证应用程序以获取令牌而无需涉及用户?我可以使用某种类型的通用应用程序令牌吗?
您能否在不征得用户允许的情况下使用 Graph API 获取公共 Facebook 页面的提要?
如果您像我一样,您的客户不会想要一个标准的 Facebook 点赞插件,他们会希望它以自己的方式设计和定制。
你不需要花一整天的时间去浏览官方文档,想知道它是否适用于你这样简单的事情,这很容易。之所以会出现混淆,是因为您假设使用所有这些密钥和秘密 ID,您必须从要从中提取提要的 Facebook 页面获得许可或身份验证 - 而事实并非如此。您所需要的只是一个有效的应用程序,您可以获取任何公共页面的提要。
在 Facebook 中设置您的应用程序,它会给您一个应用程序 ID 和一个 API 密钥。获取您想要的公共页面提要的配置文件 ID,这就是您所需要的。然后,您可以使用以下代码检索身份验证令牌,然后使用该代码将提要数据作为 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}");
感谢有人建议我进行编辑,我认为这段代码来自这里(反正看起来很熟悉 :) )并且那里的评论中有更多信息可能会有所帮助。
然后你可以解析这个对象,这里有一些代码可以基于这个线程在 PHP 中完成;
$feedarray = json_decode($json_object);
foreach ( $feedarray->data as $feed_data )
{
echo "<h2>{$feed_data->name}</h2><br />";
echo "{$feed_data->message}<br /><br />";
}
要找出 json 对象中可用的内容,您可以在浏览器中输出 url 并将其复制/粘贴到这个有用的 json 可视化工具中;
除非我手动重置密码,否则 Facebook 应用访问令牌永远不会过期或更改
没错。
除非重置 App Secret,否则 App 令牌不会过期。应用访问令牌对每个应用都是唯一的。
由于公共提要采用任何有效的访问令牌,因此可以使用应用程序令牌。
转到https://developers.facebook.com/tools/access_token,您不需要流程。然后你可以硬编码它。在你重置秘密的那一刻,这个方法是无效的。
$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 的消息,不推荐使用FQL,因为已被弃用。
“... Facebook 也使用两个低级 HTTP API 来访问图形:FQL 和 Legacy REST API。这些 API 包含相似和重叠的功能,但已弃用。”
新功能通常仅在Graph API 中可用。为了让您的应用面向未来,您应该尽可能在您的应用中使用 Graph API。
接受的答案没有提供检索 profileId/pageId 的动态方法,甚至没有解释如何检索它。查看我的回答/问题。根据我的经验,接受的答案在要求app-id
和周围的花括号方面也是错误的app-secret
。当我包含这些时,我遇到了一个错误,并且解决了它们。
没有比这更简单的了。