1

我想从 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. 某些帖子的点赞数仅在
  3. 某些APP_ID

非常感谢你的帮助。

4

1 回答 1

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));
于 2013-03-27T02:48:43.077 回答