Visi贸n general
Contenido
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 SpringConnectionFactory
clase. Proporciona un conjunto de m茅todos para crearConnection
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.