У меня есть настольное приложение Facebook с некоторыми проверочными пользователями все предоставлявшие stream_read и офлайновые права доступа. Я могу легко получить сообщения к потоку каждых пользователей и профилю. Что я не могу сделать, легко, получают сообщения, которые пользователь сделал к одной из стен их друга.
На самом деле это раньше работало с довольно сложным мультизапросом, но прекратило работать теперь или работает только периодически...
Кто-либо хочет совместно использовать их метод, если Вы существуете, или обсудите то, чем ограничения там могли бы быть к этому типу сложных запросов?
Я попробовал и наткнулся на ту же проблему, что, как мне кажется, но, возможно, я смогу объяснить ее немного подробнее.
Возможно, стоит опубликовать что-нибудь на вики-странице Facebook и посмотреть, сможет ли кто-нибудь из Facebook пролить свет на это, если я здесь чего-то не упускаю.
Куда бы я ни поместил USER_ID , нужно указать пользователя, которого вы хотите искать, и F_ID1 , F_ID2 друзья ...
{
"friends":"SELECT uid2 FROM friend WHERE uid1= USER_ID ",
"postsonfriendswall":"SELECT source_id, actor_id, target_id, message FROM stream WHERE source_id IN (SELECT uid2 FROM #friends) AND message != '' AND actor_id = USER_ID "
}
Странно однако, если вы ограничитесь одним другом (F_ID1), вы получите обратно сообщения USER_ID, размещенные на стене их друзей!
{
"friends":"SELECT uid2 FROM friend WHERE uid1= USER_ID ",
"postsonfriendswall":"SELECT source_id, actor_id, target_id, message FROM stream WHERE source_id IN (SELECT uid2 FROM #friends WHERE uid2 = F_ID1) AND message != '' AND actor_id = USER_ID "
}
Тем не менее, попробуйте добавить еще одного друга в IN F_ID1 & F_ID2 ... снова нет результата ...
{
"friends":"SELECT uid2 FROM friend WHERE uid1= USER_ID ",
"postsonfriendswall":"SELECT source_id, actor_id, target_id, message FROM stream WHERE source_id IN (F_ID1,F_ID2) AND message != '' AND actor_id = USER_ID "
}
ИСПРАВЛЕНИЕ: После дальнейшего тестирования я обнаружил, что это решение НЕ РАБОТАЕТ на 100%. Оно будет работать. верните некоторые , но не все сообщения, которые вы разместили на других стенах - я не знаю, каков ограничивающий фактор - поэтому я считаю это открытым вопросом.
Частичное решение: Итак, это мультизапрос FQL, который генерирует сообщения на стене, которые пользователь размещает на стенах друзей:
{"query1":"SELECT post_id FROM stream WHERE source_id IN (SELECT target_id FROM connection WHERE source_id = USER_ID)",
"query2":"SELECT actor_id, post_id, target_id, message FROM stream WHERE (actor_id = USER_ID) AND (post_id IN (SELECT post_id FROM #query1))"}
Первый запрос выполняет вложенный выбор для всех "целей", принадлежащих пользователь (друзья и приложения?) и использует их в качестве значения source_id для потокового запроса.
Второй запрос использует post_id, возвращенный из 1-го запроса, чтобы снова запросить поток, на этот раз с атрибутомactor_id, установленным на идентификатор пользователя.
Я не знаю, помогут ли предложения ORDER или LIMIT возвращать более свежие запросы или нет - кто-нибудь хочет подтвердить?