Facebook FQL - Как я выбираю сообщения, которые я сделал к стене друга

У меня есть настольное приложение Facebook с некоторыми проверочными пользователями все предоставлявшие stream_read и офлайновые права доступа. Я могу легко получить сообщения к потоку каждых пользователей и профилю. Что я не могу сделать, легко, получают сообщения, которые пользователь сделал к одной из стен их друга.

На самом деле это раньше работало с довольно сложным мультизапросом, но прекратило работать теперь или работает только периодически...

Кто-либо хочет совместно использовать их метод, если Вы существуете, или обсудите то, чем ограничения там могли бы быть к этому типу сложных запросов?

6
задан simianarmy 21 March 2010 в 00:02
поделиться

2 ответа

Я попробовал и наткнулся на ту же проблему, что, как мне кажется, но, возможно, я смогу объяснить ее немного подробнее.

Возможно, стоит опубликовать что-нибудь на вики-странице Facebook и посмотреть, сможет ли кто-нибудь из Facebook пролить свет на это, если я здесь чего-то не упускаю.

Куда бы я ни поместил USER_ID , нужно указать пользователя, которого вы хотите искать, и F_ID1 , F_ID2 друзья ...

] FQL # 1: должен работать (теоретически)

  • Сначала получите список всех ваших друзей
  • , затем используйте этот список в предложении IN следующего запроса
  • отфильтруйте только сообщения, сделанные с помощью USER_ID
  • , убедитесь, что сообщение не NULL

FQL # 1: сообщения не возвращаются

{
"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 "

}

FQL # 2: сообщения возвращаются

Странно однако, если вы ограничитесь одним другом (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 "

}

FQL # 3: Сообщения не возвращаются

Тем не менее, попробуйте добавить еще одного друга в 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 "

}
2
ответ дан 17 December 2019 в 20:30
поделиться

ИСПРАВЛЕНИЕ: После дальнейшего тестирования я обнаружил, что это решение НЕ РАБОТАЕТ на 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 возвращать более свежие запросы или нет - кто-нибудь хочет подтвердить?

0
ответ дан 17 December 2019 в 20:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: