2012-04-20 3 views
0

Я использую PHP Facebook SDK и графический API, чтобы получить все понравившиеся друзья. Проблема заключается в том, что требуется довольно много времени для выполнения.Графический 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, как я выполнить пейджинг в пакетном запросе?

ответ

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() с чем-то еще.

+0

Хм, это не забавный язык. Я разработал способ получения понравившихся пользователей и друзей пользователя, но не всех, если друзья нравятся ... –

+0

обновил мой ответ с помощью примера. Запрос FQL –

+0

Это похоже на работу, но возвращает только «MUSICIAN/BAND»: ВЫБРАТЬ имя, тип ИЗ страницы ГДЕ PAGE_ID В (SELECT PAGE_ID оТ page_fan ГДЕ UID В (ВЫБОР UID2 от друга ГДЕ UID1 = я())) - то фильтрация по типу = "местного бизнеса" возвращает 4 результата, это не все. Я читал, что FQL не возвращает все. –

0

Я бы взял подход в ширину. Очередь в первый 50 пользователей 1-й пакетный запрос, и когда пакет возвращается, сохраните данные, а затем создайте новую партию из 50 возвращаемых URL-адресов поискового вызова.