使用FQL检索所有Facebook消息

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

当我运行以下查询来获取给定线程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认证用户的所有主题和主题内的信息的最佳方法是什么。

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

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


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多查询
您可以将查询重构为以下形式:(为了可读性添加了空格)
 {'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'
  }

我可以进行多次查询,但仍未返回所有的消息。 - Asghar
你们所错过的信息有没有任何规律模式? - cpilko
我写了 LIMIT 200,但仍然只显示20个结果。但是 LIMIT 20,40 显示下一个20个结果。 - mirelon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接