[Dropbox Portable SDK .NET] Información de la cuenta (IV)

Una vez completado el proceso OAuth 2.0 y obtenido el token de acceso, ya podemos acceder a la información de la cuenta, los ficheros, carpetas, etc… . En este artículo nos vamos a centrar en cómo obtener información básica de la cuenta (espacio total, ocupado, etc…

Vamos a recordar la hoja de ruta para esta serie de artículos

1. Crear Aplicación DropBox

2. Obtener código de autorización

3. Obtener Token de acceso

4. Información de la cuenta (actual)

5. Listado de archivos y carpetas

6. Buscar

7. Descargar Archivos

8. Subir Archivos

9. Compartir Archivos

10. Operaciones con ficheros y carpetas

11. Control de Versiones

12. Sincronización

En este artículo y el resto, vamos a usar el CORE API de DropBox. El primer paso es hacer una petición GET a la url

https://api.dropbox.com/1/account/info

adjuntando a dicha petición HTTP, la cabecera “Authorization” con el valor del token de acceso. Ya que esta cabecera será necesaria en todas las peticiones, hemos creado un “Http Handler” en la clase “DropBoxMessageHandler“, que se encargará de cargar en contenido de dicha cabecera.

namespace DropBoxSdk.OAuth2
{
    public class DropBoxMessageHandler : DelegatingHandler
    {
        private string Token;

        public DropBoxMessageHandler(string token)
            : base(new HttpClientHandler())
        {
            Token = token;
        }

        public DropBoxMessageHandler(HttpMessageHandler innerHandler)
            : base(innerHandler)
        {
        }

        protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
        {
            request.Headers.Add("Authorization", string.Format("Bearer {0}", Token));
            return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
        }
    }
}

En el código anterior vemos como hemos sobrescrito el método “SendAsync“, para añadir la cabecera “Authorization” con el valor “Bearer <TOKEN>”.

Una vez que tenemos el handler creado, hay que pasarlo como parámetro al constructor de la clase “HttpClient“.

            DropBoxMessageHandler handler = new DropBoxMessageHandler(token);
            HttpClient cliente = new HttpClient(handler);

{
"referral_link": "https://www.dropbox.com/referrals/r1a2n3d4m5s6t7",
"display_name": "John P. User",
"uid": 12345678,
"country": "US",
"quota_info": {
"shared": 253738410565,
"quota": 107374182400000,
"normal": 680031877871
}
}

Ahora usamos la librería “Newtonsoft.Json” (accesible vía nuget) para deserializar esta cadena json a un objeto .NET. En nuestro caso, hemos creado las clase “AccountInfo” usando la función Pegar JSON como clases” de Visual Studio.

namespace DropBoxSdk.Entidades
{

    public class AccountInfo
    {
        public string referral_link { get; set; }
        public string display_name { get; set; }
        public int uid { get; set; }
        public string country { get; set; }
        public Quota_Info quota_info { get; set; }
    }

    public class Quota_Info
    {
        public long shared { get; set; }
        public long quota { get; set; }
        public long normal { get; set; }
    }

}

Toda la lógica para la recuperación de los datos de la cuenta la hemos implementado en el método “ObtenerDatosCuentaAsync” de la clase “smpDropBoxApi

        public async Task<AccountInfo> ObtenerDatosCuentaAsync(string token,string idioma="es")
        {
            AccountInfo infoCuenta = new AccountInfo();

            DropBoxMessageHandler handler = new DropBoxMessageHandler(token);
            using (HttpClient cliente = new HttpClient(handler))
            {

                string url = string.Format("{0}?locale={1}", Declaraciones.URL_ACCOUNT_INFO, idioma);

                using (HttpResponseMessage respuestaHttp = await cliente.GetAsync(url).ConfigureAwait(false))
                {
                    RespuestaDropbox respuestaDropBox = await UtilidadesGenerales.ProcesarRespuestaAsync(respuestaHttp);

                    if (respuestaDropBox.Estado == EstadoDropBox.Correcto)
                    {
                        infoCuenta = await JsonConvert.DeserializeObjectAsync<AccountInfo>(respuestaDropBox.ContenidoRespuesta);
                    }
                }
            }

            return infoCuenta;
        }

En la web de desarrolladores de DropBox se puede encontrar más información sobre la petición account/info.

En la siguiente imagen se puede ver cómo va quedando nuestro ejemplo para Windows Phone 8.

dropbox_parte4_infocuenta_v1 dropbox_parte4_infocuenta_v2

En el siguiente enlace podéis descargar el código de ejemplo.