AS3Facebooklib et problématique du typage des nombres

Ayant depuis quelques temps décidé de toucher un peu au développement d’application pour Facebook, j’ai opté pour le webapi de Abode disponible à cette adresse afin de l’utiliser dans une RDA Air.

L’API est plutôt bien fichu avec des méthodes et propriétés dont la syntaxe respecte au mieux ce qui est décrit dans le wiki officiel pour l’API Rest de Facebook, ce qui permet de se calquer très facilement dessus.

Du coup, je me lance et je teste un peu toutes les méthodes qui m’intéressent. Tout fonctionne à merveille jusqu’au moment où je désire récupérer les photos d’un album précis. Explication:

Tout d’abord je récupère les albums avec la méthode “photos.getAlbum()”. Je place la réponse dans un Array et tout est ok, je reçois bien des objets [Album] et leur nombre est exacte. Du coup j’en choisi un au hasard et je récupère son id (”aid”) qui me renvoie quelque chose comme “20074892″. Je me dis cool, pas de problème, je vais employer cet id comme argument de la méthode “photos.get()” pour récupérer les infos de chaque photo de cette album. Et là rien, pas moyen de les récupérer. Je cherche partout dans mon code et après plusieurs heures, je me rend compte que chaque album me renvoie le même id, hum… bizarre.

Et comme je ne remets toujours pas en cause une API développée par Adobe, je continue à chercher l’erreur dans mon code. Quand je pense enfin à tester mon code avec la console du site developper de facebook, je me rends compte que le xml renvoyé donne un id différent pour l’album, du style: 3047494766431392632. Et la bingo, je comprend le problème, AS3Facebooklib type les id notamment ceux pour les albums en “int”. Le type “int” étant 32 bit son maximum est de 2147483648. Du coup le typage en “int” modifiait mon id qui n’était plus correct. Du coup je me dis, je vais le passer en Number et plop tjr pas… Voici une petite explication:

var aidInt:int = 3047494766431392632;
 
var aidNum:Number = 3047494766431392632;
 
var aidString:String = "3047494766431392632";
 
trace("aidInt : "+aidInt);               //renvoi 87040
 
trace("aidNum : "+aidNum);          //renvoi 3047494766431393000
 
trace("aidString : "+aidString);      //renvoi 3047494766431392632

Du coup, le seul moyen que j’ai trouvé est de modifier le code pour que l’id d’album soit typé en String partout dans le code, qui est en fin de compte le format dans lequel doit le recevoir Facebook, mais qui n’est pas pratique à l’utilisation dans le code.

Bref, 2 choses a retenir la dedans:

  1. Ne pas se fier complètement à ce genre d’API, même si ça vient d’Adobe…
  2. Ne devrait-on pas avoir un type capable de gérer un nombre avec autant de décimal, car j’imagine que le problème doit pouvoir se reproduire dans d’autres projets?

Voilou, si j’ai le temps, je posterai un petit tuto pour expliquer la façon de commencer une appli Air Facebook, notamment au niveau de l’authenification.

Tags: , , , ,

Leave a Reply