getting latest posts from fb using graph api

2019-08-02 16:55发布

问题:

I want to get latest posts from fb and need to display on my site(magento). I have registerd one app in facebook and try to getting posts by using the url but it's giving empty array

    require_once(Mage::getBaseDir('lib') . '/facebook/facebook.php');
    $facebook = new Facebook(array(
              'appId'  => 'xxxxxxxxxxxx',
              'secret' => 'xxxxxxxxxxxxxxxxxxxx',
            ));
    $fbid = "xxxxxxxxxx";
    $secret = "xxxxxxxxxxxxxxxxxxxxxxx";
    $token = 'https://graph.facebook.com/oauth/access_token?client_id='.$fbid.'&client_secret='.$secret.'&grant_type=client_credentials';
    $token = file_get_contents($token);
    $posts = json_decode(
                file_get_contents('https://graph.facebook.com/' . $fbid . '/feed?
                    access_token=' . $token
                )
            );

But it's giving an empty array and could you help me to get the results and why it is giving empty?

回答1:

In order to read the Feed from Facebook, you must log the user into Facebook and ask the user for the read_stream permission.

The feed will be the logged-in user's feed and may not be appropriate for all users of your website, unless each user of your website sees their own feed...



回答2:

If you have a valid access token, you can get feed from any public page using php graph api.You can call api using file_get_contents or curl method.

function curl_get_file_contents($URL) {
$ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $URL);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0); 
 curl_setopt($ch, CURLOPT_TIMEOUT, 400);
 $contents = curl_exec($ch);
 $err  = curl_getinfo($ch,CURLINFO_HTTP_CODE);
 curl_close($ch);
$contents=json_decode($contents,true);
if ($contents) return $contents;
else return FALSE;
}

$access_token = 'your accesstoken';
$url = " https://graph.facebook.com/$page_id/feed?access_token=$access_token";
$posts = curl_get_file_contents($url);

Now $posts will have all the recents posts from the page and you can use foreach to get each post.



回答3:

  1. Create App Developer Facebook Page.

Live Access token you can get via graph. Then code exmaple:

<ul>
<?php

$page_name = '{PAGE_NAME}'; // Example: http://facebook.com/{PAGE_NAME}
$page_id = '{PAGE_ID}'; // can get form Facebook page settings
$app_id = '{APP_ID}'; // can get form Developer Facebook Page
$app_secret = '{APP_SECRET}'; // can get form Developer Facebook Page
$limit = 5;

function load_face_posts($page_id, $page_name, $app_id, $app_secret, $limit, $message_len) {
    $access_token = "https://graph.facebook.com/oauth/access_token?client_id=$app_id&client_secret=$app_secret&grant_type=client_credentials";
    $access_token = file_get_contents($access_token); // returns 'accesstoken=APP_TOKEN|APP_SECRET'
    $access_token = str_replace('access_token=', '', $access_token);
    $limit = 5;
    $data  = file_get_contents("https://graph.facebook.com/$page_name/posts?limit=$limit&access_token=$access_token");
    $data = json_decode($data, true);
    $posts = $data[data];
    //echo sizeof($posts);

    for($i=0; $i<sizeof($posts); $i++) {
        //echo $posts[$i][id];
        $link_id = str_replace($page_id."_", '', $posts[$i][id]);
        $message = $posts[$i][message];

        echo ($i+1).". <a target='_blank' href='https://www.facebook.com/AqualinkMMC/posts/".$link_id."'>".$message."</a><br>";
    }
}

load_face_posts($page_id, $page_name, $app_id, $app_secret, $limit, $message_len);
?>
</ul>