Facebook Connect, friends et autres plaisirs…

Bon, autant le dire tout de suite, c’est pas facile!! Le but de la manip est de pouvoir choisir un fb friends parmi une liste (et garder le friend choisi dans un champ hidden d’un formulaire).

1ère tentative

utiliser l’API PHP (wrappé dans le plugin symfony sfFacebookConnectPlugin). Il est possible d’obtenir la liste de des uid des friends.

<code>sfFacebook::getFacebookFriendsUids();</code>

(ou accéder au Facebook::getFacebookClient->fql_query($the_query) pour faire une requête fql)

Puis utiliser fb:profile-selector ou fb:name:

<code><fb:profile-pic linked="false" uid="'. $friendUid .'"></fb:profile-pic></code>

Mais là j’ai vite vu que j’allais avoir besoin de javascript pour faire du paging. Et loader toutes les images est trop lent.

(Essayer) d’utiliser fb:friend-selector

Là, ça m’a pris du temps avant de me rendre compte qu’on ne pouvez pas l’utiliser directement dans une application facebook Connect. Cela ne peut servir que pour envoyer des invitations (et encore, fb avise que cette fonctionnalité va changer). Ps utlisable avec fb Connect car l’id du friend selectionné est dans un form dans un iframe, il n’Est pas dans la page fb Connect. Il n’est donc pas dans le formulaire de ma page, celui que je veux soumettre. Voici quand même le code:

</code><code>$field = sprintf(<<<EOF
<fb:serverfbml height="200px">
<script type="text/fbml">
<fb:fbml>
<fb:friend-selector  name="%s" idname="%s">
</fb:friend-selector>
</fb:fbml>
</script>
</fb:serverfbml>
EOF,
$name,
$this->generateId($name));</code><code>

Je le redis: ce code ne fonctionne pas avec facebook connect si vous voulez avoir un champ hidden contenant le friend choisi!

Option 3 – En cours

Mais je reviens à la base, car je ne pense pas qu’il y ait d’autre possibilité pour l’instant. Je vais utiliser le fql en javascript pour faire un ajax input field (du genre « auto-completion »). Voici le fql qui contient toute la magie. Dès que j’aurais le widget symfony, je le posterai:

SELECT uid, name FROM user WHERE strpos(lower(name), 'ka') = 0   AND
 uid IN (SELECT uid2 FROM friend WHERE uid1 = 718562059)

Il n’y a pas de « LIKE », donc on fait avec ce qu’on a, hein?

Liens:

Mise à jour (15 février 2010)

J’ai créée un plugin jquery qui permet de sélectionner un ami. Lire l’article suivant pour plus de détail.