我正在使用PHP Facebook SDK和图形API来获取所有用户朋友的所有喜欢。问题是需要花费很长时间才能执行。
目前我正在接收所有用户的朋友,然后单独循环浏览每个朋友并收集所有他们的喜欢。
为了加快速度,我想批量处理每个50“/ user_friend_fbid / likes”请求(但也要对这些请求进行分页)。
即。这样:
foreach (facebookUserFriends($fb_id) as $friend) { //custom func returns friends
facebookUserLikes($friend['id'],$fb_location); //custom func returns all user likes
}
...对:
$i = 0;
foreach (facebookUserFriends($fb_id) as $friend) {
$queries[$i]['method'] = 'GET';
$queries[$i]['relative_url'] = $friend['id'].'/likes';
if ($i==49) {
batchProcess($queries); //custom func returns all likes (but doesn't do paging)
$i = 0;
}
$i++;
}
TL; DR如何在批量查询中执行分页?
答案 0 :(得分:1)
那些东西可能会很快变得难看; - )
使用FQL多查询,并在一段时间内保存双方:https://developers.facebook.com/docs/reference/rest/fql.multiquery/
另见: Facebook New PHP SDK For Graph API - Multi Query
对于您的情况,单个FQL就足够了:
SELECT object_id, user_id FROM like WHERE user_id IN (SELECT uid2 FROM friend WHERE uid1=me())
例如,我为自己的朋友找到了喜欢的东西;用其他东西代替me()
。
答案 1 :(得分:0)
我会采取广度优先的方法。将前50个用户的第一批请求排队,并在返回批处理时保存数据,然后从返回的50个分页URL中创建一个新批处理。