C贸mo acceder a la API de Facebook con Java y Spring Boot

    Visi贸n general

    La posibilidad de acceder a las API desde las principales plataformas de redes sociales se puede utilizar como una herramienta poderosa y 煤til. Afortunadamente, no es dif铆cil hacerlo, especialmente con Spring Boot, y m谩s precisamente, el Social de Spring m贸dulo.

    Spring Social ofrece cuatro proyectos principales:

    • Spring Social Core
    • Spring Social Facebook
    • Twitter social de Spring
    • Spring Social LinkedIn

    Cada uno de estos proyectos proporciona herramientas para comunicarse con sus respectivas API.

    En este tutorial, confiaremos en Spring Social Facebook para hacer una aplicaci贸n simple que autentique y autorice a un usuario, y luego le muestre su propio feed de Facebook.

    Prerrequisitos

    Hay dos cosas necesarias para que este proyecto funcione.

    Aplicaci贸n Spring Boot

    Comenzaremos con una aplicaci贸n Spring Boot de estado predeterminado. Afortunadamente, usando Spring Initializr o incluso el incorporado Idea IntelliJ Spring Initializr plugin, podemos obtener f谩cilmente un proyecto esqueleto sobre el que construir.

    Cualquiera que sea la opci贸n que elija, seleccione las dependencias Web y Thymeleaf, agregaremos las otras m谩s adelante.

    Desarrolladores de Facebook

    Adem谩s, para que Spring Social pueda comunicarse con la API de Facebook, requiere una aplicaci贸n de Facebook.

    Para crear una aplicaci贸n de Facebook, debe tener una Desarrollador de Facebook cuenta.

    Una vez que se haya registrado, puede agregar una nueva aplicaci贸n. Solo requiere un nombre y una direcci贸n de correo electr贸nico de contacto y se ve as铆:

    Al abrir la pesta帽a de configuraci贸n despu茅s de seleccionar su aplicaci贸n, obtendr谩 la informaci贸n necesaria para configurar la conexi贸n entre Spring Social y su aplicaci贸n, como el “ID de la aplicaci贸n” y el “Secreto de la aplicaci贸n”.

    Dependencias de Maven

    Suponiendo que haya configurado correctamente su aplicaci贸n Spring Boot, ahora podemos agregar el resto de las dependencias necesarias:

    <dependencies>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
        
      <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.190</version>
      </dependency>
        
      <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-facebook</artifactId>
        <version>3.0.0.M1</version>
      </dependency>
        
      <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-core</artifactId>
        <version>2.0.0.M2</version>
      </dependency>
      <dependency>
        <groupId>org.springframework.social</groupId>
        <artifactId>spring-social-config</artifactId>
        <version>2.0.0.M2</version>
      </dependency>
        
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
      </dependency>
    </dependencies>
    

    Una dependencia para el Base de datos H2 se incluye simplemente porque Spring Boot requiere una fuente de datos, y es m谩s f谩cil proporcionar una.

    Accediendo a la API de Facebook

    Habilitando Facebook

    Se requiere una conexi贸n entre su aplicaci贸n Spring y la aplicaci贸n de Facebook para continuar.

    Para configurar la conexi贸n, abra el application.properties archivo ubicado debajo src/main y entrada:

    spring.social.facebook.appId = // your application ID
    spring.social.facebook.appSecret = // your application secret
    

    La definici贸n de estas dos propiedades alerta a Spring Social Facebook y configura dos beans cruciales para nuestra aplicaci贸n.

    • ConnectController – Esta clase administra el flujo de conexi贸n de la cuenta al proveedor de servicios y maneja todas las solicitudes relacionadas con Facebook.
    • FacebookConnectionFactory – La implementaci贸n de Facebook de Spring ConnectionFactory clase. Proporciona un conjunto de m茅todos para crear Connection instancias para Facebook.

    Crear una conexi贸n

    Como se mencion贸 anteriormente, el ConnectController es la principal fuerza laboral en esta 谩rea. Este controlador manejar谩 nuestras solicitudes GET cuando queramos conectarnos a Facebook. Requiere solo dos simples views para funcionar correctamente – connect/facebookConnect y connect/facebookConnected.

    Facebook se puede sustituir aqu铆 con cualquier otro ID de proveedor, como ‘twitter’, en cuyo caso ser铆a necesario connect/twitterConnect y un connect/twitterConnected ver.

    Definamos estos puntos de vista nosotros mismos:

    conexion a Facebook:

    <html xmlns:th="www.thymeleaf.org">
    <head>
        <!-- Bootstrap core CSS -->
        <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
        <title>Spring Boot Facebook Application</title>
    </head>
    
    <body>
    <!-- Page Content -->
    <div class="container">
        <div class="row">
            <div class="col-lg-12 text-center">
                <h1 class="mt-5">Connect to Facebook:</h1>
                <p class="lead">By clicking connect, you will be asked to authorize the application.</p>
    
                <form action="/connect/facebook" method="POST">
                    <input type="hidden" name="scope" value="user_posts"/>
    
                    <button class="btn btn-default" type="submit">Connect</button>
                </form>
            </div>
        </div>
    </div>
    </body>
    </html>
    

    facebook Conectado:

    <html xmlns:th="www.thymeleaf.org">
    <head>
        <!-- Bootstrap core CSS -->
        <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
        <title>Spring Boot Facebook Application</title>
    </head>
    
    <body>
    <!-- Page Content -->
    <div class="container">
        <div class="row">
            <div class="col-lg-12 text-center">
                <h1 class="mt-5">Connected successfully!</h1>
                <p class="lead">Welcome to facebook!</p>
    
                <p>You can now browse your own feed <a href="/feed">here</a>.</p>
                <p>You can also see your friend list <a href="/friends">here</a>.</p>
            </div>
        </div>
    </div>
    </body>
    </html>
    

    Una vez que haga clic en “Conectar” en la primera vista, el formulario enviar谩 una solicitud POST para nuestro ConnectController para manejar, y el OAuth comienza la autorizaci贸n.

    Recuperando datos de Facebook

    Con una conexi贸n de Facebook completamente configurada, podemos seguir adelante y escribir nuestro controlador principal:

    @Controller
    public class MainController {
        private Facebook facebook;
        private ConnectionRepository connectionRepository;
    
        public MainController(Facebook facebook, ConnectionRepository connectionRepository) {
            this.facebook = facebook;
            this.connectionRepository = connectionRepository;
        }
    
        @RequestMapping(value = "feed", method = RequestMethod.GET)
        public String feed(Model model) {
    
            if(connectionRepository.findPrimaryConnection(Facebook.class) == null) {
                return "redirect:/connect/facebook";
            }
    
            User userProfile = facebook.userOperations().getUserProfile();
            model.addAttribute("userProfile", userProfile);
            PagedList<Post> userFeed = facebook.feedOperations().getFeed();
            model.addAttribute("userFeed", userFeed);
            return "feed";
        }
    }
    

    Este controlador funciona de forma sencilla. Requiere que nos inyectemos Facebook y ConnectionRepository en su constructor. los Facebook La clase proporciona m茅todos b谩sicos para la interacci贸n con Facebook, mientras que ConnectionRepository clase, como su nombre lo indica, es una interfaz de acceso a datos para Connection objetos.

    los @RequestMapping La anotaci贸n define dos cosas: la valor y el m茅todo:

    • Valor – Corresponde al par谩metro de solicitud que deseamos mapear.
    • M茅todo – Corresponde al tipo de m茅todo HTTP esperado.

    connectionRepository.findPrimaryConnection(Facebook.class) solo ser谩 nulo si el usuario no autoriz贸 a nuestra aplicaci贸n a recuperar datos de Facebook. Si este es el caso, la aplicaci贸n simplemente vuelve a /connect/facebook.

    los User El objeto de la API de Spring Social Facebook se utiliza para almacenar los datos de nuestro usuario. Este objeto puede contener toda la informaci贸n p煤blica del usuario, como el nombre y apellido, rango de edad, fecha de nacimiento, ciudad natal, direcci贸n de correo electr贸nico, etc.

    Entonces hacemos un PagedList de Posts que corresponda al feed del usuario y agregarlo como un atributo de modelo a nuestra vista.

    Ahora necesitamos definir la vista en la que renderizamos esta informaci贸n con Thymeleaf.

    feed.html:

    <html xmlns:th="www.thymeleaf.org">
    
    <head>
        <!-- Bootstrap core CSS -->
        <link th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
        <title>Spring Boot Facebook Application</title>
    </head>
    <body>
        <div class="container">
    
            <h2 class="mt-5">Welcome, <span th:text="${userProfile.name}"></span>!</h2>
    
            <h4 class="mt-5">Facebook Feed:</h4>
            <div class="row">
                <div class="col-lg-12 text-center" th:each="post:${userFeed}" style="border:1px">
                    <b class="lead" th:text="${post.from.name}">from</b> posted:
                    <p class="lead" th:text="${post.message}">message text</p>
                    <img th:if="${post.picture}" th:src="${post.picture}" class="img-thumbnail"/>
                    <hr>
                </div>
            </div>
        </div>
    </div>
    </body>
    </html>
    

    Nota: Desde la versi贸n 2.0 de Facebook, se elimin贸 la capacidad de recuperar una lista de amigos de Facebook. Esta funcionalidad ya no es compatible con Facebook y tratar de obtener una lista de amigos en Spring simplemente devolver谩 una lista vac铆a.

    Y con eso, se concluye esta aplicaci贸n. Ejec煤telo y veamos el resultado.

    Demostraci贸n de la aplicaci贸n

    Despu茅s de implementar la aplicaci贸n e ir a localhost:8080/connect/facebook somos recibidos por nuestra aplicaci贸n pidi茅ndonos que nos conectemos:

    Al conectarnos, somos redirigidos a Facebook, pidi茅ndonos permiso para proporcionar nuestros datos a esta aplicaci贸n:

    Al seleccionar “Continuar”, autenticamos la aplicaci贸n y nos redirigen a nuestra facebookConnected.html ver.

    Desde aqu铆, podemos visitar nuestro feed:

    Visitar nuestro feed nos muestra algunas de nuestras 煤ltimas publicaciones:

    Funcionalidades adicionales

    Spring Social no termina ah铆. Hay muchas otras funcionalidades que ofrece adem谩s de verificar su feed:

    • AchievementOperations – Proporciona operaciones para los logros de Facebook.
    • CommentOperations – Proporciona operaciones CRUD para comentarios.
    • EventOperations – Proporciona operaciones CRUD para eventos, as铆 como invitaciones.
    • FeedOperations – Recuperar y publicar en un muro de Facebook.
    • FriendOperations – Recuperaci贸n de listas de amigos.
    • GroupOperations – Recuperar informaci贸n de grupos (miembros, detalles, etc.)
    • LikeOperations – Recuperar y realizar me gusta en publicaciones, p谩ginas, etc.
    • MediaOperations – Proporciona operaciones CRUD para medios como fotos / videos / 谩lbumes.
    • OpenGraphOperations – Proporciona operaciones para la API OpenGraph de Facebook.
    • PageOperations – Proporciona operaciones para p谩ginas de Facebook.
    • SocialContextOperations – Proporciona operaciones para el contexto social de un usuario.
    • TestUserOperations – Proporciona operaciones para crear y utilizar usuarios de prueba.
    • UserOperations – Recuperar informaci贸n del usuario.
    • RestOperations – Se utiliza para colocar un encabezado de autorizaci贸n OAuth para los tokens de acceso enviados a trav茅s de solicitudes.

    Cada uno de estos proporciona conjuntos de m茅todos para el prop贸sito designado y, en conjunto, se pueden utilizar para crear herramientas poderosas.

    Cubrir todo esto estar铆a fuera del alcance de este blog, por lo que cubriremos solo los m谩s importantes y 煤tiles, como publicar en muros, leer feeds, etc.

    Recuperar otros perfiles

    Al igual que hicimos cuando recuperamos nuestros propios datos, tambi茅n podemos recuperar datos de otros usuarios pasando su ID como par谩metro:

    // Retrieves authenticated user's profile
    User profile = facebook.userOperations().getUserProfile();
    
    // Retrieves the user's profile whose id is 4.
    User profile = facebook.userOperations().getUserProfile(4);
    

    Hecho de la diversi贸n: La identificaci贸n con el valor num茅rico ‘4’ pertenece a Mark Zuckerberg y todas las identificaciones anteriores a esta eran cuentas de prueba en los primeros d铆as de Facebook.

    Estados de publicaci贸n

    Publicar en su feed es tan f谩cil como llamar a un 煤nico m茅todo con un String par谩metro. Pero tenga en cuenta que solo puede publicar en feeds de usuarios que autentican la aplicaci贸n y que no pueden publicar en los muros de sus amigos.

    Es posible que desee utilizar esto para escribir servicios automatizados como IFTT o Buffer:

    facebook.feedOperations().updateStatus("Hello World!!!");
    

    Esto simplemente publicar谩 un solo estado con el String que ingresa.

    Otra forma de publicar un estado es publicar un enlace:

    FacebookLink facebookLink = new FacebookLink("link", "name", "caption", "description");
    facebook.feedOperations().post("Posting a link!", facebookLink);
    

    Publicar en el feed de un amigo

    Esta funcionalidad ha sido eliminada por Facebook en 2013.

    Recuperando una lista de amigos

    Esta funcionalidad fue eliminada por Facebook en 2014.

    Conclusi贸n

    En este tutorial, nos sumergimos en Spring Social y, m谩s precisamente, en el proyecto Spring Social Facebook.

    Creamos una cuenta de desarrollador de Facebook y una aplicaci贸n Spring Boot con una conexi贸n a nuestra aplicaci贸n de Facebook.

    Posteriormente, exploramos algunas de las funcionalidades del proyecto de Facebook por nuestra cuenta, as铆 como algunas otras funcionalidades que ofrece esta API.

    El c贸digo fuente de este proyecto est谩 disponible en GitHub.

     

    Etiquetas:

    Deja una respuesta

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