2011-11-21 19 views
15

हैलो मैं फेसबुक PHP एसडीके (v.3.1.1)फेसबुक php, आप परिणाम पेजिंग का उपयोग कैसे करते हैं?

का उपयोग कर रहा हूं, मुझे समझ में नहीं आता कि परिणाम पेजिंग यूआरएल का उपयोग कैसे करें।

मैं सभी अपने दोस्तों की एक सूची प्राप्त करना चाहते हैं, यहाँ मेरी कोड है

$friends = $fb->api('/me/friends'); 
/* 
$friend == Array 
(
    [data] => Array 
    (
     ... 
    ), 
    [paging] => Array 
    (
     [next] => https://graph.facebook.com/me/friends?method=GET&access_token=SOMETHING&limit=5000&offset=5000 
    ) 
*/ 
if (!empty($friends['paging']['next'])) 
{ 
    $friends2 = $fb->api($friends['paging']['next']); 
    //doesn't work 
} 

उत्तर

8

पेजिंग परिणाम है कि आप वास्तविक यूआरएल हैं पाने में मानों आप अगले प्राप्त करने के लिए अनुरोध करने की आवश्यकता परिणामों का समूह उदाहरण के लिए:

... 
{ 
     "name": "Adobe Flash", 
     "category": "Software", 
     "id": "14043570633", 
     "created_time": "2008-06-05T17:12:36+0000" 
    } 
    ], 
    "paging": { 
     "next" :https://graph.facebook.com/{USER_ID}/likes?format=json&limit=5000&offset=5000 
} 

यह "अगला" पेजिंग परिणाम है जब मैं अपने उपयोगकर्ता से संबंधित पृष्ठों के लिए पूछता हूं। अगर मैं इस यूआरएल का अनुरोध करता हूं तो यह मुझे 5000 की ऑफसेट के साथ कुल 5000 पसंद देगा (क्योंकि मैंने प्रारंभिक अनुरोध में पहले से ही 5000 पहले ही देखा है)। उम्मीद है कि यह चीजों को स्पष्ट करता है! सौभाग्य!

+2

और आप इसे कैसे क्वेरी हैं? $ facebook-> एपीआई ??? – max4ever

+1

कई तरीके हैं .. आप 'file_get_contents ($ paging_url) 'कर सकते हैं या मेरी राय में [file_get_contents()] (http://php.net/manual/en/function.file-get- content.php) सबसे आसान तरीका है ... – Lix

+1

आप फेसबुक-> एपीआई फ़ंक्शन का भी उपयोग कर सकते हैं और बस उन सीमाओं को जोड़ सकते हैं, कॉल करने के लिए पैरामीटर ऑफ़सेट करें - उदाहरण: '$ fb-> api ("/me/likes /? सीमा = 5000 और ऑफ़सेट = 5000 ");' – Lix

13

पिछले सभी प्रतिक्रियाएं मान्य हैं।

ध्यान दें कि मैं "पिछला" परिणाम नहीं मिलता:

यहाँ जिस तरह से मुझे क्या करना, ग्राफ़ एपीआई के साथ सभी "अगला" परिणाम प्राप्त करने के लिए है।

function FB_GetUserTaggedPhotos($user_id, $fields="source,id") { 
    $photos_data = array(); 
    $offset = 0; 
    $limit = 500; 

    $data = $GLOBALS["facebook"]->api("/$user_id/photos?limit=$limit&offset=$offset&fields=$fields",'GET'); 
    $photos_data = array_merge($photos_data, $data["data"]); 

    while(in_array("paging", $data) && array_key_exists("next", $data["paging"])) { 
     $offset += $limit; 
     $data = $GLOBALS["facebook"]->api("/$user_id/photos?limit=$limit&offset=$offset&fields=$fields",'GET'); 
     $photos_data = array_merge($photos_data, $data["data"]); 
    } 

    return $photos_data; 
} 

प्रति कॉल कम/अधिक डेटा प्राप्त करने के लिए आप जितनी चाहें $ सीमा का मूल्य बदल सकते हैं।

+1

यह कोड का एक अच्छा टुकड़ा है, फिर भी कृपया ध्यान दें कि '' ऑफसेट आधारित पेजिनेशन सभी एपीआई कॉल के लिए समर्थित नहीं है। लगातार परिणाम प्राप्त करने के लिए, हम आपको प्रतिक्रिया में वापस आने वाले पिछले/अगले लिंक का उपयोग करके पेजिंग करने की सलाह देते हैं। '' स्रोत: https://developers.facebook.com/docs/graph-api/using-graph-api/v2.2 – augusto

+0

इसे भी देखें http://stackoverflow.com/questions/9576211/facebook-graph -पीआई-लूप-थ्रू-पेजिंग –

+0

इस 'in_array (' पेजिंग ', $ डेटा) के मेरे परीक्षण में, सत्य वापस नहीं आया, लेकिन' array_key_exists ('पेजिंग', $ डेटा) 'किया। –

5

मैं F2000 की पेजिंग से निपटने का तरीका अनुकूलित और मिल गया कोड निम्नलिखित:

// Initialize the Facebook PHP SDK object: 
$config = array(
    'appId'  => '123456789', 
    'secret'  => 'be8024db1579deadbeefbcbe587c0bd8', 
    'fileUpload' => false); 
$fbApi = new Facebook($config); 

// Retrieve list of user's friends: 
$offset = 0;  // Initial offset 
$limit = 10;  // Maximum number of records per chunk 
$friends = array(); // Result array for friend records accumulation 

$chunk = $fbApi->api(
    "/me/friends", 'GET', 
    array(
     'fields' => 'id,name,gender', 
     'offset' => $offset, 
     'limit' => $limit)); 

while ($chunk['data']) 
{ 
    $friends = array_merge($friends, $chunk['data']); 
    $offset += $limit; 

    $chunk = $fbApi->api(
     "/me/friends", 'GET', 
     array(
      'fields' => 'id,name,gender', 
      'offset' => $offset, 
      'limit' => $limit)); 
} 

// The $friends array contains all user's friend records at this point. 

कोड काम करने के लिए लगता है। वैकल्पिक रूप से, बेहतर विश्वसनीयता के लिए, यह अस्थायी कनेक्शन समस्याओं को संभालने का प्रयास कर सकता है लेकिन मैंने कोड स्पष्टता के लिए इसे छोड़ दिया।

मैं फेसबुक पीएचपी एसडीके 3.1.1

+1

मुझे पता है कि यह दो साल का है, लेकिन मैं बस जोड़ना चाहता था: यदि आप थोड़ी देर के बजाय लूप के दौरान करते हैं, और '$ friends = ...' और '$ ऑफसेट + = ...' आपके एपीआई कॉल के बाद लाइनें, आप उस पहले एपीआई कॉल को काट सकते हैं। – musicnothing

2

पृष्ठांकन यूआरएल फेसबुक से लौटे का उपयोग कर रहा है अपने स्वयं के पीएचपी SDK के साथ संगत नहीं हैं।

आप एपीआई द्वारा पेजिंग यूआरएल से आवश्यक जानकारी निकाल सकते हैं और इसे एसडीके एपीआई में भेज सकते हैं।

ऐसी जानकारी निकालने के लिए PHP parse_url फ़ंक्शन या कुछ स्ट्रिंग मैनिप्लेशंस का उपयोग करें।

नमूना कोड मेरी मित्र सूची का भाग प्राप्त करने के लिए (parse_url का प्रयोग करके):

$ret = $facebook->api('/me/friends?limit=25'); 
var_dump($ret); 
$next = parse_url($ret['paging']['next']); 
$ret = $facebook->api($next['path'] . '?' . $next['query']); 
var_dump($ret); 
0

फेसबुक सीमा के द्वारा क्वेरी और ऑफसेट पृष्ठांकन अच्छा काम कर रहा था नहीं सभी परिणाम लौटाते समय तो मैं एक पुनरावर्ती बनाया एपीआई द्वारा प्रदान की गई पेजिनेशन ['अगला'] फ़ील्ड का उपयोग करके कार्य करें।

समारोह:

function chunk_results($arr,$query) 
{ 
    global $facebook; 
    $chunk = $facebook->api($query); 
    if($chunk['data']==null) 
    { 
     return $arr; 
    } 
    else 
    { 
     foreach($chunk['data'] as $dato) 
      $arr['data'][] = $dato; 

     return chunk_results($arr,substr($chunk['paging']['next'],26)); 

    } 
} 

और तुम एक खाली सरणी और क्वेरी आप निम्नलिखित उदाहरण की तरह, प्राप्त करना चाहते हैं के साथ प्रारंभ कर सकते हैं:

chunk_results(array(),"/457568434275922/posts?fields=message") 

आशा है कि यह मदद करता है!

पीडी: मेरा फेसबुक वस्तु कहा जाता है $ फेसबुक

1

आप वास्तव में अगले यूआरएल उपयोग नहीं कर सकते सीधे, फेसबुक php एसडीके इसका समर्थन नहीं करता है, लेकिन आप php मानक कार्यों इस्तेमाल कर सकते हैं अपनी आवश्यकता का डेटा निकालने के लिए। मैं फेसबुक खोज API के लिए इसका इस्तेमाल किया, इस उदाहरण

$result = $fb->api('/search', 'GET', $paramsArray); $url = parse_url($result['paging']['next']); parse_str($url['query'], $nextParams); $nextResult = $fb->api('/search', 'GET', $nextParams);

संबंधित मुद्दे