Live connect SDK (II)–El núcleo de la cuenta.

En el primer post de esta serie supimos como poder hacer login contra nuestra cuenta de Windows Live, tanto utilizando el botón predefinido para ello o realizándolo de forma programática.

En esta segunda entrega de la serie dedicada al nuevo Live Connect SDK, veremos como una vez logueados podemos sacar la información contenida en nuestra cuenta, los datos específicos de la cuenta, sin entrar en ningún otro servicio de Live.

Al hacer login utilizamos solamente dos scopes, entre ellos el scope wl.basic, como vimos en la tabla de scopes, wl.basic nos permite acceder en modo solo lectura a la información básica de la cuenta y sus contactos.

Bueno pues eso es lo que vamos a hacer precisamente. Y en este caso es tan sencillo como decir pedid y se os dará.

Con esta frase tan, no se, religiosa, se resume el funcionamiento del sistema, simplemente deberemos de realizar una petición de información y de forma asíncrona esperar el resultado de esa petición de información.

Para todo ello deberemos de utilizar el objeto LiveConnectClient, que recogemos al logearnos y utilizar el método GetAsync.

El Método .GetAsync del objeto LiveConnectClient acepta dos sobrecargas del método, una de ellas nos solicita la USER_ID de la cuenta y la segunda sobrecarga, nos solicita tanto ese USER_ID como un objeto de estado. En nuestro caso usaremos simplemente la primera forma del método y le indicaremos el USER_ID de la cuenta, que en este caso se puede simplemente llamar usando la palabra “me”. Es decir recógeme mis datos. Como he comentado debemos de pedir y esperar para recibir, con lo que también deberemos de crear un handler al evento GetCompleted y esperar una respuesta.

Cliente.GetCompleted +=new EventHandler<LiveOperationCompletedEventArgs>(Cliente_GetCompleted);

Cliente.GetAsync("me");

A lo largo de la serie veremos muy a menudo el método GetAsync, muchas de las funciones que podemos hacer con Live Connect es como ya hemos comentado, pedir determinada información de la cuenta, pues este método será en el 90% de los casos el usado para ello. Obviamente cada objeto que llame a este método tendrá en el evento GetCompleted “asociado”, unos valores de retorno, en el caso que nos ocupa esos valores son los del objeto LiveOperationCompletedEvenArgs, el cual dispone de una propiedad que es la que nos proporcionara lo que buscamos, la propiedad “Result”, que básicamente es una lista del tipo iDictionary de clave valor, que nos proporcionara estos 8 elementos:

1 id Identificación de la cuenta (lo usaremos en otras partes y para otro tipo de peticiones) [string]
2 name Nombre que se visualiza de la cuenta. Nombre completo. [string]
3 first_name Nombre [string] admite nulos
4 last_name Apellidos [string] admite nulos
5 link Link directo al perfil publico de la cuenta en Live Connect [string]
6 gender Genero del usuario de la cuenta (male or female) [string] admite nulos
7 locale Localización de la cuenta, en mi caso es-ES [string]
8 updated_time Fecha y hora de la ultima vez que se modifico el perfil del usuario en formato ISO 8601 [string]

Existe la posibilidad de visualizar u obtener los datos de la cuenta anteriormente citados, mediante el método RawResult del objeto LiveOperationsCompletedEventArgs, que en vez de ser un iDictoriary como es Result, es una cadena de texto con toda la información de la siguiente manera:

{

   "id": "c5a73fd5793017e9", 

   "name": "Rafa Serna", 

   "first_name": "Rafa", 

   "last_name": "Serna", 

   "link": "http://profile.live.com/cid-c5a73fd5793017e9/", 

   "gender": null, 

   "locale": "en_US", 

   "updated_time": "2011-09-28T09:58:55+0000"

}

Imagen de la cuenta:

Una de las operaciones normales que realizaremos al acceder a Live, es obtener la imagen asociada a la cuenta. Para ello no usaremos específicamente el Live Connect SDK, ya que este, al menos de momento no nos proporciona esta opción. Usaremos la API REST, que también esta disponible para su uso.

Simplemente deberemos de crear un objeto del tipo BitmapImage, recordemos que esta dentro del namespace System.Windows.Media.Imaging, y crearlo desde la URL del comentado API REST, indicando la propiedad AccessToken del objeto LiveConnectSession que utilizamos nada mas loguearnos. Lo haremos llamando a la URL de la siguiente forma:

string ImagenURL = @"https://apis.live.net/v5.0/me/picture?access_token=" + LiveConnectSession1.AccessToken;

 

image1.Source = new BitmapImage(new Uri(imgUrl,UriKind.RelativeOrAbsolute));

Acceso a contactos y amigos.

Otra de las opciones de las que disponemos al loguearnos con la cuenta y utilizar el scope wl.basic, es el acceso a los datos de los contactos asociados a dicha cuenta y de los amigos de Windows Live Messenger.

Para ello deberemos de usar de forma similar a como hemos recibido la información de la cuenta el método GetAsync, pero indicando otra cadena de texto “me/contacts” para los contactos y “me/friends” para los amigos.

Dependiendo de lo que indiquemos, en el evento GetCompleted, mediante el objeto LiveOperationCompletedEventArgs se nos devolverá una cosa u otra.

En el caso de los amigos asociados a la cuenta la información es muy escueta, simplemente nos devuelve un array de objetos con dos propiedades, estos objetos están contenidos en el array denominado “data”.

1 id Identificación de la cuenta del amigo [string]
2 name Nombre completo del amigo [string]

Bastante mas extensa es la información que se facilita de los contactos asociados en la cuenta, en donde a través de un array también llamado “data” nos facilita la siguiente información de cada uno de ellos.

1 id Identificación del  objeto del contacto [string]
2 name Nombre completo del contacto [string]
3 first_name Nombre [string] admite nulos
4 last_name Apellidos [string] admite nulos
6 gender Genero del contacto (male or female) [string] admite nulos
7 is_friend Indica si es un amigo en Messenger [boolean]
8 is_favorite Indica si el contacto es un favorito en Messenger [boolean]
9 updated_time Fecha y hora de la ultima vez que se modifico el perfil del contacto en formato ISO 8601 [string]
10 user_id Id del contacto [string] admite nulos
11 email_hashes Array que contiene un hash SHA-256 por cada dirección de email del contacto. [array]
Cliente.GetCompleted +=new EventHandler<LiveOperationCompletedEventArgs>(Cliente_GetCompleted);

Cliente.GetAsync("me/contacts");

En el cuadro superior vemos la forma de solicitar los datos de los contactos mediante el método GetAsync. En la parte inferior vemos como podemos recoger los datos en formato Raw desde la propiedad RawResult en el evento GetCompleted, en vez usar el objeto de los contactos explicado anteriormente,

{

   "data": [

      {

         "id": "contact.b4466224b2ca42798c3d4ea90c75aa56", 

         "first_name": "Henrik", 

         "last_name": "Jensen", 

         "name": "Henrik Jensen", 

         "gender": null, 

         "is_friend": false, 

         "is_favorite": false, 

         "user_id": null, 

         "email_hashes": [

            "9ecdb19f4eb8e04304c5d1280368c42e85b6e4fe39f08b0c837ec592b905a620", 

            "fc05492f50da6488aa14dcf221d395bcb29a4e43b43b250d60c68df4f831cad3"

         ], 

         "birth_day": 29, 

         "birth_month": 3, 

         "updated_time": "2011-04-22T00:11:13+0000"

      }, {

         ...

      }

   ]

}

En el próximo post de la serie podremos ver como acceder a mas datos de la cuenta, mediante el uso de otros scopes y veremos un código de ejemplo de una solución paso por paso que detalle lo descrito hasta el momento.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *