在我的項目中,我在一個表中有很多事件ID。 我想循環這些ID並向Facebook發出請求,以獲取該特定ID的附加信息。如何使用Facebook的PHP SDK批量請求
現在我爲每個ID做不同的http請求。我想把它放在一個批處理中,這樣我就可以傳遞所有的id,並在一個http請求中接收所有這些事件的所有附加信息。
我使用Facebook PHP SDK
在我的項目中,我在一個表中有很多事件ID。 我想循環這些ID並向Facebook發出請求,以獲取該特定ID的附加信息。如何使用Facebook的PHP SDK批量請求
現在我爲每個ID做不同的http請求。我想把它放在一個批處理中,這樣我就可以傳遞所有的id,並在一個http請求中接收所有這些事件的所有附加信息。
我使用Facebook PHP SDK
可以批量這些請求是這樣的:
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
這裏是批量大小的限制在批次中執行兩個請求的粗略示例...
$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();
}
我已簽出的文件,但它不是爲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爲您提供幫助! –
然後你只需要調用'$ this-> facebook-> api($ id,'GET',array('fields'=>'name,venue,privacy,location,start_time,end_time,description','ids' =>'[用戶ID的CSV列表]));' – Igy
Thx!會試試這個! –