【问题标题】:Facebook PHP-SDK find friends with more likes but only in certain app_idFacebook PHP-SDK 找到更多喜欢但仅限于特定 app_id 的朋友
【发布时间】:2013-03-26 23:02:15
【问题描述】:

我想从 facebook php-sdk 中提取“喜欢”某些帖子的朋友列表,这些帖子仅来自某个 app_id。让我举个例子,如果你访问 www.rottentomatoes.com,你可以在朋友/朋友部分看到你所有对任何电影写过评论/评论的朋友。

我认为 FQL 是一种不错且干净的方法,但实际上并非如此,因为处理数据需要很长时间,我认为它还不能用于在线应用程序。

这是我目前想出的代码:

function cmp($a, $b)
{
    if ($a["like"] == $b["like"]) {
        return 0;
    }
    return ($a["like"] > $b["like"]) ? -1 : 1;
}

    try
    {
        $fql = 'SELECT uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1='.$uid.') AND has_added_app = 1';
        $_friends = $facebook->api(array('method' => 'fql.query','query' => $fql));
    }
    catch(FacebookApiException $e)
    {
        print_r($e);
        error_log($e->getType());

    }

    // Extract the user ID's returned in the FQL request into a new array.
    $likes = array();
    if (is_array($_friends) && count($_friends) > 0)
    {   
        foreach ($_friends as $friend)
        {
            $fid = $friend["uid"];

            try
            {
                $fql = 'SELECT url FROM url_like WHERE user_id = '.$fid.' AND strpos(lower(url),"muchogusto") >=0';
                $_likes = $facebook->api(array('method' => 'fql.query','query' => $fql));
                $likes[] = array("uid" => $fid, "like" => count($_likes));
            }
            catch(FacebookApiException $e)
            {
                $likes[] = array("uid" => $fid, "like" => 0);
                continue;
                error_log($e->getType());
            }
        }   
    }

    usort($likes, "cmp");
    print_r($likes);

我有很多问题,由于我是新手,请务必帮助我。

有人可以帮我在没有 FQL 的情况下进行编码吗?我只需要这个:

  1. 我的朋友列表
  2. 某些帖子的 LIKE 数仅在
  3. 某些APP_ID

非常感谢您的帮助。

【问题讨论】:

    标签: facebook facebook-fql facebook-php-sdk


    【解决方案1】:

    FQL 不是问题。这是您在foreach 循环中进行FQL 调用的事实。这就是减慢程序速度的原因。

    如果您在另一个 foreach 循环中调用此函数,那就别管它了。

    尝试使用 FQL 多查询进行一次调用。

    $queries['my_friends'] = 
      'SELECT uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1=me()) 
       AND has_added_app = 1';
    $queries['liked_url'] = 
      'SELECT url,user_id FROM url_like WHERE user_id IN (SELECT uid FROM #my_friends) 
       AND strpos(lower(url),"muchogusto") >=0';
    $multiquery = json_encode($queries);
    $result = $facebook->api(array('method' => 'fql.multiquery','queries' => $multiquery));
    

    【讨论】:

    • 感谢您的快速响应 cpilko。是否可以通过app_id搜索帖子而不是依赖strpos?我认为它可能比通过 URL 地址进行文本搜索更快,在 FQL 中是否可能,因为 FQL 处理此查询的时间太长:10 秒!这太多了。你认为有没有其他方法可以在 Open Graph 中执行相同的查询并忘记 FQL??
    • Graph API 没有内置任何过滤功能。在 Facebook 端过滤查询的唯一方法是使用 FQL。我不确定是否有办法进一步优化。
    • 我想知道来自 www.rottentomatoes.com 的家伙是如何进行这种精确的开发以快速加载...
    • 如果您将自己的网站与大型网站进行比较,请不要这样做。他们可能与 Facebook 达成了交叉营销协议,并且可能使用与我们普通人完全不同的工具集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多