Способ запрашивать как новостную ленту, так и стену, используя один запрос

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

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

  • Запросите меня / дома и меня / кормить в пакетном запросе.
  • Проблема: запросы 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 ответ

Решение

Из-за того, что 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.
Другие вопросы по тегам