Facebook图API返回的Paginate数据

时间:2015-09-23 17:49:47

标签: php facebook-graph-api pagination

我正在使用PHP SDK 5.0。我已经能够从我的FB页面中提取帖子并将其显示在我的网站with this code下方。我需要帮助来实现此代码返回的结果的分页。

session_start();
require_once __DIR__. '/Facebook/autoload.php';
$fb = new Facebook\Facebook([
    'app_id' => 'xxxxxxxxxxxx',
    'app_secret' => 'xxxxxxxxxxxx',
    'default_graph_version' => 'v2.4',
    'default_access_token' => 'xxxxxxxxxxxx',
]);
$request = $fb->request('GET','/500px/feed/', array('fields' => 'created_time,message', 'limit' => '3',));

try {
    $response = $fb->getClient()->sendRequest($request);
    $data_array = $response->getDecodedBody();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
    echo 'Graph returned an error: ' . $e->getMessage();
    exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
    echo 'Facebook SDK returned an error: ' . $e->getMessage();
    exit;
}

Facebook会返回包含每个Feed-result的下一个和上一个链接,如下例所示。我如何使用这些分页?或者有更好的选择。

[data] => Array
        (
        [0] => Array
             (
               [created_time] => 2015-09-23T17:00:53+0000
               [message] => some message pulled from the post
               [id] => 57284451149_10152992926641150
              )
        )

[paging] => Array
                (
         [previous] => https://graph.facebook.com/v2.4/57284451149/feed?fields=created_time,message&limit=1&since=1443027653&access_token=xxxxxxxxxxx&__paging_token=enc_xxxxxxxxxxxx&__previous=1
         [next] => https://graph.facebook.com/v2.4/57284451149/feed?fields=created_time,message&limit=1&access_token=xxxxxxxxxxx&until=1443027653&__paging_token=enc_xxxxxxxxxxxx
)

我还在学习PHP,在这一点上我不知道如何超越这个。理想情况下,每页将有三个结果,结果将显示在同一页面上。如果不是解决方案,我会非常感谢伪代码或有用的建议或路线图,这将有助于我自己做。

TEMP解决方案 - 我可能走错了轨道,但这是我作为临时解决方案所做的。看起来像facebook做了所有的工作,例如偏移等,并为我们提供了一个计算的网址,我们需要做的就是使用提供的网址。

//set your url parameters here       
    function fetchUrl($url){
               if(is_callable('curl_init')){
                    $ch = curl_init();
                    curl_setopt($ch, CURLOPT_URL, $url);
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_TIMEOUT, 20);
                    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                    $feedData = curl_exec($ch);
                    curl_close($ch);
                    }
                    return $feedData;
             }

                if(isset($_POST['nextLink'])){
                $url = $_POST['nextLink'];
                } elseif(isset($_POST['prevLink'])){
                $url = $_POST['prevLink'];
                } else {
                $url = 'https://graph.facebook.com/v2.4/'.$pageID.'/feed?fields='.$fields.'&limit='.$limit.'&access_token='.$accessToken;
                }

         $json_object = fetchUrl($url);
         $FBdata = json_decode($json_object, true);
         //parse the received data in your desired format
         //display data

//get the next link, construct and set a url
$nextLink = $FBdata['paging']['next'];
$prevLink = $FBdata['paging']['previous'];

//Your next and previous form here

我会使用http GET方法,但我不喜欢丑陋的长网址,因此我使用POST方法获取nextprevious网址。请注意,我使用cURL而不是PHP SDK。这是一个简化的示例,需要更多的工作。

我不是写这个作为答案,因为这只是一个解决方案,我仍然希望使用 PHP SDK 来做到这一点。我只是无法保持SDK生成的网址。有什么输入吗?

0 个答案:

没有答案