Al igual que la mayoría de servicios web, Twitter ofrece la posibilidad desde cualquier cliente manejar todos sus servicios gracias a la publicación de un API REST mediante la cual se accede a todo el contenido de la plataforma. Desde publicar tweets hasta manejar los mensajes director o acceder a información de tweets publicados por cualquier persona. Para ello lo que se debe hacer es registrar una aplicación desde la consola de desarrollo, la cual nos dará los token de acceso a dicha API. La creación de ls aplicación se realiza desde la url https://apps.twitter.com . Una vez se obtienen las claves tan solo se debe utilizar de forma correcta cada uno de los métodos. Hay que tener en cuenta que para poder utilizar esta api deben estar compiladas las librerías de que permiten tanto realizar conexiones HTTP como procesarlas. Sin embargo existe alguna librería que facilita el trabajo realizando el trabajo de conexión de forma interna. Para ello se compila en el proyecto la librería twitter4j. Esta librería se basa en una conexión de cuenta sobre la que se realizan las operaciones.

Lo primero que se debe hacer es configurar la conexión con las claves obtenidas en la creación de la app twitter con un objeto de tipo Configuration

configurationBuilder = new ConfigurationBuilder();
configurationBuilder.setDebugEnabled(true);
configurationBuilder.setOAuthConsumerKey("XXXXX");
configurationBuilder.setOAuthConsumerSecret("XXXXX");
configurationBuilder.setOAuthAccessToken("XXXXX");
configurationBuilder.setOAuthAccessTokenSecret("XXXXX");

Con este objeto creado se implemente un objeto de tipo TwitterFactory y un objeto de tipo Twitter. El primero permite el acceso a la información de la cuenta y el segundo permite leer la propia información de forma completa

twitterFactory = new TwitterFactory(configurationBuilder.build());
twitter = twitterFactory.getInstance();

Con la sesión abierta y disponible para utilizarla se pueden realizar operaciones. Gran parte de las mismas se basan en objetos de tipo Status y objetos de tipo User. El primero de ellos representa el propio tweet con todos sus datos asociados (texto, id, usuario, localización, etc…) mientras que el segundo representa la cuenta de twitter con toda su información (TL, favoritos, retweets, etc…)

//Publicar un Tweet
Status status = twitter.updateStatus("TWEET PROGRAMADO");

//Eliminar un Tweet
Status status = twitter.destroyStatus(1)

//Obtener los Tweets del TL
List<Status> lista = twitter.getHomeTimeline();
for (Status temporal:lista) {
   temporal.getText());
}

//Obtener las menciones
List<Status> menciones = twitter.getMentionsTimeline();
for (Status status : menciones) {
   System.out.println(status.getText());
}

//Obtener los favoritos de tu cuenta
List<Status> favoritos = twitter.getFavorites();
for (Status status : favoritos) {
   System.out.println(status.getText());
}

//Obtener la lista de usuarios a los que sigues
List<User> usuarios =  twitter.getFriendsList(twitter.getId(),-1);
//Obtener la lista de usuarios que te siguen
List<User> usuarios = twitter.getFollowersList(twitter.getId(),-1);
for (User temporal : usuarios)
{
   System.out.println(temporal.getName());
}

//Realizar una búsqueda por palabra
Twitter twitter = TwitterFactory.getSingleton();
Query query = new Query("Java");
Query query = new Query("from:develop_system nueva entrada");
query.setCount(50);
QueryResult result = twitter.search(query);
for (Status status : result.getTweets()) {
   System.out.println("@" + status.getUser().getScreenName() + ":" + status.getText());
}

//Obtener el TL de un usuario
List<Status> tweetsSeguidor = twitter.getUserTimeline(((User)(usuarios.get(5))).getId());
for (Status temp:tweetsSeguidor) {
   System.out.println(temp.getText());
}

//Buscar de forma dinámica por una palabra
TwitterStream twitterStream = new TwitterStreamFactory(configurationBuilder.build()).getInstance();
FilterQuery filterQuery = new FilterQuery();
String[]busqueda = {"programacion"};
filterQuery.track(busqueda);
twitterStream.addListener(new ListenerTweets());
twitterStream.filter(filterQuery);
class ListenerTweets extends StatusAdapter{
        @Override
        public void onStatus(Status status) {
            System.out.println(status.getText());
        }
}