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

C

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.

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con tus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad