[Facebook SDK .NET] Leer las últimas publicaciones (VII)

En esta ocasión vamos a ver como recuperar las últimas entradas que ha publicado un usuario. Para ello necesitamos el token de acceso y vamos a usar la librería Facebook SDK .NET con Graph API.

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

1. Crear aplicación Facebook.

2. Obtener Token de acceso.

3. Graph API

4. Obtener información básica de una cuenta facebook.

5. Obtener la lista de amigos

6. Buscar Amigos

7. Obtener las publicaciones del muro (actual)

8. Publicar una nueva entrada en el muro

Para acceder a las últimas publicaciones, vamos a usar el método ObtenerEntradasAsync de la clase smpFacebookApi.

        public async Task<Publicaciones> ObtenerEntradasAsync(string nombreUsuario="me",int numRegistros=50)
        {
            if (string.IsNullOrEmpty(this.TokenAcceso))
                throw new Exception("No ha ha definido smpFaceBookApi.TokenAcceso");

            Facebook.FacebookClient clienteFB = new Facebook.FacebookClient(this.TokenAcceso);

            Publicaciones publicaciones = new Publicaciones();

            dynamic resultado = await clienteFB.GetTaskAsync(string.Format(@"\{0}\feed?limit={1}", nombreUsuario,numRegistros));
            if (resultado != null)
            {
                foreach (dynamic feed in resultado.data)
                {
                    PublicacionFacebook post = new PublicacionFacebook();
                    post.id = feed.id ?? string.Empty;
                    post.from.name = (feed.from!=null ? (feed.from.name ?? string.Empty) : string.Empty);
                    post.from.id = (feed.from != null ? (feed.from.id ?? string.Empty) : string.Empty);
                    post.story = feed.story ?? string.Empty;
                    post.picture = feed.picture ?? string.Empty;
                    post.link = feed.link ?? string.Empty;
                    post.name = feed.name ?? string.Empty;
                    post.caption = feed.caption ?? string.Empty;
                    if (feed.properties != null)
                    {
                        foreach (dynamic propiedad in feed.properties)
                        {
                            Propiedad prop = new Propiedad();
                            prop.name = propiedad.name ?? string.Empty;
                            prop.text = propiedad.text ?? string.Empty;
                            prop.href = propiedad.href ?? string.Empty;
                            post.properties.Add(prop);
                        }
                    }
                    post.icon = feed.href ?? string.Empty;
                    if (feed.actions != null)
                    {
                        foreach (dynamic action in feed.actions)
                        {
                            Action act = new Action();
                            act.name = action.name ?? string.Empty;
                            act.link = action.link ?? string.Empty;
                            post.actions.Add(act);
                        }
                    }
                    post.privacy.value = (feed.privacy != null ? (feed.privacy.value ?? string.Empty) : string.Empty);
                    post.type = feed.type ?? string.Empty;
                    post.status_type = feed.status_type ?? string.Empty;
                    post.object_id = feed.object_id ?? string.Empty;
                    post.application.name = (feed.application != null ? (feed.application.name ?? string.Empty) : string.Empty);
                    post.application.id = (feed.application != null ? (feed.application.id ?? string.Empty) : string.Empty);

                    publicaciones.lstResultados.Add(post);
                }
                if (resultado.paging != null)
                {
                    if (!string.IsNullOrEmpty(resultado.paging.next))
                    {
                        publicaciones.PaginaSiguiente = resultado.paging.next;
                    }
                    if (!string.IsNullOrEmpty(resultado.paging.previous))
                    {
                        publicaciones.PaginaAnterior = resultado.paging.previous;
                    }

                }
            }
            return publicaciones;
        }

Al igual que en las entregas anteriores, nuestra petición es de lectura y por tanto vamos a usar el método GetTaskAsync de la clase Facebook.FacebookClient con una petición con el siguiente formato:

\<usuario>\feed?limit=<limite>

Lo único a destacar, es que hemos creado la clase PublicacionFacebook para mapear los resultados retornados por GetTaskAsync. En el siguiente enlace se puede ver la descripción de cada uno de los campos a mapear.

A continuación, se muestra el código de la clase PublicacionFacebook (creada usando la función “Pegar JSON como clases” y tomando los datos de la utilidad Graph Api Explorer)

    public class PublicacionFacebook
    {
        public string id { get; set; }
        public From from { get; set; }
        public string story { get; set; }
        public string picture { get; set; }
        public string link { get; set; }
        public string name { get; set; }
        public string caption { get; set; }
        public List<Propiedad> properties { get; set; }
        public string icon { get; set; }
        public List<Action> actions { get; set; }
        public Privacy privacy { get; set; }
        public string type { get; set; }
        public string status_type { get; set; }
        public string object_id { get; set; }
        public Aplicacion application { get; set; }

        public PublicacionFacebook()
        {
            from = new From();
            properties = new List<Propiedad>();
            actions =new List<Action>();
            privacy = new Privacy();
            application = new Aplicacion();
        }
    }

    public class From
    {
        public string name { get; set; }
        public string id { get; set; }
    }

    public class Privacy
    {
        public string value { get; set; }
    }

    public class Aplicacion
    {
        public string name { get; set; }
        public string _namespace { get; set; }
        public string id { get; set; }
    }

    public class Propiedad
    {
        public string name { get; set; }
        public string text { get; set; }
        public string href { get; set; }
    }

    public class Action
    {
        public string name { get; set; }
        public string link { get; set; }
    }

En el siguiente enlace se puede descargar el código de ejemplo.