2012-06-13 31 views
1

在我的項目中,我在一個表中有很多事件ID。 我想循環這些ID並向Facebook發出請求,以獲取該特定ID的附加信息。如何使用Facebook的PHP SDK批量請求

現在我爲每個ID做不同的http請求。我想把它放在一個批處理中,這樣我就可以傳遞所有的id,並在一個http請求中接收所有這些事件的所有附加信息。

我使用Facebook PHP SDK

回答

-3

可以批量這些請求是這樣的:

curl \ 
-F 'access_token=…' \ 
-F 'batch=[ \ 
     {"method": "GET", "relative_url": "me"}, \ 
     {"method": "GET", "relative_url": "me/friends?limit=50"} \ 
    ]'\ 
https://graph.facebook.com 

https://developers.facebook.com/docs/reference/api/batch/

還有就是50

+0

我已簽出的文件,但它不是爲PHP SDK。 這個例子是針對2個分開的查詢的。我想問這個查詢。 $這 - > facebook-> API( \t \t \t \t \t $ ID, 'GET', \t \t \t \t \t陣列( \t \t \t \t \t \t '字段'=>「名稱,地點,隱私, location,start_time,end_time,description')); 但是50個Id一次。不知道批處理請求是否可行。 Thx爲您提供幫助! –

+0

然後你只需要調用'$ this-> facebook-> api($ id,'GET',array('fields'=>'name,venue,privacy,location,start_time,end_time,description','ids' =>'[用戶ID的CSV列表]));' – Igy

+0

Thx!會試試這個! –

7

這裏是批量大小的限制在批次中執行兩個請求的粗略示例...

$batch = array(); 

$req = array(
    'method'  => 'GET', 
    'relative_url' => '/me' 
); 

$batch[] = json_encode($req); 

$req = array(
    'method'  => 'GET', 
    'relative_url' => '/me/albums' 
); 

$batch[] = json_encode($req); 

$params = array(
    'batch' => '[' . implode(',',$batch) . ']' 
); 
try { 
    $info = $facebook->api('/','POST',$params); 
} catch(FacebookApiException $e) { 
    error_log($e); 
    $info = null; 
} 
if(!empty($info)){ 
    if($info[0]['code'] == '200'){ 
     $user_profile = json_decode($info[0]['body']); 
    } 
    if($info[1]['code'] == '200'){ 
     $user_albums = json_decode($info[1]['body']); 
    } 
    echo "<pre>User Profile:\n"; 
    print_r($user_profile); 
    echo "\nAlbums\n"; 
    print_r($user_albums); 
    echo "<pre>"; 
} 

這是一個粗略的例子,但它應該提供做批處理的請求的基礎...

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

FacebookSession::setDefaultApplication('YOUR_APP_ID','YOUR_APP_SECRET'); 

// Use one of the helper classes to get a FacebookSession object. 
// FacebookRedirectLoginHelper 
// FacebookCanvasLoginHelper 
// FacebookJavaScriptLoginHelper 
// or create a FacebookSession with a valid access token: 
$session = new FacebookSession('access-token-here'); 

try { 

    $response = (new FacebookRequest($session, 'GET', '/me'))->execute(); 

    $params = [ 
    [ // call 0 - get current logged in user 
     "method" => "GET", 
     "relative_url" => "me" 
    ], 

    [ // call 1 - get current logged in user's friends 
     "method" => "GET", 
     "relative_url" => "me/friends" 
    ], 

    [ // call 3 - get current logged in user's likes 
     "method" => "GET", 
     "relative_url" => "me/likes" 
    ], 

    [// call 4 - get current logged in user's albums and photos 
     "method" => "GET", 
     "relative_url" => "method/fql.multiquery/?queries=" . json_encode([ 
     "albums" => urlencode("SELECT aid, object_id, type, name, visible, owner, cover_pid, cover_object_id, visible, photo_count, video_count FROM album WHERE owner=me()"), 
     "album_covers" => urlencode("SELECT src_big, src_small, images, aid FROM photo WHERE pid IN (SELECT cover_pid FROM #albums)"), 
     "photos" => urlencode("SELECT pid, object_id, owner, src_big, src_small, images, aid FROM photo WHERE aid IN (SELECT aid FROM #albums)") 
     ]) 
    ]; 


    $response = (new FacebookRequest($session, 'POST', '?batch='.json_encode($params)))->execute(); 

    $objects = $response->getGraphObject(); 

    foreach($objects->asArray() as $object){ 
    $body = json_decode($object->body, 1); 
    print_r($body); 
    echo "--------------\n"; 
    } 

} catch(FacebookRequestException $e) { 

    echo "Exception occured, code: " . $e->getCode(); 
    echo " with message: " . $e->getMessage(); 

}