相互の友人の数が最も多い友達
-
28-10-2019 - |
質問
私は彼らと共有している友人を最も多くの相互の友人を見つけたいです。
FQLとグラフAPIで次のようにしようとしました。
現在のログインしているユーザーの友達リストを取得します。
FQL:SELECT uid1 FROM friend WHERE uid2="MY_USER_ID" and uid1 IN (SELECT uid1 FROM friend WHERE uid2=me())
グラフAPI:$facebook->api('/me/friends?format=json&limit=5000')
リスト内のUIDのそれぞれについて、私は共通の友人のリストを取得してそれを数えることができます。
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')
でも, 、 それはとります トン 私のすべての友達を通してこれを実行する時間の...
あなたはそれをするためのより良い方法に精通していますか?
解決
あなたが最終的に何をしたいのか正確にはわかりません。ただし、リストのトップフレンドを探している場合は、フィードを取得することでそれを達成し、投稿の数に応じて友達をランク付けできます。
$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);
}
他のヒント
あなたの目標が相互の友人の数が最も多い友人のリストを取得することだけである場合、つまり、それらの相互の友人が誰であるかは気にしません。
また、GeoffのFQLが非常に多くのデータを返し、Facebookが実際にデータを切り捨てていることにも気付きます。
その上、あなたは同じFQLコールでそれらの友人の名前を取得したいかもしれません...
より良く見える代替FQLはこれです:
SELECT name,mutual_friend_count FROM user WHERE uid IN(
SELECT uid2 FROM friend WHERE uid1=me())
これにより、友達リストから相互の友人の数が返されます。したがって、500人の友人がいる場合、500のオブジェクトでのみ応答が得られます。
次のステップに対するGeoffの答えをとると、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."
?>
私はこのようなクエリを使用して、共通の友達を獲得しました:
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())
それはあなたの友達の相互の友人全員をすぐに返します。