您是否可以使用Graph API获取公共Facebook页面的订阅源而无需要求用户允许?

xtk*_*ler 35 javascript facebook client-side facebook-graph-api oauth-2.0

我从未使用Facebook的Graph API或OAuth.我只是想使用Graph API获取公共Facebook页面的源,但它需要访问令牌.我不想麻烦用户登录并允许访问获取他们的令牌.Facebook应用程序访问令牌可用于获取公共提要,但我试图完全用Javascript完成此操作,因此我无法使用应用程序密钥来执行此操作.我在某处读到Facebook应用程序访问令牌永远不会过期或更改,除非我手动重置密码.这是真的?在Access Token中硬编码是否安全?如果没有,是否有某种方式我可以验证应用程序获取令牌而不必涉及用户?我可以使用某种类型的通用app令牌吗?

McN*_*Nab 78

如果你和我一样,你的客户不会想要一个标准的Facebook Likebox插件,他们会希望它们都采用自己的方式设计和定制.

你不需要整天花在官方文档上,想知道是否有任何一个适用于你这样简单的事情,这很容易.之所以会产生混淆,是因为您假设所有这些密钥和秘密ID都必须从Facebook页面获得许可或身份验证,而您需要从中提取 - 您不需要.您只需要一个有效的应用程序,您就可以获得任何公共页面的Feed.

在Facebook上设置您的应用程序,它将为您提供应用程序ID和API密钥.获取所需公共页面Feed的个人资料ID,这就是您所需要的.然后,您可以使用以下代码检索身份验证令牌,然后使用该代码将Feed数据作为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}");
Run Code Online (Sandbox Code Playgroud)

感谢编辑有人建议我认为这些代码来自这里(看起来很熟悉:))并且在那里的评论中有更多信息可能有所帮助.

然后你可以解析对象,这里有一些代码可以在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 />";
}
Run Code Online (Sandbox Code Playgroud)

要找出json对象中可用的内容,您可以在浏览器中输出url并将其复制/粘贴到这个有用的json可视化工具中;

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

  • 试图运行 - "https://graph.facebook.com/oauth/access_token?type=client_cred&client_id= <1234>&client_secret = <1qw2e3e>`获取响应`access_token = 123456 | 123456`然后运行`https:// graph.facebook.com/espn/feed?access_token = 123456 | 123456`并且获取"需要访问令牌......"错误.如果我在应用页面上启用了某些内容,我的错误是什么? (4认同)
  • 谢谢你,谢谢你,谢谢你!如果 Facebook API 文档像这样简单就好了! (2认同)
  • 我终于弄清楚我在做什么错。2件事情:1)我没有使用FB返回的完整`access_token`。2)我必须取出花括号。他们给了我一个“无效令牌”错误。 (2认同)
  • 看起来这不再适用于收紧权限 - 现有应用程序可能会继续工作,但新应用程序需要批准。 (2认同)

phw*_*hwd 6

除非我手动重置密码,否则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);
Run Code Online (Sandbox Code Playgroud)

然后遍历页面

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'];
}
Run Code Online (Sandbox Code Playgroud)

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


Hen*_*nar 0

如果您想在应用程序中使用页面提要(例如您自己的页面提要)以将其显示给其他人。只需使用您自己的access_token即可获取。
但!因为这不被认为是一个好的做法,您也可以使用页面或应用程序登录并使用他们的 access_token。

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