Get latest Facebook posts of page with PHP SDK

后端 未结 4 1608
傲寒
傲寒 2021-01-31 12:05

The following code is inside a file called facebook_posts.php which I call from my index file like so:

相关标签:
4条回答
  • 2021-01-31 12:48
    1. Create App Developer Facebook Page.

    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>
    
    0 讨论(0)
  • 2021-01-31 13:00

    all what you need to get latest posts from facebook feed is described here: http://piotrpasich.com/facebook-fanpage-feed/

    In shortcut - use your fanpage feed (please replace {id} by proper id)

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

    You can download the feed with this piece of code:

    $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
    
    0 讨论(0)
  • 2021-01-31 13:02

    You need to use a long-lived page access-token.

    Page Access Token

    These access tokens are similar to user access tokens, except that they provide permission to APIs that read, write or modify the data belonging to a Facebook Page. To obtain a page access token you need to start by obtaining a user access token and asking for the manage_pages permission. Once you have the user access token you then get the page access token via the Graph API.

    As @CBroe said, you should not use that access token in client-side code as it is secret/private and you don't want anyone to get it.

    So for what you want to do, Javascript is not the right choice. You will have to use some server-side code, like PHP, Python or Ruby to get the posts. If that is clear, here is how you can create it.


    1. Create a Facebook app:

      • keep the app id (1) and app secret (2) aside,
      • in the "advanced" settings, activate OAuth in order to avoid The application has disabled OAuth client flow.
    2. You need to create a user access token.

      • go on the Graph API Explorer and select the application you just created,
      • generate an access token: click "Get access token" and tick manage_pages in the "Extended Permissions" tab.
    3. Get your short-lived page access token.

      • still in the Graph API explorer, query me/accounts (GET),
      • find your page and get its access token (3).
    4. Get your long-lived page access token.

      • in your browser, paste https://graph.facebook.com/oauth/access_token?client_id=(1)&client_secret=(2)&grant_type=fb_exchange_token&fb_exchange_token=(3) in the address bar,
      • replace (1), (2) and (3) by your app id, your app secret and your page access token,
      • get your new long-lived access token from the result: access_token=FAKECAALBygJ4juoBAJyb8Cbq9bvwPYQwIaX53fLTMAWZCmDan1netI30khjITZAqcw9uE0lRT4ayWGm2ZCS7s7aZCVhF3ei6m0fuy2AkTkwmzUiJI4NUOZAyZAzuL,
      • use the Access Token Debugger to verify that your access token will never expire.

    Now you can use that new access token to retrieve the posts of your page:

    $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
    }
    
    0 讨论(0)
  • 2021-01-31 13:10

    I've found that the most voted solution is way too complicated and only lasts 2 months.

    For me, this is the best solution using an App with Graph API 2.5:

    1.- Create an App.

    2.- Go to: https://developers.facebook.com/tools/explorer/

    • Select your new created app on the right top.
    • Select "Get App Token"

    3.- Copy this "{ACCESS-TOKEN}" (is in the form: number|hash)

    IMPORTANT: (This are not app_id|app_secret!!!)

    4.- Query the URL with CURL:

    • https://graph.facebook.com/{PAGE-ID}/posts?access_token={ACCESS-TOKEN}

    (5).- Equivalent URL:

    • https://graph.facebook.com/{PAGE-ID}/feed?access_token={ACCESS-TOKEN}

    I've put all of this together in a very simple gist:

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

    0 讨论(0)
提交回复
热议问题