Breaking

Post Top Ad

Your Ad Spot

martes, 9 de julio de 2019

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

Visión general

Ser capaz de acceder a las API de las principales plataformas de medios sociales se puede utilizar como una herramienta poderosa y útil. Afortunadamente, no es difícil hacerlo, especialmente utilizando Spring Boot, y más precisamente, el módulo Social de Spring .
Spring Social ofrece cuatro proyectos principales:
  • Primavera Social Core
  • Primavera Social Facebook
  • Primavera Social Twitter
  • Primavera Social LinkedIn
Cada uno de estos proyectos proporciona herramientas para comunicarse con sus respectivas API.
En este tutorial, confiaremos en Spring Social Facebookpara hacer una aplicación simple que autentique y autorice a un usuario, y luego les muestre su propia fuente de Facebook.

Prerrequisitos

Hay dos cosas necesarias para que este proyecto funcione.

Aplicación de arranque de primavera

Comenzaremos con una aplicación Spring Boot de estado predeterminada. Afortunadamente, al utilizar Spring Initializr o incluso el complemento integrado IntelliJ Idea Spring Initializr, podemos obtener fácilmente un proyecto de 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.
inicializacion de primavera

Desarrolladores de Facebook

Además, para que Spring Social pueda comunicarse con la API de Facebook, se requiere una aplicación de Facebook.
Para crear una aplicación de Facebook, debe tener una cuenta de desarrollador de Facebook .
Una vez que se haya registrado, puede agregar una nueva aplicación. Requiere solo un nombre y una dirección de correo electrónico de contacto y se ve así:
desarrolladores de facebook
Al abrir la pestaña de configuración después de seleccionar su aplicación, obtendrá la información requerida 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 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>  
Se incluye una dependencia para la base de datos H2simplemente porque Spring Boot requiere un origen de datos, y es el más fácil simplemente proporcionar uno para ello.

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.propertiesarchivo ubicado debajo src/maine ingrese:
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 establece dos beans cruciales para nuestra aplicación.
  • ConnectController - Esta clase administra el flujo de conexión para el proveedor de cuenta a servicio y maneja todas las solicitudes relacionadas con Facebook.
  • FacebookConnectionFactory- La implementación de Facebook de la ConnectionFactoryclase Spring Proporciona un conjunto de métodos para crear Connectioninstancias para Facebook.

Creando una conexión

Como se mencionó anteriormente, ConnectControlleres la principal fuerza laboral en esta área. Este controlador manejará nuestras solicitudes GET cuando queremos conectarnos a Facebook. Requiere solo dos simples viewspara funcionar correctamente - connect/facebookConnectconnect/facebookConnected.
Facebook puede ser sustituido aquí con cualquier otro ID de proveedor, como 'twitter', en cuyo caso se requeriría connect/twitterConnectuna connect/twitterConnectedvista.
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 ConnectControllerque la manejemos, y comenzará la autorización de OAuth .

Recuperar 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 una manera sencilla. Nos exige inyectar FacebookConnectionRepositoryen su constructor. La Facebookclase proporciona métodos básicos para la interacción con Facebook, mientras que la ConnectionRepositoryclase, como su nombre lo indica, es una interfaz de acceso a datos para Connectionobjetos.
La @RequestMappinganotación define dos cosas: el valory el método :
  • Valor - Corresponde al parámetro de solicitud que deseamos asignar.
  • Método : corresponde al tipo de método HTTP esperado.
connectionRepository.findPrimaryConnection(Facebook.class)solo será nulo si el usuario no autorizó nuestra aplicación para recuperar datos de Facebook. Si este es el caso, la aplicación simplemente vuelve a /connect/facebook.
El Userobjeto de la API de Spring Social Facebook se utiliza para almacenar los datos de nuestros usuarios. Este objeto puede contener toda la información pública del usuario, como el nombre y apellido, rango de edad, cumpleaños, ciudad natal, dirección de correo electrónico, etc.
Luego hacemos una PagedListde las Postsque corresponden al propio feed del usuario y lo agregamos como un atributo modelo a nuestra vista.
Ahora necesitamos definir la vista en la que procesamos 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">

        <h3 class="mt-5">Welcome, <span th:text="${userProfile.name}"></span>!</h3>

        <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. Facebook ya no admite esta funcionalidad e intentar obtener una lista de amigos en Spring simplemente devolverá una lista vacía.
Y con eso, se concluye esta aplicación. Vamos a ejecutarlo y ver el resultado.

Demostración de la aplicación

Después de desplegar la aplicación e ir a localhost:8080/connect/facebooknuestra aplicación, nos recibe y nos solicita que nos conectemos:
conectar
Al conectar, nos redirigen a Facebook y nos piden permiso para proporcionar esta aplicación con nuestros datos:
autorizar
Al seleccionar "Continuar", autenticamos la aplicación y nos redirigen a nuestra facebookConnected.htmlvista.
Desde aquí, podemos visitar nuestro feed:
conectado
Visitar nuestro feed nos muestra algunos de nuestros últimos mensajes:
alimentar

Funcionalidades adicionales

La primavera social no termina ahí. Hay muchas otras funcionalidades que ofrece además de revisar tu feed:
  • AchievementOperations - Proporciona operaciones para los logros de Facebook.
  • CommentOperations - Proporciona operaciones de CRUD para comentarios.
  • EventOperations - Proporciona operaciones CRUD para eventos, así como invitaciones.
  • FeedOperations - Recuperar y publicar en un muro de Facebook.
  • FriendOperations - Recuperar listas de amigos.
  • GroupOperations - Recuperar información de grupos (miembros, detalles, etc.)
  • LikeOperations - Recuperar y realizar Me gusta en mensajes, páginas, etc.
  • MediaOperations - Proporciona operaciones CRUD para medios como fotos / videos / álbumes.
  • OpenGraphOperations - Proporciona operaciones para la API de OpenGraph de Facebook.
  • PageOperations - Proporciona operaciones para las páginas de Facebook.
  • SocialContextOperations - Proporciona operaciones para el contexto social de un usuario.
  • TestUserOperations - Proporciona operaciones para crear y usar usuarios de prueba.
  • UserOperations - Recuperar información del usuario.
  • RestOperations - Se utiliza para colocar un encabezado de Autorización OAuth para tokens de acceso enviados a través de solicitudes.
Cada uno de estos proporciona conjuntos de métodos para su propósito designado, y colectivamente, se pueden utilizar para construir 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.

Recuperando otros perfiles

Al igual que hicimos cuando recuperamos nuestros propios datos, también podemos recuperar datos de otros usuarios al pasar 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);  
Dato curioso : la ID con el valor numérico '4' pertenece a Mark Zuckerberg y todas las ID anteriores a esta eran cuentas de prueba en los primeros días de Facebook.

Estado de publicación

Publicar en tu feed es tan fácil como llamar a un solo método con un Stringparámetro. Pero tenga en cuenta que solo puede publicar en feeds de usuarios que autentiquen la aplicación y no pueden publicar en las paredes 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 Stringque ingresó.
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 la alimentación de un amigo

Esta funcionalidad ha sido eliminada por Facebook en 2013.

Recuperar una lista de amigos

Esta funcionalidad ha sido eliminada por Facebook en 2014.

Conclusión

En este tutorial, nos sumergimos en Spring Social y, más precisamente, en el proyecto de Spring Social en Facebook.
Hicimos una cuenta de desarrollador de Facebook y una aplicación Spring Boot con una conexión a nuestra aplicación de Facebook.
Después, exploramos algunas de las funcionalidades del proyecto de Facebook, así como algunas otras funcionalidades que ofrece esta API.
El código fuente de este proyecto está disponible en GitHub .

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas