1

私のプロジェクトでは、1 つのテーブルに多くのイベント ID があります。これらの ID をループして、その特定の ID の追加情報を facebook にリクエストしたいと思います。

ここで、ID ごとに異なる http リクエストを作成します。これをバッチに入れて、すべての ID を渡し、これらすべてのイベントのすべての追加情報を 1 つの http リクエストで受け取ることができるようにしたいと思います。

Facebook PHP SDK を使用しています

4

3 に答える 3

8

これは、バッチで 2 つのリクエストを実行する大まかな例です ...

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

これは大まかな例ですが、バッチ リクエストを実行するための基本を提供する必要があります ...

于 2012-06-14T01:06:44.593 に答える
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();

}   
于 2015-07-06T13:31:50.367 に答える
-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 です。

于 2012-06-13T23:49:47.900 に答える