【问题标题】:Facebook FQL stream limit?Facebook FQL 流限制?
【发布时间】:2011-05-03 00:04:01
【问题描述】:

我想了解我的墙的完整历史记录。但我似乎在 6 月的某个地方达到了极限。

我会这样打多个电话:

SELECT created_time,message FROM stream WHERE source_id=MY_USER_ID LIMIT 50

SELECT created_time,message FROM stream WHERE source_id=MY_USER_ID LIMIT 51,100

等等……

但我总是在我墙上的最后(第一个)帖子上结束。 通过 facebook.com,我可以返回更长的时间,因此 Facebook 显然拥有数据。

为什么我没有收到较旧的帖子? 有没有其他方法可以抓取我的历史记录?

【问题讨论】:

    标签: facebook facebook-fql


    【解决方案1】:

    我在尝试从公共页面下载旧帖子时遇到类似问题,添加过滤器“AND created_time

    我认为这可能是一个错误,因为显然如果我 created_time

    我对您的建议是过滤 created_time,并在您停止获得结果时手动更改它。

    【讨论】:

      【解决方案2】:

      我正在经历同样的事情。完全看不懂,但是好像offset不能大于limit * 1.5

      理论上,这意味着总是增加限制以匹配偏移量可以解决它,但我无法验证这一点(我不确定我看到的问题是我的代码中的其他错误还是如果还有其他限制我不明白获取流)。

      谁能解释我所看到的以及我所缺少的?

      您可以通过 FQL 测试控制台重现我的结果:

      http://developers.facebook.com/docs/reference/rest/fql.query

      在此查询中粘贴:

      SELECT post_id, created_time, message, likes, comments, attachment, permalink, source_id, actor_id 
      FROM stream 
      WHERE filter_key IN 
      (
            SELECT filter_key 
            FROM stream_filter 
            WHERE uid=me() AND type='newsfeed'
      ) 
      AND is_hidden = 0 limit 100 offset 150
      

      当您单击“测试方法”时,您将看到我得到的 2 个结果之一:

      1. 返回结果:[{post_id:"926...(这是我的预期)
      2. 它返回空 [](我没想到)

      您可能需要通过更改“偏移”值进行试验,直到找到它中断的确切位置。刚才我发现它在 155 和 156 对我来说会坏掉。

      尝试同时更改限制和偏移量,您会发现空结果不会出现在流中的特定位置。以下是我看到的一些结果示例:

      • "...limit 50 offset 100" 中断,返回空 []
      • "...limit 100 offset 50" 有效,返回预期结果
      • "...limit 50 offset 74" 有效
      • "...limit 50 offset 75" 中断
      • "...limit 20 offset 29" 有效
      • "...limit 20 offset 30" 中断

      除了看到limit=offset*1.5的关系,我真的不明白这里是怎么回事。

      【讨论】:

        【解决方案3】:

        您可以为您的 facebook 查询指定 created_time。 create_time 字段是基于 Unix 的时间。你可以用http://www.onlineconversion.com/unix_time.htm这样的转换器来转换它,或者使用程序方法取决于你的语言。

        根据您的要求制作模板

        SELECT created_time,message FROM stream WHERE source_id=MY_USER_ID and created_time>BEGIN_OF_RANGE and created_time>END_OF_RANGE LIMIT 50
        

        以及从 20.09.2012 到 20.09.2013 的具体示例

         SELECT created_time,message FROM stream WHERE source_id=MY_USER_ID and created_time>1348099200 and created_time>1379635200 LIMIT 50
        

        【讨论】:

          【解决方案4】:

          使用 LIMIT 最多可以得到 1000 个赞 FQL:SELECT user_id FROM like WHERE object_id=10151751324059927 LIMIT 20000000

          【讨论】:

            【解决方案5】:

            我不知道为什么,但是当我使用filter_key = 'others' 时,LIMIT xx 可以工作。

            这是我的 fql 查询

            SELECT message, attachment, message_tags FROM stream WHERE type = 'xx' AND source_id = xxxx AND is_hidden = 0 AND filter_key = 'others' LIMIT 5
            

            现在我正好收到 5 个帖子...当我使用 LIMIT 7 时,我收到 7 个等等。

            【讨论】:

              【解决方案6】:

              跳过 FQL 并直接查看图表。我尝试了 FQL,但在限制和获取指定日期范围时出现了问题。这是图表地址。放入你自己的页面facebook_id和access_token:

              https://graph.facebook.com/FACEBOOK_ID/posts?access_token=ACCESS_TOKEN

              然后,如果您想获取历史记录,请使用 sinceuntillimit 设置日期范围:

              https://graph.facebook.com/FACEBOOK_ID/posts?access_token=ACCESS_TOKEN&since=START_DATE&until=END_DATE&limit=1000

              那些开始日期和结束日期都是 unix 时间,我使用了限制,因为如果我不这样做,它一次只能给我 25 个。最后,如果您想了解您的帖子,您必须转到每个单独的帖子并获取该帖子的见解:

              https://graph.facebook.com/POST_ID/insights?access_token=ACCESS_TOKEN

              【讨论】:

              • 对此进行了测试并确认添加限制允许系统返回超过 25 个结果。感谢您的修复!
              • 有点过时但 facebook_id/posts 不提供与流相同的结果。照片、ablums 和视频不包含在此 API 方法中。
              【解决方案7】:

              正如@Subcreation 所说,FQL 在流中使用 LIMIT 和 OFFSET 有点奇怪,而更高的 LIMIT/OFFSET 比率似乎效果更好。

              我在 Facebook http://developers.facebook.com/bugs/303076713093995 上创建了一个问题。我建议您订阅它并表明您可以复制它以提高它的优先级。

              在错误中,我描述了一个简单的流 FQL 如何根据其 LIMIT/OFFSET 返回非常不一致的响应计数。例如:

              433 - LIMIT 500 OFFSET 0
              333 - LIMIT 500 OFFSET 100
              100 - LIMIT 100 OFFSET 0
              0 - LIMIT 100 OFFSET 100
              113 - LIMIT 200 OFFSET 100
              193 - LIMIT 200 OFFSET 20
              

              【讨论】:

                【解决方案8】:

                用逗号试试:

                SELECT post_id, created_time, message, likes, comments, attachment, permalink, source_id, actor_id FROM stream WHERE filter_key IN (SELECT filter_key FROM stream_filter WHERE uid=me() AND type='newsfeed') AND is_hidden = 0 limit 11,5

                【讨论】:

                  【解决方案9】:

                  来自http://developers.facebook.com/docs/reference/fql/stream

                  流表仅限于过去 30 天或 50 个帖子,以较大者为准

                  【讨论】:

                  • 这个答案并不完全正确。同样的参考资料还说:however you can use time-specific fields such as created_time along with FQL operators (such as < or >) to retrieve a much greater range of posts. 所以这里的解决方案可能是使用LIMIT,而是使用时间参数。
                  • 我加 30 天通常比 100 天多得多。
                  • 我尝试过使用时间参数,我尝试了 3 天的时间,它奏效了。我尝试了 30 天的期限,但没有奏效。在 9 天的时间里,它只给了我 14 个帖子。
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多