0

我试图抓住用户的Facebook朋友在过去几天共享的最新链接。让我们在过去7天说:查询Facebook上朋友分享的所有链接的最快方法

使用FQL,我能够在同一时间抓住这个长达20个朋友:

$fql = "SELECT link_id, owner, created_time, title, summary, url, image_urls FROM link WHERE owner IN (select uid2 from friend where uid1 = me() LIMIT 20) AND created_time >= $_7ago"; 

如果我设定的朋友数量限制从20到东西较高,该查询崩溃。我目前的解决方案是重复这个查询,在一个循环内将1000个朋友拆分成20个组。这实际上工作,但它需要超过五分钟的运行。

我也试着多查询这种方式(和速度没有增加):

"links":"select uid2 from friend where uid1 = me() LIMIT 20", 
"stats":"SELECT owner, owner_comment, title, summary, url, image_urls FROM link WHERE owner IN (select uid2 from #links) AND created_time >= \"' . $_7ago . '\"" 

是否有一个更快的替代方案/解决方案?

http://www.pixable.com/ < - 设法通过拉朋友小于3秒

共享每月照片

回答

0

Multiqueries可用于防火多个非相关查询了。首先获取好友uids,然后通过将uid分成块并创建单个查询并立即启动所有查询。在JS SDK,这将是这样的:

FB.api({ 
    method: 'fql.multiquery', 
    queries: [ 
      'SELECT owner, owner_comment, title, summary, url, image_urls FROM link WHERE owner IN ('+chunk0+') AND created_time >= '+time, 
      'SELECT owner, owner_comment, title, summary, url, image_urls FROM link WHERE owner IN ('+chunk1+') AND created_time >= '+time, 
      'SELECT owner, owner_comment, title, summary, url, image_urls FROM link WHERE owner IN ('+chunk2+') AND created_time >= '+time 
    ]}, function(results) { 
    console.log(results); // array with the individual query results 
     var query_results = null; 
     var row = null; 
     for (var i = 0, l = results.length; i < l; ++i) { 
      var query_results = results[i]; 
      for (var i2 = 0, l2 = query_results.fql_result_set.length; i2<l2; ++i2) { 
       row = query_results.fql_result_set[i2]; 
       console.log(row); 
       // at this point row variable contains individual rows from the link table 
       // with the selected fields 
       console.log(row.owner, row.title); // should log something useful 
      } 
     } 
    } 
); 

documentations states,这应该是比使用批处理API接口速度快:

这种方法也具有比运行一系列fql.query通话性能更好与batch.run。

在Firebug第一console.log(results)应该表现出一些类似的(实际的ID被删除/截短的空间限制): Firebug console output for results

+0

感谢。查询速度更快,并且没有任何错误地加载。但是我无法显示这个查询的结果(当直接输出数据时它是空的)。有没有一种特定的方式可以读取/显示这个查询结果? – 2012-08-20 18:21:19

+0

添加了示例迭代循环和可能返回的数据屏幕快照(图片的大小调整为帖子,右键单击,可见版本的视图) – complex857 2012-08-20 18:56:24

+0

太棒了。谢谢。 – 2012-08-20 19:53:57