Как заказать список друзей, возвращенный из нового API Facebook Graph? - PullRequest
9 голосов
/ 19 мая 2010

Вы можете получить список друзей аутентифицированного пользователя с помощью:

https://graph.facebook.com/me/friends

У кого-нибудь есть идеи, как упорядочить список по имени пользователя? Потому что это не по умолчанию. Там нет ничего в документации.

Ответы [ 9 ]

12 голосов
/ 20 мая 2010

мы делаем это в нескольких приложениях, просто сортируя в javascript.

function sortByName(a, b) {
    var x = a.name.toLowerCase();
    var y = b.name.toLowerCase();
    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

var _friend_data = null
function lazy_load_friend_data(uid) {
  if (_friend_data == null) {    
    FB.api('/me/friends', function(response) {        
        _friend_data = response.data.sort(sortByName);
      }
    )
  }
}
5 голосов
/ 19 мая 2010

разобрался с решением. В конце концов, мы, вероятно, сможем упорядочить результаты графика. На данный момент я просто делаю это (JavaScript). Предполагая, что я получил "fb_uid" из моей сессии PHP:

var friends = FB.Data.query("SELECT name, uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1={0}) ORDER BY name", parseInt(fb_uid));
friends.wait(function(rows){
    console.log(rows);
});
3 голосов
/ 19 мая 2010

Я думаю, что весь OpenGraph API все еще находится в стадии перехода от FB Connect. В любом случае, я бы просто сделал старый добрый запрос по порядку в FQL, который вы все еще можете использовать. Я не могу себе представить, что будет слишком сложно измениться, как только установится открытый способ для этого.

Этот очень хороший урок покажет вам, как это сделать:

http://thinkdiff.net/facebook/php-sdk-graph-api-base-facebook-connect-tutorial/

$fql    =   "select name, hometown_location, sex, pic_square from user where uid=xxxxxxxxxxxxxxx";
$param  =   array(
        'method'     => 'fql.query',
        'query'      => $fql,
        'callback'   => ''
);
$fqlResult   =   $facebook->api($param);
2 голосов
/ 05 ноября 2013

Использование FQL в одном вызове.

SELECT uid, name FROM user WHERE uid IN 
(SELECT uid2 FROM friend WHERE uid1 = me()) 
ORDER BY name ASC
2 голосов
/ 19 мая 2010

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

1 голос
/ 15 марта 2011

для меня простой ассорт ($ друзей); работал нормально;)

1 голос
/ 04 января 2011
$friends = $facebook->api('me/friends');
foreach ($friends as $key=>$value) {
    sort($value);
    foreach ($value as $fkey=>$fvalue) {
      echo "<img src='https://graph.facebook.com/".$fvalue[id]."/picture' width='50' height='50' title='".$fvalue[name]."' />";     
    }
}
0 голосов
/ 29 мая 2013

Построение ответа @ MainSocial, но сортировка по фамилии, затем по имени, а не только по имени:

function sortByName(a, b) {
    var fn = function(x) { return x.name.toLowerCase(); };
    var ln = function(x) { return x.last_name.toLowerCase(); };
    if(ln(a) == ln(b)){
        if(fn(a) == fn(b)) {
            return 0;
        }
        return (fn(a) < fn(b)) ? -1 : 1;
    }
    return (ln(a) < ln(b)) ? -1 : 1;
}

function getFriendsList() {
    FB.api('/me/friends', {fields: 'name,id,last_name'}, function(response) {
        var friends = response.data.sort(sortByName);
        for (i=0; i<friends.length; i++) {
            $('body').append(friends[i].name + ' - ' + friends[i].id + '<br>');
        }
    });
}

getFriendsList()
0 голосов
/ 24 марта 2011
private function _compareFacebookFriends($a, $b)
{
    return strcasecmp($a['name'], $b['name']);
}

public function sortFacebookFriendsArray(&$array)
{
    usort($array, '_compareFacebookFriends');
}

/* Add here $facebook's initialization. Use Facebook PHP SDK */
$fbFriends = $facebook->api('/me/friends');
sortFacebookFriendsArray($fbFriends);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...