Фейсбук лимит потока FQL? - PullRequest
       9

Фейсбук лимит потока FQL?

16 голосов
/ 31 октября 2010

Я хочу получить полную историю моей стены. Но я, кажется, достиг предела где-то в июне.

Я делаю несколько звонков, как это:

SELECT created_time,message FROM stream WHERE source_id=MY_USER_ID LIMIT 50

SELECT created_time,message FROM stream WHERE source_id=MY_USER_ID LIMIT 51,100

и так далее ...

Но я всегда оказываюсь на одном и том же последнем (первом) посте на моей стене Через facebook.com я могу вернуться гораздо дольше, так что, очевидно, у Facebook есть данные.

Почему я не получаю старые сообщения? Есть ли другой способ очистить мою историю?

Ответы [ 9 ]

12 голосов
/ 06 ноября 2010

С http://developers.facebook.com/docs/reference/fql/stream:

Таблица потоков ограничена последними 30 днями или 50 сообщениями, в зависимости от того, что больше

9 голосов
/ 05 ноября 2010

Я испытываю то же самое. Я вообще этого не понимаю, но похоже, что смещение не может быть больше, чем предел * 1,5

Теоретически, это означает, что постоянное увеличение предела для соответствия смещению исправит это, но я не смог проверить это (я не уверен, являются ли проблемы, которые я вижу, другими ошибками в моем коде если есть другие ограничения, я не понимаю о получении потока).

Кто-нибудь может объяснить, что я вижу и чего мне не хватает?

Вы можете воспроизвести мои результаты, перейдя в консоль тестирования FQL:

http://developers.facebook.com/docs/reference/rest/fql.query

вставка в этом запросе:

SELECT post_id, created_time, message, likes, comments, attachment, permalink, source_id, actor_id 
FROM stream 
WHERE filter_key IN 
(
      SELECT filter_key 
      FROM stream_filter 
      WHERE uid=me() AND type='newsfeed'
) 
AND is_hidden = 0 limit 100 offset 150

Когда вы нажмете «Метод тестирования», вы увидите один из 2 результатов, которые я получаю:

  1. Результаты возвращаются: [{post_id: "926 ... (что я ожидал)
  2. Возвращается пустой [] (чего я не ожидал)

Вероятно, вам придется экспериментировать, изменяя значение «смещения», пока вы не найдете точное место, где оно ломается. Только сейчас я обнаружил, что это ломается для меня в 155 и 156.

Попробуйте изменить и лимит, и смещение, и вы увидите, что пустые результаты не появляются в определенном месте в потоке. Вот несколько примеров результатов, которые я видел:

  • "... ограничение 50 смещение 100" разрывы, возвращая пустой []
  • "... предел 100 смещение 50" работает, возвращая ожидаемые результаты
  • "... ограничение 50 смещение 74" работает
  • "... ограничение 50 смещение 75" перерывы
  • "... предел 20 смещение 29" работает
  • "... ограничение 20 смещение 30" перерывы

Кроме того, что я вижу отношение "предел = смещение" * 1,5, я действительно не понимаю, что здесь происходит.

3 голосов
/ 04 октября 2012

Не знаю почему, но когда я использую filter_key = 'others', LIMIT xx работает.

Вот мой fql запрос

SELECT message, attachment, message_tags FROM stream WHERE type = 'xx' AND source_id = xxxx AND is_hidden = 0 AND filter_key = 'others' LIMIT 5

и теперь я получаю ровно 5 сообщений ... когда я использую LIMIT 7, я получаю 7 и так далее.

3 голосов
/ 06 июня 2012

Пропустить FQL и перейти прямо к графику. Я пробовал FQL, и он был глючным, когда доходил до пределов и получал указанные диапазоны дат. Вот адрес графика. Разместите на своей странице facebook_id и access_token:

https://graph.facebook.com/FACEBOOK_ID/posts?access_token=ACCESS_TOKEN

Тогда, если вы хотите получить свою историю, установите диапазон дат, используя since, until и limit:

https://graph.facebook.com/FACEBOOK_ID/posts?access_token=ACCESS_TOKEN&since=START_DATE&until=END_DATE&limit=1000

Эти даты начала и окончания указаны в Unix-времени, и я использовал лимит, потому что если бы я этого не сделал, он дал бы мне только 25 за раз. Наконец, если вы хотите получить информацию для своих сообщений, вам нужно перейти к каждому отдельному сообщению и получить информацию для этого сообщения:

https://graph.facebook.com/POST_ID/insights?access_token=ACCESS_TOKEN

1 голос
/ 06 апреля 2012

Как сказал @Subcreation, что-то не так с FQL в потоке с LIMIT и OFFSET, и более высокие соотношения LIMIT / OFFSET, похоже, работают лучше.

Я создал проблему на этом Facebook в http://developers.facebook.com/bugs/303076713093995. Я предлагаю вам подписаться на него и указать, что вы можете воспроизвести его, чтобы повысить его приоритетность.

В сообщении об ошибке я описываю, как простой поток FQL возвращает очень противоречивые значения ответов на основе своего LIMIT / OFFSET. Например:

433 - LIMIT 500 OFFSET 0
333 - LIMIT 500 OFFSET 100
100 - LIMIT 100 OFFSET 0
0 - LIMIT 100 OFFSET 100
113 - LIMIT 200 OFFSET 100
193 - LIMIT 200 OFFSET 20
0 голосов
/ 21 декабря 2013

У меня есть похожая проблема: я пытаюсь загрузить старые посты с общедоступной страницы, добавляю фильтр 'AND create_time

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

Я предлагаю вам отфильтровать по созданному времени и изменить его вручную, когда вы перестанете получать результаты.

0 голосов
/ 22 сентября 2013

Вы можете указать create_time для вашего запроса в Facebook. Поле create_time основано на времени Unix. Вы можете конвертировать его с помощью такого конвертера http://www.onlineconversion.com/unix_time.htm, или использовать программные методы в зависимости от вашего языка.

Шаблон на основе вашего запроса

SELECT created_time,message FROM stream WHERE source_id=MY_USER_ID and created_time>BEGIN_OF_RANGE and created_time>END_OF_RANGE LIMIT 50

И конкретный пример с 20.09.2012 по 20.09.2013

 SELECT created_time,message FROM stream WHERE source_id=MY_USER_ID and created_time>1348099200 and created_time>1379635200 LIMIT 50
0 голосов
/ 23 августа 2013

При использовании LIMIT вы получаете максимум 1000 лайков. FQL: ВЫБЕРИТЕ user_id FROM как WHERE object_id = 10151751324059927 LIMIT 20000000

0 голосов
/ 01 июля 2011

Попробуйте запятую:

SELECT post_id, created_time, message, likes, comments, attachment, permalink, source_id, actor_id FROM stream WHERE filter_key IN (SELECT filter_key FROM stream_filter WHERE uid=me() AND type='newsfeed') AND is_hidden = 0 limit 11,5

...