在我的项目中,我在一张表中有很多事件 ID。我想遍历这些 id 并向 facebook 请求该特定 id 的附加信息。
现在我为每个 ID 发出不同的 http 请求。我想把它放在一个批次中,这样我就可以传递所有的 id 并在一个 http 请求中接收所有这些事件的所有附加信息。
我使用 Facebook PHP sdk
在我的项目中,我在一张表中有很多事件 ID。我想遍历这些 id 并向 facebook 请求该特定 id 的附加信息。
现在我为每个 ID 发出不同的 http 请求。我想把它放在一个批次中,这样我就可以传递所有的 id 并在一个 http 请求中接收所有这些事件的所有附加信息。
我使用 Facebook PHP sdk
这是一个批量执行两个请求的粗略示例...
$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>";
}
这是一个粗略的例子,但它应该提供执行批处理请求的基础知识......
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();
}
您可以像这样批量处理这些请求:
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。