3

我需要为具有 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
    }, 

但是,当我运行以下查询以获取给定 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 身份验证用户获取线程内的所有线程和消息的最佳方法是什么。

4

2 回答 2

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

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

于 2013-11-03T15:46:11.420 回答
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 多查询

您可以将查询重组为如下形式:(为便于阅读而添加了空格)

 {'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'
  }
于 2013-03-25T14:01:48.673 回答