0

Я знаю, что вы не можете подружиться с друзьями, но можете ли вы получить общих друзей, используя какой-либо запрос, с помощью вычислительной эффективности?FQL Graph API: Взаимодействующие друзья

Могу ли я даже перебирать своих друзей, чтобы узнать, кто из них дружит с мишенью? Есть ли хороший способ получить друзей-друзей?

ответ

3

Вы можете сделать это следующим образом:

$facebook = new Facebook(array(
    'appId' => FB_ID, 
    'secret' => FB_APP_SECRET, 
    'cookie' => true, 
)); 


$fql = "SELECT id FROM profile WHERE id IN (SELECT uid2 FROM friend WHERE uid1=me())"; 

$response = $facebook->api(array(
'method' => 'fql.query', 
'query' =>$fql, 
)); 

Это возвращает идентификатор взаимных друзей. Надеюсь, что это помогает :)

EDIT:

Если вы хотите получить общие друзья между вами и ид = 13245, то вы можете сделать так:

$facebook = new Facebook(array(
    'appId' => FB_ID, 
    'secret' => FB_APP_SECRET, 
    'cookie' => true, 
)); 

$fql = "SELECT uid1, uid2 FROM friend WHERE uid1 IN (SELECT uid2 FROM friend WHERE uid1=me() AND uid2 = '13245') AND uid2 IN (SELECT uid2 FROM friend WHERE uid1=me())"; 

$response = $facebook->api(array(
'method' => 'fql.query', 
'query' =>$fql, 
)); 

Это вернет все взаимные друзья идентификатор ,

Надеюсь, это даст вам то, что вы хотите.

+0

Я не вижу, как это работает. Где я могу добавить второго пользователя? Скажите, что мне нужны общие друзья между мной() и id = 13245, как я могу структурировать этот запрос? – JoshDG

+0

Что вы получаете сейчас .. Вы получаете массив друзей ids – Sabari

+0

Пожалуйста, уточните у моего редактирования – Sabari

0

У меня была такая же проблема. Хотя ответить на вопрос очень поздно, это поможет кому-то. Вот почему ответ на этот вопрос.

Попробуйте FQL запрос:

$query="SELECT uid, name, work, education FROM user WHERE uid!=$source_id AND uid IN 
        (SELECT uid1, uid2 FROM friend WHERE uid1 IN (SELECT uid2 FROM friend WHERE uid1=$target_id AND uid2 = '$source_id') 
         AND uid2 IN (SELECT uid2 FROM friend WHERE uid1=$target_id)) ORDER BY name"; 

$user_info=$this->facebook->api(array('method'=>'fql.query', 
       'query'=>$query)); 

К этому мы можем получить взаимную информацию друзей.

1

Это может быть старым, мне нужно, чтобы рассчитать общие друг между пользователем X и меня, и обнаружил, что @Sabari ответа полезным, за исключением того, что была ошибка (ненужный внутренний запрос)

SELECT uid2 FROM friend WHERE uid1=me() AND uid2 = '13245') 

Этот внутренний запрос даст один результат (13245), поскольку таблица друзей имеет два столбца (оба составляют первичный ключ таблицы), а предложение where помещает условие в оба столбца.

поэтому весь запрос после удаления этого внутренний запрос должен быть:

SELECT uid1, uid2 FROM friend where uid1='13245' and uid2 in (SELECT uid2 FROM friend where uid1=me()) 

Этот запрос вычисляет список всех «13245» друзей (where uid1='13245'), которые также являются моими друзьями (внутренний запрос)

вот мой код, чтобы получить список общих друзей в python

def get_friends_ids(id): 
    query = "select uid1,uid2 from friend where uid1=\"" + str(id) + "\" and uid2 in (select uid2 from friend where uid1=me())" 
    query = urllib2.quote(query) 
    url = "https://graph.facebook.com/fql?q=" + query + "&access_token=" + access_token 
    data = urllib2.urlopen(url).read() 
    j = json.loads(data) 
    ids = [] 
    for record in j['data']: 
     ids.append(record['uid2']) 
    return ids 
Смежные вопросы