3

나는 그들과 함께하는 나의 친구를 가장 높은 수의 친구로 찾고 싶습니다.가장 많은 수의 상호 친구가있는 친구

  1. 는 현재 로그인 한 사용자의 친구 목록을 가져옵니다 :
    나는 FQL 그래프 API를 사용하여 다음과 같은 방법을 그것을 할 노력했다.
    FQL : SELECT uid1 FROM friend WHERE uid2="MY_USER_ID" and uid1 IN (SELECT uid1 FROM friend WHERE uid2=me())
    그래프 API : 목록에서 UID 년대의 각각에 대해 $facebook->api('/me/friends?format=json&limit=5000')

  2. , 나는 상호 친구의 목록을하고 셀 수 있습니다.
    FQL : SELECT uid1 FROM friend WHERE uid2="OTHER_USER" and uid1 IN (SELECT uid1 FROM friend WHERE uid2=me())
    그래프 API : $facebook->api('me/mutualfriends/OTHER_USER')

  3. 그러나이

, 그것은
당신에게 할 수있는 더 좋은 방법을 잘 알고 있습니다 ... 내 모든 친구를 통해이를 실행 톤의 시간 소요 그?

답변

0

정확히 당신이 마침내 달성하고자하는 것이 확실하지 않습니다. 그러나 목록에서 상위 친구를 찾고 있다면 피드를 가져 와서 달성 할 수 있으며 게시물 수에 따라 친구 순위를 매길 수 있습니다. 다음 단계로 제프의 답변을 복용

$fql="SELECT actor_id FROM stream WHERE filter_key = 'others' AND source_id = me() ORDER BY actor_id LIMIT 3000"; 
$param=array(
      'method' => 'fql.query', 
      'query'  => $fql, 
      'callback' => '' 
     ); 
     $fqlResult1 = $this->facebook->api($param); 
     $top_frds=array(); 
     foreach($fqlResult1 as $result1) 
     { 
      $top_frds[]=$result1['actor_id']; 
     } 


$new_array = array(); 
foreach ($top_frds as $key => $value) { 
if(isset($new_array[$value])) 
    $new_array[$value] += 1; 
else 
    $new_array[$value] = 1; 
} 
$top_frds=array(); 
foreach($new_array as $tuid => $trate) 
{ 
$top_frds[]=array('uid'=>$tuid,'rate'=>$trate); 
} 
+0

Sandy & @talonmies : 내가 가져온 배열은 'rate'값이 아니라 사용자 ID별로 정렬됩니다. 또 다른 것은 내 현재 친구들에게 국한된 것이 아니며, 내게 친구가 된 적이없는 사용자가 목록에 있음을 의미합니다. –

+0

'요금'으로 정렬하는 방법은 다음과 같을 수 있습니다. http://www.firsttube.com/read/sorting-a-multi-dimensional-array-with-php/ 하지만 여전히 두 번째 문제에 대한 해결책이 필요합니다. –

3

나는 서로 친구를 얻기 위해 다음과 같은 쿼리를 사용했습니다 :

SELECT uid1, uid2 FROM friend 
    WHERE uid1 IN 
    (SELECT uid2 FROM friend WHERE uid1=me()) 
    AND uid2 IN 
    (SELECT uid2 FROM friend WHERE uid1=me()) 

그것은 신속하게 친구의 상호 친구들을 모두 반환합니다.

+0

Geoff의 제안은 아마도 FQL을 통해 가능한 한 당신을 얻습니다. 이 쿼리의 결과가 나오면 상호 연결 수가 가장 많은 친구를 찾는 것이 매우 간단해야합니다.결과에 가장 자주 나타나는 uid를 찾으십시오. 이것이 사용자의 대답입니다. –

+0

Geoff, 제안한 쿼리는 uid가 쌍으로 된 JSON 객체를 반환합니다. 같은 : { "UID1": "22069X" "UID2": "71286421X" }, { "UID1": "22091X" "UID2": "22498X" } @Zachary - I 돈 내 친구 중 하나가 가장 많은 수의 상호 친목을 공유하는 정보에서 내가 어떻게 추출 할 수 있는지 얻지 못합니다. –

+0

[내 새 응답] (http://stackoverflow.com/a/8828048/988990)을 참조하십시오. –

4

, 여기 PHP에서 완벽한 솔루션입니다.

첫째, 여기에 제프의 FQL했다 :

SELECT uid1, uid2 FROM friend 
    WHERE uid1 IN 
    (SELECT uid2 FROM friend WHERE uid1=me()) 
    AND uid2 IN 
    (SELECT uid2 FROM friend WHERE uid1=me()) 

그리고 여기에 JSON을 검색하고 당신과 함께 가장 상호 친구가있는 친구를 확인하는 PHP 코드입니다. (당신이 URL에 액세스 토큰을 교체해야합니다.)

<?php 
$jsonurl = "https://api.facebook.com/method/fql.query?query=SELECT+uid1%2C+uid2+FROM+friend++%0A++WHERE+uid1+IN+%0A++%28SELECT+uid2+FROM+friend+WHERE+uid1%3Dme%28%29%29%0A+++AND+uid2+IN+%0A++%28SELECT+uid2+FROM+friend+WHERE+uid1%3Dme%28%29%29&access_token=***INSERTACCESSTOKENHERE***&format=json"; 
$json = file_get_contents($jsonurl,0,null,null); 
$json_output = json_decode($json,true); 

for ($friendship = 0; $friendship <= count($json_output); $friendship++) 
{ 
    $firstfriend = $json_output[$friendship]["uid1"]; 
    $mutualfriendscount[$firstfriend] = isset($mutualfriendscount[$firstfriend]) ? $mutualfriendscount[$firstfriend] + 1 : 1; 
} 

$mostmutualfriends_count = 0; 

foreach ($mutualfriendscount as $friend => $mutualfriendcount) 
{ 
    if ($mutualfriendcount > $mostmutualfriends_count) 
    { 
     $mostmutualfriends_count = $mutualfriendcount; 
     $mostmutualfriends_id = $friend; 
    } 
} 
echo "ID $mostmutualfriends_id has the most number of mutual friends with you: $mostmutualfriends_count." 

?> 
9

당신의 목표는 가장 높은 상호 친구의 수, 즉 친구의 목록을 얻을 만 인 경우, 그 상호 친구가 누구인지 상관 없어 실제로 Geoff의 FQL 호출은 당신에게 필요한 정보를 너무 많이 제공했습니다.

Geoff의 FQL이 너무 많은 데이터를 반환하고 Facebook에서 실제로 데이터를 자릅니다. 이 당신의 수를 반환

SELECT name,mutual_friend_count FROM user WHERE uid IN(
SELECT uid2 FROM friend WHERE uid1=me()) 

: 게다가

, 같은 FQL 호출에 그 친구의 이름을 취득 할 수 있습니다 ...

좋아 보이는 또 다른 FQL이있다 친구 목록에있는 친구끼리. 따라서 500 명의 친구가있는 경우 500 개의 개체로만 응답을 받게됩니다.