【问题标题】:Fastest Way to Query all Links shared by friends on Facebook查询 Facebook 上好友分享的所有链接的最快方式
【发布时间】:2012-08-16 03:49:02
【问题描述】:

我正在尝试获取过去几天用户的 Facebook 朋友分享的最新链接。假设过去 7 天:

使用 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/

【问题讨论】:

    标签: facebook facebook-graph-api facebook-javascript-sdk facebook-fql facebook-php-sdk


    【解决方案1】:

    多查询也可用于触发多个不相关的查询。首先获取朋友的 uid,然后通过将 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接口快:

    此方法也比使用 batch.run 运行一系列 fql.query 调用具有更好的性能。

    在 firebug 中,第一个 console.log(results) 应该显示与此类似的内容(实际 id 因空间限制而被删除/截断):

    【讨论】:

    • 谢谢。查询速度更快,加载时没有任何错误。但是我无法显示此查询的结果(直接输出数据时为空)。有没有我应该阅读/显示此查询结果的特定方式?
    • 添加了示例迭代循环和可能返回的数据的屏幕截图(图像为帖子调整大小,右键单击,查看图像以获得可读版本)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多