Crea un buscador en Twitter con Java utilizando Twitter4j


En este tutorial se explica de forma simple la configuración de twitter4j y un pequeño ejemplo de como crear un buscador de publicaciones en Twitter en Java utilizando el Api Twitter4j.

1. Configuración, para configurar Twitter4j es muy sencillo, el primer paso es descargar la dependencia de twitter4j. Para este ejemplo se utilizará la siguiente:

<dependency>
	<groupId>org.twitter4j</groupId>
	<artifactId>twitter4j-core</artifactId>
	<version>[4.0,)</version>
</dependency>

Del mismo modo se agregará el plugin que define que se utilizará la versión 1.8 de java:

<build>
	<plugins>
		<plugin>
			<artifactId>maven-compiler-plugin</artifactId>
			<version>3.2</version>
			<configuration>
				<source>1.8</source>
				<target>1.8</target>
			</configuration>
		</plugin>
	</plugins>
</build>

El siguiente paso para completar la configuración es crear un archivo llamado twitter4j.properties y colocarlo en el folder src/main/resources como se muestra a continuación:

oauth.consumerSecret=yourConsumerSecret
oauth.consumerKey=yourConsumerKey
oauth.accessToken=yourAccessToken
oauth.accessTokenSecret=yourAccessTokenSecret

Los valores a insertar en este archivo de propiedades se obtendrán creando una cuenta de desarrollador en la página https://apps.twitter.com/.

2. Crear lector de teclado, en el ejemplo se leerá la entrada del teclado el término a buscar en Twitter, para leer este valor se utilizará la clase QueryReader.java :

/**
 *
 */
package com.raidentrance.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @author raidentrance
 *
 */
public class QueryReader {
	public static String readLine() throws IOException {
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader reader = new BufferedReader(isr);
		return reader.readLine();
	}

	public static String readLine(String message) throws IOException {
		System.out.print(message);
		return readLine();
	}
}

3. Crear un TwitterController, este controller permitirá realizar acciones sobre Twitter y Status, para este ejemplo se utiliza para realizar la búsqueda y para imprimir las publicaciones.

/**
 *
 */
package com.raidentrance.controller;

import java.text.SimpleDateFormat;
import java.util.List;

import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;

/**
 * @author raidentrance
 *
 */
public class TwitterController {
	private Twitter twitter;
	private SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");

	public TwitterController() {
		twitter = TwitterFactory.getSingleton();
	}

	public List<Status> query(String query) throws TwitterException {
		QueryResult search = twitter.search(new Query(query));
		List<Status> tweets = search.getTweets();
		return tweets;
	}

	public void printStatus(Status status) {
		System.out.println("----------------------------------------------------------");
		System.out.println(String.format("User [%s]", status.getUser().getScreenName()));
		System.out.println(status.getText());
		System.out.println(sdf.format(status.getCreatedAt()));
		System.out.println(String.format("RT[%d] FAV[%d]", status.getRetweetCount(), status.getFavoriteCount()));
		System.out.println("----------------------------------------------------------");
	}

	public void printStatus(List<Status> status) {
		for (Status tweet : status) {
			printStatus(tweet);
		}
	}

}

4. Probando todo junto,a continuación se presenta la clase que integrará los componentes para realizar el buscador de Twitter:

/**
 *
 */
package com.raidentrance;

import java.io.IOException;
import java.util.List;
import com.raidentrance.controller.TwitterController;
import com.raidentrance.util.QueryReader;
import twitter4j.Status;
import twitter4j.TwitterException;

/**
 * @author raidentrance
 *
 */
public class TwitterSearchApplication {

	public static void main(String[] args) throws IOException, TwitterException {
		TwitterController controller = new TwitterController();
		String command = QueryReader.readLine("Query in twitter (quit for exit)->>");
		while (!command.equals("quit")) {
			List<Status> result = controller.query(command);
			controller.printStatus(result);
			command = QueryReader.readLine("Query in twitter: ");
		}
	}

}

5.- Salida, una vez que se ejecuta la aplicación se obtendrá un prompt como el siguiente:

Query in twitter (quit for exit)->>

En este se debe escribir el término que se desea buscar en Twitter y presionar enter. Una vez hecho esto se presentará la lista de resultados como se muestra a continuación y se volverá a imprimir el prompt para realizar una nueva búsqueda, esto se repetirá hasta que se escriba la palabra quit.

En este ejemplo se utilizó la palabra cerveza.

----------------------------------------------------------
User [MoisesEspinola]
RT @elcosodelapizza: La cerveza sin alcohol se inventó para acompañar a las milanesas de soja y a una vida sin gracia.
21/09/2016 12:41:37
RT[1078] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [diario_noroeste]
Diarionoroeste.es: Cerveza tipo Summer Ale: qué es y por qué se inventó https://t.co/lucys7LTVB
21/09/2016 12:41:27
RT[0] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [CarrieAdlertw]
@kajalnapalm añadele una buena cerveza y te lo compro con los ojos cerrados
21/09/2016 12:41:20
RT[0] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [epistemiaetica]
#BirraBat , #bi eta #hiru... hay que tomarse más de una cerveza para no alterarse con las preguntas de @oaranzabal ...sigo sorprendiéndome 😕
21/09/2016 12:41:18
RT[0] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [AgusComper]
Que rica era la cerveza de ayer loco
21/09/2016 12:41:10
RT[0] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [LuisRamosRamos1]
Beber cerveza sería más saludable que tomar leche, según estudio https://t.co/70JgpQEZXd
21/09/2016 12:41:07
RT[0] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [angie_posadas]
RT @MisaelAstesano: @angie_posadas tendrías que estar tomando esa cerveza conmigo
21/09/2016 12:41:07
RT[1] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [edwardsensation]
Hoy Miércoles Nueva Sesión De Boys And Gilrs En Deluxe High Class Desde las 20:00 Hrs Con Ofertas de Cerveza... https://t.co/K8trx5IA3E
21/09/2016 12:40:57
RT[0] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [JRS_RIVER]
RT @Americoriver83: @GlodeVillegas @JRS_RIVER @Sergio3712ok @enriqueguzmn554 @NoreBelleza @DominguezRuben8 @laturcayug @ralphrod521 @hayvie…
21/09/2016 12:40:43
RT[1] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [Cele_Ga]
Que lindo día para ahogarse en cerveza, caipiriña y demás 😋 🍻🍹🍸
21/09/2016 12:40:42
RT[0] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [edwardsensation]
Hoy Miércoles Nueva Sesión De Boys And Gilrs En Deluxe High Class Desde las 20:00 Hrs Con Ofertas de Cerveza... https://t.co/8p4zp2HWmN
21/09/2016 12:40:41
RT[0] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [pili_neko]
Acabo de probar la cerveza de mantequilla
Es como los caramelos de cafe pero con algo de vainilla y gas...
Me gusta https://t.co/IiwepQ5VZn
21/09/2016 12:40:37
RT[0] FAV[1]
----------------------------------------------------------
----------------------------------------------------------
User [Fxbri]
El día pide una buena cerveza bien fría
21/09/2016 12:40:35
RT[0] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [AyelenSlb]
Que boludes hacen control de alcolemia para ir a las plazas y en un mes hacen fiesta de la cerveza en toda la plata  todos los findes
21/09/2016 12:40:27
RT[0] FAV[0]
----------------------------------------------------------
----------------------------------------------------------
User [Americoriver83]
@GlodeVillegas @JRS_RIVER @Sergio3712ok @enriqueguzmn554 @NoreBelleza @DominguezRuben8 @laturcayug @ralphrod521 @hayvieramon hoy cerveza.jua
21/09/2016 12:40:25
RT[1] FAV[0]
----------------------------------------------------------

La información que se imprime es la siguiente:

  • Nombre de usuario
  • Texto de la publicación
  • Fecha de publicación
  • Número de RT y número de Favoritos

Puedes encontrar el código completo del ejemplo en el siguiente enlace:

https://github.com/raidentrance/twitter4j-example

Autor: Alejandro Agapito Bautista

Twitter: @raidentrance

Contacto:raidentrance@gmail.com

Anuncios

1 comentario »

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s