2013-03-25 102 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個元素。

等等...我還沒有找到更好的解決方案呢。