使用PHP SDK获取最新的Facebook页面帖子

时间:2015-01-24 09:31:34

标签: php facebook facebook-graph-api facebook-php-sdk fetch

以下代码位于名为facebook_posts.php的文件中,我从索引文件中调用它,如下所示:<?php require_once("http://www.example.com/design/php/facebook_posts.php"); ?>。但是,在放置此代码的地方,没有响应。因此,无论是成功还是捕获错误都不会返回错误(正如我所看到的)。我尝试过绝对网址,但这也没有用。 (我隐藏了api和页面信息。)显然,require_once(页脚和脚本)后面的内容没有被加载。包含SDK时似乎出现了问题。

我没有使用作曲家,是否需要require Facebook\个文件或use这些文件?从页面检索帖子需要哪些?

<?php
// Defining FB SDK with absolute paths
define('FACEBOOK_SDK_V4_SRC_DIR', 'http://example.com/design/Facebook/');
require 'http://example.com/design/php/autoload.php';

use Facebook\FacebookSession;
use Facebook\FacebookRequest;
use Facebook\GraphUser;
use Facebook\FacebookRequestException;

FacebookSession::setDefaultApplication('{my-app-id}','{my-app-secret}');

$session = new FacebookSession('{my-long-lived-access-token}');

// Get the GraphUser object for the current user:

try {
$request = new FacebookRequest(
  $session,
  'GET',
  '/{my-page-id}/feed'
);
$response = $request->execute();
$graphObject = $response->getGraphObject();

var_dump($graphObject);
echo graphObject;
echo "banana";

} catch (FacebookRequestException $e) {
  echo "API ERROR";
} catch (\Exception $e) {
  echo "other error";
}

?>

编辑:所以我只是required in所有FB文件,这似乎有效。但是,我不知道如何遍历/迭代返回的对象。即如何遍历不同的帖子(页面上的四个最新帖子)并用HTML回显它们。基础结构如下所示:

<time>{publish date}</time>
<p>{post message}</p>
<a href="{link to included url}">{title to included url}</a>

3 个答案:

答案 0 :(得分:21)

您需要使用长期存在的页面访问令牌。

  

页面访问令牌

     

这些访问令牌与用户访问类似   令牌,除了它们为读取,写入的API提供权限   或修改属于Facebook页面的数据。获取页面   您需要通过获取用户访问令牌来启动访问令牌   要求manage_pages权限。一旦您拥有用户访问权限   然后,您可以通过图谱API获取页面访问令牌。

正如@CBroe所说,你不应该在客户端代码中使用该访问令牌,因为它是秘密/私密的,你不希望任何人获得它。

因此,对于您想要做的事情,Javascript不是正确的选择。您将不得不使用一些服务器端代码,如PHP,Python或Ruby来获取帖子。如果清楚,可以通过以下方式创建它。


  1. 创建Facebook应用:

    • 将应用ID (1)和app secret (2)放在一边,
    • 在&#34; advanced&#34;设置,激活OAuth以避免The application has disabled OAuth client flow
  2. 您需要创建用户访问令牌。

    • 转到Graph API Explorer并选择刚刚创建的应用
    • 生成访问令牌:点击&#34;获取访问令牌&#34;并在&#34;扩展权限&#34;中勾选manage_pages标签。
  3. Get your short-lived page access token

    • 仍然在Graph API资源管理器中,查询me/accountsGET),
    • 找到您的网页并获取其访问令牌(3)
  4. Get your long-lived page access token

    • 在浏览器中,将https://graph.facebook.com/oauth/access_token?client_id=(1)&client_secret=(2)&grant_type=fb_exchange_token&fb_exchange_token=(3)粘贴到地址栏中
    • 用您的应用ID,您的应用密码和您的网页访问令牌替换(1)(2)(3)
    • 从结果中获取新的长期访问令牌:access_token=FAKECAALBygJ4juoBAJyb8Cbq9bvwPYQwIaX53fLTMAWZCmDan1netI30khjITZAqcw9uE0lRT4ayWGm2ZCS7s7aZCVhF3ei6m0fuy2AkTkwmzUiJI4NUOZAyZAzuL
    • 使用Access Token Debugger验证您的访问令牌永不过期

  5. 现在,您可以使用该新访问令牌来检索网页的帖子:

    $session = new FacebookSession('FAKECAALBygJ4juoBAJyb8Cbq9bvwPYQwIaX53fLTMAWZCmDan1netI30khjITZAqcw9uE0lRT4ayWGm2ZCS7s7aZCVhF3ei6m0fuy2AkTkwmzUiJI4NUOZAyZAzuL');
    
    try {
        $data = (new FacebookRequest(
            $session, 'GET', '/me/posts'
        ))->execute()->getGraphObject()->getPropertyAsArray("data");
    
        foreach ($data as $post){
            $postId = $post->getProperty('id');
            $postMessage = $post->getProperty('message');
            print "$postId - $postMessage <br />";
        }
    } catch (FacebookRequestException $e) {
        // The Graph API returned an error
    } catch (\Exception $e) {
        // Some other error occurred
    }
    

答案 1 :(得分:19)

我发现投票最多的解决方案太复杂,只能持续2个月。

对我来说,这是使用App with Graph API 2.5的最佳解决方案:

1.-创建一个应用程序。

2.-转到:https://developers.facebook.com/tools/explorer/

  • 在右上角选择新创建的应用。
  • 选择“获取应用令牌”

3.-复制此“{ACCESS-TOKEN}”(格式为:number | hash)

重要提示:(这不是app_id | app_secret !!!)

4.-使用CURL查询URL:

(5).-等效网址:

我把所有这些放在一个非常简单的要点中:

https://gist.github.com/biojazzard/740551af0455c528f8a9

答案 2 :(得分:0)

此处描述了从facebook Feed获取最新帖子所需的所有内容:http://piotrpasich.com/facebook-fanpage-feed/

在快捷方式中 - 使用您的粉丝页面Feed(请使用正确的ID替换{id})

https://facebook.com/feeds/page.php?format=atom10&id= {ID}

您可以使用以下代码下载Feed:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $rss_url);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)');
curl_setopt($curl, CURLOPT_REFERER, '');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
$raw_xml = curl_exec($curl); // execute the curl command