0

私は私とほとんどの相互の友人との友人を見つけようとしています。

public function topThreeMutualFriends() {
    $count;
    $query='select uid1 from friend where uid1 in (select uid2 from friend where uid1=me()) and uid2 in (Select uid2 from friend where uid1=me()) and uid1!=uid2';
    $result = $this->api(array('query' => $query , 'method' => 'fql.query'));
    if(!$result)
        throw new exception("No Mutual Friends");
    else{
        foreach ($result as $uid)
            $count[$uid['uid1']]++;
        arsort($count, SORT_NUMERIC);
        $i=0;
        foreach($count as $key=>$uid){
            $topthree[$i++]=$key;
            if($i==3)break;
        }
    return array($topthree,$count);}
    }

上記のコードでは、「リソースの制限のため、このAPI呼び出しを完了できませんでした」という例外が発生します。すべての権限を付与しようとしましたが、クエリはfqlテスターで正常に機能します。考えられる理由は何ですか?

4

2 に答える 2

4

これはかなり複雑なコードです。FQL に、共通の友人が最も多い上位 3 人の友人を見つけさせてみませんか?

$query = 'SELECT uid, name, mutual_friend_count 
          FROM user WHERE uid IN 
            (SELECT uid1 FROM friend WHERE uid2 = me()) 
          ORDER BY mutual_friend_count DESC LIMIT 3'; 
于 2012-08-15T16:38:22.810 に答える
1

考えられる理由は、貼り付けたエラー メッセージです。Facebook 側で必要なリソースに関して、クエリが高すぎます。

それをより小さなクエリに分割し、代わりにそれを行います。たとえば、1 回の呼び出しでフレンドのリストをフェッチし、リストを小さなチャンクに分割し、別の呼び出しでバッチの相互のフレンド数を確認します。

于 2012-08-15T15:38:11.143 に答える