Способ запрашивать как новостную ленту, так и стену, используя один запрос
Я пытаюсь найти лучший способ сделать запрос как на новостную ленту, так и на стену, используя один запрос.
Первая попытка:
- Запросите меня / дома и меня / кормить в пакетном запросе.
- Проблема: запросы 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, получение информации из нескольких таблиц в одном запросе в настоящее время невозможно.
- Используйте FQL для таблицы потоков, чтобы получить список сообщений, которые вы хотите отобразить, не забудьте захватить source_id. Source_id может быть идентификатором пользователя, идентификатором страницы, идентификатором события, идентификатором группы, и там может быть больше объектов, но не забывайте, что у меня в голове. (Вы также можете сделать аналогичное кэширование actor_id, target_id и viewer_id)
- Кэшируйте source_ids в кэше данных в стиле словаря, где source_id - это PK.
- Цикл по кешу для тех, у кого нет информации
- Попробуйте получить информацию из пользовательской таблицы на основе идентификатора, затем рядом с таблицей страниц, затем с таблицей событий и таблицей групп, пока не сможете найти, к чему принадлежит этот идентификатор. Храните информацию в своем кеше
- Для отображения объедините элементы таблицы потоков с информацией source_id.