Inicio > Java > Como twittear con Java

Como twittear con Java

Si tenéis alguna duda no olvidéis que abajo podéis dejar vuestros comentarios

Lo necesario

Es necesario descargar una librería para poder twittear con Java. Existen varías librerías para Java pero en este caso nosotros vamos a hacer uso de la librería Twitter4J (la recomendada por twitter).

Una vez descargado el zip, lo descomprimís. Aparecerá una carpeta llamada lib donde tendremos que adjuntar el archivo a un nuevo proyecto. Aquí tenéis un tutorial de como poder añadir librerías externas a un proyecto en Eclipse.

Una vez añadida la librería o antes de esto debemos crearnos una aplicación en Twitter para que este nos de permisos para poder usar su API. Para crear una nueva aplicación entramos en https://dev.twitter.com/ y nos logueamos.
Una vez logueados situamos el ratón sobre nuestro nombre de usuario y seleccionamos My Applications.

Hecho esto nos aparecerá la siguiente ventana donde pulsaremos Create a new application

Rellenáis todos los campos y tendréis vuestra “aplicación” completada. Dentro de la aplicación hay datos que son necesarios para poder comunicarnos con Twitter desde nuestra aplicación en Java


Nota: Si no aparece “Read, write, and direct messages” modificadlo desde la configuración de la aplicación.

Dando permisos

El próximo código solo tendréis que ejecutarlo una vez. Lo que hace el código es dar permisos de un usuario concreto a la aplicación Java. Cuando se ejecute, se os abrirá el navegador web que tengáis por defecto y si estáis logueados en Twitter os preguntará si queréis dar permisos a vuestra aplicación. La página os devolverá un código PIN. Copiad el código y volved a la consola de Java donde estará esperando que pongáis el código.

Una vez introducido el código PIN en la consola esta mostrará los siguientes dos datos:

  • Access token
  • Access token secret

Copiad esos datos pues serán imprescindibles para la comunicación con el cliente.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import twitter4j.conf.ConfigurationBuilder;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.auth.AccessToken;
import twitter4j.auth.RequestToken;

/**
 * @author Antonio Suárez Cortés
 */
public class TwitterJ
{
	/**
	 * @param args
	 * @throws IOException
	 * @throws TwitterException
	 */

	public static void main(String[] args) throws IOException, TwitterException
	{
		ConfigurationBuilder cb = new ConfigurationBuilder();
		cb.setDebugEnabled(true)
			.setOAuthConsumerKey("La Consumer Key suministrada por Twitter")
			.setOAuthConsumerSecret("El Consumer Secret suministrada por Twitter");
		Twitter twitter = new TwitterFactory(cb.build()).getInstance();

		// Si están seteados el Token y el TokenSecret la siguiente
		// linea lanzará IllegalStateException
		RequestToken requestToken = twitter.getOAuthRequestToken();
		System.out.println("Obtenido request token.");
		System.out.println("Request token: " + requestToken.getToken());
		System.out.println("Request token secret: " + requestToken.getTokenSecret());
		AccessToken accessToken = null;

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		while (null == accessToken)
		{
			String osName = System.getProperty("os.name");
			String url = requestToken.getAuthorizationURL();
			System.out.println("La siguiente URL será abierta en su navegador:");
			System.out.println(requestToken.getAuthorizationURL());
			if (osName.contains("Windows"))
				Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
			else
				if (osName.contains("Mac OS"))
					Runtime.getRuntime().exec("open " + url);
				else
					if (osName.indexOf("nix") >= 0 || osName.indexOf("nux") >= 0)
					{

						String[] browsers =
						{ "epiphany", "firefox", "mozilla", "konqueror", "netscape", "opera", "links", "lynx" };

						StringBuffer cmd = new StringBuffer();
						for (int i = 0; i < browsers.length; i++)
							cmd.append((i == 0 ? "" : " || ") + browsers[i] + " \"" + url + "\" ");

						Runtime.getRuntime().exec(new String[]
						{ "sh", "-c", cmd.toString() });
					}
			System.out.print("Introduce el PIN y pulsa enter.\n[PIN]: ");
			String pin = br.readLine();

			if (pin.length() > 0)
				accessToken = twitter.getOAuthAccessToken(requestToken, pin);
			else
				// Si eres una aplicación de confianza (una multinacional por
				// ejemplo) no necesitas PIN, por eso aparece esta línea
				accessToken = twitter.getOAuthAccessToken(requestToken);
		}
		System.out.println("Obtenido el access token.");
		System.out.println("Access token: " + accessToken.getToken());
		System.out.println("Access token secret: " + accessToken.getTokenSecret());

		System.exit(0);

	}
}

El código final

En este punto del tutorial disponemos de los siguientes datos:

  • Consumer Key
  • Consumer Secret
  • Access token
  • Access token secret

Eso es todo lo necesario para poder comunicarnos con la cuenta de Twitter asociada a ese Access token. Por tanto para cada cuenta a la que queramos acceder desde Java es necesario disponer del Access token de esta.

Y ya por fin el tan ansiado código!!

import twitter4j.Paging;
import twitter4j.ResponseList;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.conf.ConfigurationBuilder;

public class Uso
{
	public static void main(String ar[]) throws TwitterException
	{
		Twitter twitter;
		ConfigurationBuilder cb = new ConfigurationBuilder();
		//Aquí deberéis sustituir vuestras key, secret, token y tokenSecret.
		//Estas son las claves de mi cuenta @SuarezDeveloper
		cb.setDebugEnabled(true)
			.setOAuthConsumerKey("ZTOryiCDLDa3afRmPizA")
			.setOAuthConsumerSecret("eM7pQwv2ObKYDZzrbeodM9WITAjfKa31N5xeYB6Fg")
			.setOAuthAccessToken("547225659-dO5D14zJUJPgKBuQCdGcUEslK7itTShuvMsRRoE")
			.setOAuthAccessTokenSecret("rLgmOhvC4VOZdITzJamIfY99v7V3Ycy5uJP8M5ySFI");
		twitter = new TwitterFactory(cb.build()).getInstance();
		
		//Recuperar listado de ultimos tweets escritos
		//El paging sirve para decir el número máx de tweets que quieres recuperar
		Paging pagina = new Paging();
		pagina.setCount(50);
		
		//Recupera como máx 50 tweets escritos por tí
		ResponseList<Status> listado = twitter.getUserTimeline(pagina);
		for (int i = 0; i < listado.size(); i++)
			System.out.println(listado.get(i).getText());
		
		//Recupera como máx los ultimos 50 tweets de tus tablon de novedades
		listado = twitter.getHomeTimeline(pagina);
		for (int i = 0; i < listado.size(); i++)
			System.out.println(listado.get(i).getText());
		
		//Actualizar tu estado
		Status tweetEscrito = twitter.updateStatus("Este tweet ha sido mandado desde el manual de https://suarezdeveloper.wordpress.com/2012/04/12/como-twittear-con-java/ #SuarezDeveloperTwitter");		
	}
}

Esto son solo 3 de las miles de cosas que podemos hacer con estas librerías. Si queréis hacer algo en particular y no sabéis como hacerlo, podéis preguntarlo por aquí o por twitter mencionando a @SuarezDeveloper

Anuncios
Categorías:Java
  1. 07/06/2012 en 10:05 PM

    Que buen tutorial, y si quisiera saber la ubicacíon geográfica de un usuario que escribió un tweet, ¿La librería lo permite hacer?¿De que forma? 🙂

    • 08/06/2012 en 2:30 AM

      Pues he estado intentándolo pero no lo he conseguido.
      No entiendo muy bien porque no funciona el código.
      Te pongo lo que he intentado

      StatusUpdate update = new StatusUpdate("Prueba java");
      //update.setDisplayCoordinates(true);
      update.setLocation(new GeoLocation(20, -20));
      		
      objetoTwitter.updateStatus(update); // En lugar de postear un String podemos postear un StatusUpdate con la localización
      
  2. Antony
    15/06/2012 en 6:00 PM

    Muchas gracias, muy buen tutorial!!

  3. 15/08/2012 en 2:32 AM

    Saludos @SuarezDeveloper excelente post, Podrías dejarme un link o referencia sobre el uso de los métodos que permite utilizar esta api de twitter.Necesito saber como publicar en twitter desde mi aplicación de Java.

  4. 15/08/2012 en 3:04 AM

    La última linea del código es la que realiza esa acción.
    Status tweetEscrito = twitter.updateStatus(“¡Mira mama, sin manos!”);

  5. 14/09/2012 en 7:51 PM

    Excelente ……. Felicitaciones Buen post
    me sirvió muchísimo

  6. david
    01/09/2015 en 6:34 AM

    super cool 🙂 gracias

  7. Alfon
    24/06/2016 en 5:37 AM

    Hola!!! me gustaria saber como buscar un tweet o contacto desde mi app. ¿Como seria?? Gracias!!!

  1. No trackbacks yet.

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 )

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 )

Google+ photo

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

Conectando a %s

A %d blogueros les gusta esto: