Способ запрашивать как ленту новостей, так и стену, используя один запрос - PullRequest
1 голос
/ 29 января 2012

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

Первая попытка:

  • Запросить меня / дом и меня / каналв пакетном запросе.
  • Проблема: запрос me / home дает мне плохие результаты из-за ошибок в API API (показывая заблокированные элементы и, наоборот, не показывая некоторые элементы, которые должны быть показаны), поэтому я решил перейти на FQL, которыйкажется, справляется с этим гораздо лучше.

Вторая попытка:

  • Используйте один пакетный запрос для запроса: (1) me / feed напрямую.(2) fql.query для таблицы потоков с установленным для filter_key значением 'others'.
  • Проблема: необходимо также запрашивать имена пользователей, поскольку таблица потоков содержит только идентификаторы.

Третийпопытка:

  • Используйте пакетный запрос для запроса: (1) me / feed напрямую (2) fql.multiquery для таблицы потоков с параметром filter_key равным «others» и таблицей имен с «WHERE id IN (SELECT actor_id FROM #stream) ".
  • Проблема: ошибка.Он возвращает «Ошибка: пакетный параметр должен быть массивом JSON», хотя это массив json.

Четвертая попытка:

  • Использование fql.multiquery для получения потока новостей, стенной поток и имена.
  • Проблема: я понятия не имею, как получить представление, подобное мне / каналу, используя FQL.Лучшее, что я мог получить, это список всех моих собственных сообщений, но он не показывает фотографии, на которых отмечен пользователь (так что, я думаю, больше ничего не хватает).

Оцените любые подсказки.

1 Ответ

1 голос
/ 30 января 2012

Из-за того, что FQL не выполняет объединения в стиле SQL, получение информации из нескольких таблиц в одном запросе в настоящее время невозможно.

  1. Используйте FQL для таблицы потоков, чтобы получить список сообщений, которые вы хотите отобразить, не забудьте захватить source_id.Source_id может быть идентификатором пользователя, идентификатором страницы, идентификатором события, идентификатором группы, а также может быть больше объектов, но не забывайте, что у меня в голове.(Вы также можете сделать аналогичное кэширование actor_id, target_id и viewer_id)
  2. Кэширование source_ids в кеше данных в стиле словаря, где source_id - PK.
  3. Цикл через кеш для теху вас нет информации о
  4. Попробуйте получить информацию из пользовательской таблицы на основе идентификатора, затем рядом с таблицей страниц, затем с таблицей событий и таблицей групп, пока не найдете нужный идентификатор.Сохраните информацию в своем кэше
  5. Для отображения объедините элементы таблицы потоков с информацией source_id.
...