Javascript FQL: фильтрация по «create_time», после нескольких вызовов (в основном 1) результаты не возвращаются - PullRequest
2 голосов
/ 07 марта 2012

Я выполняю следующий FQL-запрос, используя javascript api:

FB.api({
    method: 'fql.multiquery',
    queries: {
        'query1': 'SELECT source_id, actor_id, target_id, message, attachment, permalink, description, type, created_time FROM stream WHERE source_id IN (SELECT target_id FROM connection WHERE source_id=me() AND is_following=1) AND is_hidden = 0 AND type = 80 AND strpos(attachment.href, "youtu") >= 0 AND created_time < ' + unix_time,
        'query2': 'SELECT uid, name, profile_url, pic_square FROM user WHERE uid IN (SELECT actor_id FROM #query1)'
    }
}, 
function(response) { 
    console.log(response); 
};

Предполагается, что все видео YouTube будут возвращены в текущем фиде пользователей и разрешены повторные запросы, указав unix_time (при первом запуске это, по сути, NOW(), в противном случае это самое старое время статуса); что он делает, глючит:

  • без установки LIMIT (по запросу1): после ~ 3 запросов возвращаются пустые результаты
  • LIMIT 100 или более (по запросу1): результаты возвращаются, но последующие результаты пусты
  • при created_time < NOW() возвращаются результаты (по нескольким запросам); в противном случае проблема сохраняется (created_time < время получения самого старого статуса)

Ошибки не возвращаются. У меня есть права * read_stream *. Я попытался найти связанную ошибку, но нашел только те, что FQL не возвращает все статусы.

1 Ответ

2 голосов
/ 07 марта 2012

API результаты в лучшем случае нечеткие.Основываясь на своем четырехлетнем опыте работы с API Facebook, я сделал собственные выводы о том, как это происходит.Вот мои основные пункты:

  • Плохое кеширование данных, вызывающее устаревание кеша, его отсутствие и т. Д.
  • Различные веб-серверы в кластере не синхронизированы с другими
  • Различные серверы баз данных в кластере не успевают за синхронизацией
  • Алгоритм получения результатов по общему признанию "ненадежен" для каждого блога: http://developers.facebook.com/blog/post/478/ Вы запрашиваете 10 и возвращаете 7 из-за предварительной фильтрации выполненонеправильно.

Я бы посоветовал кэшировать данные из API на вашей стороне и продолжать объединение новых данных из Facebook, чтобы ваш пользовательский интерфейс мог представлять более согласованные данные.

...