2013-03-25 30 views
3

我需要使用FQL为facebook用户提取线程内的所有用户线程和消息。使用FQL提取所有Facebook消息

当我运行下面的FQL它返回我的所有线程ID

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 
    }, 

但是当我运行下面的查询的所有fetch给定thread_id中的消息假设为"thread_id": "196940283688620",

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

由于第一个查询结果显示我在"thread_id": "196940283688620",中有99条消息,但查询只返回了20条消息。

1-我该怎么办?我需要在单个FQL中获取线程中的所有消息,还是需要多个FQL? 2-获取facebook认证用户的线程内部所有线程和messsages的最佳方式是什么?

回答

3

对于Facebook没有返回线程中显示的所有消息的问题,您可能会遇到默认的内部限制。您可以通过在FQL使用LIMIT声明绕过这个:

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 2013-04-12 12:07:04

+0

有没有任何模式,你错过的消息? – cpilko 2013-04-12 13:08:05

+0

我写了'LIMIT 200',但仍然只显示了20个结果。但是'LIMIT 20,40'显示了下20个结果。 – mirelon 2013-11-28 16:38:16

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个元素。

等等...我还没有找到更好的解决方案呢。

相关问题