Spring Twitter API

El uso de las redes sociales en nuestras aplicaciones web, hoy en día es algo imprescindible, por ello hemos decidido dedicar un tutorial a mostrar el modulo Spring Social, desarrollado con el fin de facilitar el proceso de integración de las distintas redes sociales a nuestras aplicaciones web, en este primer tutorial estudiaremos la API de Twitter, crearemos una aplicación capaz de integrarse con esta tecnología, podremos visualizar las publicaciones, consultar seguidores, publicar Tweets, etc., y mucho más.

Para hacer el desarrollo más sencillo utilizaremos el Framework Spring Boot, más Maven como herramienta de construcción y administración de dependencias.

Registrar aplicación en Twitter

Antes que nada lo primero que debemos hacer es registrar nuestra aplicación, inicia sesión con tu cuenta de Twitter y dirígete a la siguiente dirección: https://apps.twitter.com/

Primero presionamos el botón Create New App para crear nuestra aplicación.

crear app twitter

Rellenamos el formulario, especialmente los campos obligatorios, el primer campo define el nombre de la aplicación, el segundo la descripción de la misma, el campo Website establece la URL del sitio que intenta utilizar el servicio de Twitter, en nuestro caso usamos http://127.0.0.1:8080 que indica el servidor local y puerto usado por defecto por Spring Boot, ten presente que debes cambiarlo si tu aplicación se encuentra hospedada en un servidor web, por último Callback URL establece la URL a la que se redirige al usuario cuando este sea autorizado.

formulario twitter app

Al presionar Create your Twitter application tendremos esto, en la sección Application Settings encontraras el Access level, este indica el nivel de acceso que tendrá nuestra App, es decir lo que puede o no hacer, puede solo leer los tweets o puede también publicar.

twitter nueva app

En la pestaña Keys and Access Tokens encuentras los tokens de acceso requeridos para poder utilizar esta App, copia estos dos valor ya que debemos indicarlos en la aplicación.

twitter key id

Crear aplicación Spring Boot Twitter

Lo primero es agregar la dependencia spring-social-twitter querida para usar el respectivo servicio, además agregamos spring-boot-starter-thymeleaf para utilizar el motor de plantillas Thymelef para generar las vistas.

Luego agregamos y editamos el archivo src/main/resources/application.properties para incluir las credenciales que mostramos en la imagen anterior, appId corresponde al Consumer Key mientras que appSecret se refiere al Consumer Secret.

spring.social.twitter.appId=xxxxxxxxxxxxxxxxx
spring.social.twitter.appSecret=xxxxxxxxxxxxxxxxxxxxxxxxx

Ahora ya podemos trabajar en nuestro controlador, necesitaremos un objeto Twitter que podemos usar para acceder a cada una de las funciones de esta tecnología, leer lo tweets, publicar, obtener el perfil, etc.

@Controller
public class TwitterController {

    @Autowired
    private Twitter twitter;

    @Autowired
    private ConnectionRepository connectionRepository;

    @RequestMapping("/")
    public String tweets(Model model) {

        if (connectionRepository.findPrimaryConnection(Twitter.class) == null) {
            return "redirect:/connect/twitter";
        }
        
        List<Tweet> tweets = twitter.timelineOperations().getHomeTimeline();
        TwitterProfile profile = twitter.userOperations().getUserProfile();
        
        model.addAttribute("tweets", tweets);
        model.addAttribute("profile", profile);
        
        return "tweetsPage";
    }
}

Los beans Twitter y ConnectionRepository son creados y configurados por Spring Boot, solo necesitamos inyectarlos a nuestro controlador, el siguiente fragmento de código es usado para comprobar si tenemos una conexión disponible, si no así, redirigimos a la URL que le permitirá al usuario darle autorización a la App.

if (connectionRepository.findPrimaryConnection(Twitter.class) == null) {
    return "redirect:/connect/twitter";
}

Presionamos Autorizar la aplicación, puedes ver los permisos que le estas dando a la misma, se describe lo que puedo y no hacer la Aplicación. 

permitir app

Nuestra App consulta la información del perfil de usuario y la lista de Tweets, este es el código.

List<Tweet> tweets = twitter.timelineOperations().getHomeTimeline();
TwitterProfile profile = twitter.userOperations().getUserProfile();
        
model.addAttribute("tweets", tweets);
model.addAttribute("profile", profile);

Para conocer las distintas operaciones que puedes realizar visita la documentación de referencia.

Esto datos son enviados a la página /templates/tweetsPage.html que se define así:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <body>   
        <h3>Hola, <span th:text="${profile.name}">Usuario</span></h3>
        <h4>Tweets List</h4>
        <ul>
            <li th:each="tweet : ${tweets}" style="list-style: none;">
                <div class="tweet-container">
                    <img th:src="${tweet.user.profileImageUrl}" style="display: block; margin-bottom: 10px;"/>
                    <span th:text="${tweet.user.name}">Username</span>
                    <p th:text="${tweet.text}">Tweet</p>
                </div>
            </li>
        </ul>   
    </body>
</html>

El resultado obtenido, si nos conectamos a nuestra cuenta de Twitter: @TrProgramacion

app twitter spring

Debemos mencionar que adicionalmente creamos dos páginas /templates/connect/twitterConnect.html y además /templates/connect/twitterConnected.html los controladores de ambas son creados automáticamente por el Framework por lo que debemos asegurarnos de que tengan la ruta y nombre exactos.

Iremos a la página twitterConnect.html cuando nos estemos conectados a la cuenta, la misma muestra un botón que nos envía a la página de autorización mostrada previamente, por otra parte twitterConnected.html es la página a la que somos dirigidos luego de autorizar la App, la misma solo contiene un enlace a la página inicial de nuestra web.

Descargar ejemplo: springboot-twitter.zip

Comentarios

Temas relacionados

Entradas populares de este blog

tkinter Grid

Conectar SQL Server con Java

Histogramas OpenCV Python

Controles y Contenedores JavaFX 8 - I