2013-03-25 3 views
3

Мне нужно получить все потоки пользователей и сообщения внутри потока для пользователя facebook с помощью FQL.получение всех сообщений facebook с помощью FQL

Когда я запускаю ниже FQL возвращает меня все нити IdS

select thread_id,message_count from thread where viewer_id = me() and folder_id = 0 

показывая темы и количество сообщений в папке Входящие,

{ 
    "data": [ 
    { 
     "thread_id": "196940283688620", 
     "message_count": 99 
    }, 
    { 
     "thread_id": "283904071679203", 
     "message_count": 1 
    }, 

Но когда я запускаю ниже запрос для выборки всех сообщения в данном thread_id предположим "thread_id": "196940283688620",

select message_id,body,viewer_id , thread_id from message where thread_id = 196940283688620 and viewer_id = me() 

Поскольку первый результат запроса показывает, что у меня есть 99 сообщений в "thread_id": "196940283688620",, но запрос возвратил всего 20 сообщений.

1- Что я иду не так? что мне нужно получить все сообщения в потоке в одном FQL, или мне нужно несколько FQL? 2- Какой лучший способ получить все потоки и сообщения в потоке для пользователя, прошедшего проверку подлинности на facebook.

ответ

3

Для проблемы, когда Facebook не возвращает все сообщения, показанные в потоке, вы, вероятно, сталкиваетесь с внутренним пределом по умолчанию. Вы можете обойти это, используя LIMIT заявление в FQL:

SELECT message_id,body,viewer_id, thread_id FROM message 
    WHERE thread_id = 196940283688620 AND viewer_id = me() LIMIT 200 

По моему опыту, Facebook устанавливает максимальный предел в 500 или 5000 пунктов, в зависимости от объекта. Когда вы превысите свой максимум, вы начнете получать гораздо меньше предметов, чем ваш лимит. В этот момент вам нужно будет найти способ разбиения на страницы с помощью нескольких запросов.

Что касается наиболее эффективного способа получения всех потоков и сообщений, то это FQL multiquery.

Вы могли бы реструктурировать свои запросы в один, как это: (пустое пространство добавляется для удобства чтения)

{'msg_threads': 
    'SELECT thread_id,message_count FROM thread WHERE viewer_id = me() AND folder_id = 0', 
    'msg_messages': 
    'SELECT message_id,body,viewer_id, thread_id FROM message 
     WHERE thread_id IN (SELECT thread_id FROM #msg_threads) 
     AND viewer_id = me() LIMIT 200' 
    } 
+0

Я могу сделать многообещающий, но все равно не возвращать все сообщения – Asghar

+0

Есть ли какой-либо шаблон для сообщений, которые вам не хватает? – cpilko

+0

Я пишу 'LIMIT 200', но пока отображается только 20 результатов. Но 'LIMIT 20,40' показывает следующие 20 результатов. – mirelon

4

Мое решение это так:

SELECT message_id,body,viewer_id, thread_id FROM message 
    WHERE thread_id = 196940283688620 AND viewer_id = me() LIMIT 0,30 

Получить первые 30 результатов , а затем

SELECT message_id,body,viewer_id, thread_id FROM message 
     WHERE thread_id = 196940283688620 AND viewer_id = me() LIMIT 30,60 

Следующие 30 элементов.

И так далее ... Я еще не нашел лучшего решения.

Смежные вопросы