如何使用facebook php SDK进行批量请求

时间:2012-06-13 23:44:41

标签: php facebook facebook-graph-api batch-file

在我的项目中,我在一个表中有很多事件ID。 我想循环遍历这些id并向facebook请求该特定id的附加信息。

现在我为每个ID提出不同的http请求。我想把它放在一个批处理中,这样我就可以传递所有的id并在一个http请求中接收所有这些事件的所有附加信息。

我使用Facebook PHP sdk

3 个答案:

答案 0 :(得分:8)

以下是批量处理两个请求的粗略示例...

$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>";
}

这是一个粗略的例子,但它应该提供执行批量请求的基础知识......

答案 1 :(得分: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();

}   

答案 2 :(得分:-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。