Sigueme en twitter @SuarezDeveloper

Estructuras de datos: LinkedList

En la entrada anterior vimos como hacer uso de la clase ArrayList. En esta ocasión nos vamos a centrar en otra estructura de datos un poco más completa. La clase LinkedList.

import java.util.LinkedList;

public class LinkedListExample
{
	/**
	 * In this example we can see how to use the class LinkedList with 
	 * some of his methods more important.
	 * En este ejemplo podemos ver como hacer uso de la clase LinkedList con
	 * algunos de sus metodos más importantes.
	 * 
	 * @author SuarezDeveloper
	 * @param args
	 */
	public static void main(String[] args)
	{
		LinkedList<String> lista = new LinkedList<String>();
		
		lista.add("1"); // Añade al final el elemento
		lista.addFirst("0"); // Añade al inicio el elemento
		lista.addLast("2"); // Añade al final el elemento
		lista.addLast("3"); 
		lista.addLast("4");
		lista.set(1, "nuevo1"); // Sustituye el contenido de la casilla 1 por "nuevo1"
		lista.isEmpty(); // Devuelve si está o no vacía
		lista.get(1); // Recupera el contenido de la posición 1
		lista.getFirst(); // Recupera el contenido de la primera posición de la lista
		lista.getLast(); // Recupera el contenido de la última posición de la lista
		lista.pollFirst(); // Recupera y borra el primer elemento de la lista
		lista.pollLast(); // Recupera y borra el último elemento de la lista
		lista.remove(0); // Borra la posición 0
		lista.remove("98"); //Busca el elemento y si lo encuentra lo borra
		lista.removeFirst(); // Borra el primer elemento
		lista.removeLast(); // Borra el último elemento
		lista.contains("2"); // Devuelve si la lista contiene o no el elemento
		lista.size(); // Devuelve el tamaño de la lista
		lista.clear(); // Vacia la lista
		
		
	}
}
Anuncios
Categorías:Java

Estructuras de datos: ArrayList

A continuación os dejo un código explicativo de como usar un ArrayList

import java.util.ArrayList;

public class ArrayListExample
{
	/**
	 * In this example we can see how to use the class ArrayList with 
	 * some of his methods more important.
	 * En este ejemplo podemos ver como hacer uso de la clase ArrayList con
	 * algunos de sus metodos más importantes.
	 * .
	 * @author SuarezDeveloper
	 * @param args Not use
	 */ 
	public static void main(String[] args)
	{
		ArrayList<String> array = new ArrayList<String>();
		
		array.add("hola"); //Añade "hola" a la lista (Actualmente vacia, por tanto en la posicion 0)
		array.add(0, "adios"); // Añade "adios" en la posicion 0 y desplaza el resto de elementos a la derecha, poniendose "hola" en la posicion 1
		array.get(0); // Te devueve el objeto insertado en la poscición 0
		array.contains("hola"); // Devuelve true o false dependiendo de si contiene o no el objeto
		array.set(0, "nuevoAdios"); // Sustituye el contenido de la posición 0 por "nuevoAdios"
		array.isEmpty(); // Devuelve si está o no vacia
		array.ensureCapacity(50); // Internamente esta clase contiene un array, con este metodo podemos definir el tamaño interno del array.
		array.size(); // Devuelve el número de elementos insertados
		array.remove(0); // Borra la posición 0
		array.remove("hola"); // Borra el elemento "hola"
		System.out.print(array.size());
		array.clear(); // Vacia la lista
	}
}
Categorías:Java

Jugando con la API de Captcha trader con Java

Para los que no lo conozca Captcha Trader es una herramienta que permite autocompletar captchas. Están disponibles los plugins para JDownloader y Mipony. Todo esto acompañado de unos créditos que tienes que ir recargando ayudando a la página.
El modo en que se ayuda a la página es el siguiente: la página te da un captcha y tu le dices lo que pone, si es correcto obtentrás 7 captchas automaticos. Esto último se puede hacer vía web o mediante el programa llamado Captcha Notifier.

Pues hoy vamos a ver como funcionan (a groso modo) tanto los plugins como el Captcha Notifier.

Lo primero es crearnos un usuario en captchatrader.com y una vez hecho esto solicitar una contraseña de desarrollador. Para solicitar la contraseña pinchamos sobre Developers y después sobre Request one here. Rellenamos los campos y nos aparecerá la API KEY.


Lo siguiente que debemos hacer es en la misma página del captcha trader en la opción de Developer descargarnos la API para Java “CaptchaTrader.jar” y añadirla a nuestro nuevo proyecto (Si no sabes hacer esto último mírate esta otra entrada Añadir librerías externas en Eclipse.


También es necesario añadir una segunda librería, la “Apache Commons Codec” necesaria para poder ver las imágenes que recibamos del servidor. La librería está disponible en la página de apache Descargar librería de Codecs

Y a continuación el código

package captchaTraderEx;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Scanner;

import org.apache.commons.codec.binary.Base64;

import com.captchatrader.CaptchaTrader;

public class CaptchaTraderExample
{

	public static void main(String[] args) throws Exception
	{
		// Creamos un nuevo objeto CaptchaTrader donde pondremos nuestro usuario
		// y contraseña de la web
		CaptchaTrader captcha = new CaptchaTrader("Usuario", "contraseña");
		// Setearemos nuestra API KEY
		captcha.setApiKey("Vuestra KEY API");
		/* Nos mostrará nuestros creditos actuales */



		// *************************************************************
		// Lo primero que vamos a hacer es solicitar una imagen para que
		// nosotros le respondamos. Con esto conseguiremos 7 autocaptchas por
		// cada uno de los captchas introducidos.
		// ************************************************************* 

		/* Muestra el número actual de creditos disponibles (1 credito = 1*/
		// autocaptcha)
		System.out.println("Tienes " + captcha.getCredits() + " creditos");
		// Nos dirá aproximadamente cuando tardará en llegarnos el captcha (en
		// segundos)
		System.out.println("Tiempo de espera: " + captcha.getWaitTime());

		// Solicitamos un nuevo captcha (una imagen jpeg)
		String cadena = captcha.enqueue();
		// Eliminamos la información "inutil"
		cadena = cadena.substring("data:image/jpeg;base64".length());

		// Decodificamos la imagen en un array
		byte[] imagen = Base64.decodeBase64(cadena);
		// En este caso en lugar de mostrarla gráficamente he preferido
		// guardarla en un fichero
		File of = new File("foto.jpg");
		FileOutputStream osf = new FileOutputStream(of);
		osf.write(imagen);
		osf.flush();
		osf.close();

		System.out.print("Imagen recibida correctamente\n" + "Tienes: " + captcha.getWaitTime() + "segundos para contestar\n" + "Introduce la respuesta: ");

		String texto;
		Scanner teclado = new Scanner(System.in);
		texto = teclado.nextLine();
		// Enviamos al servidor nuestra respuesta
		captcha.answer(texto);

		// El servidor tarda cierto tiempo en comprobar que la info es correcta,
		// esperaremos 30 segundos y luego pulsaremos enter para ver nuestros
		// creditos
		System.out.println("Espera 30 segundos, escribe algo y pulsa enter");
		teclado.next();
		// Volvemos a mirar nuestos creditos
		System.out.println("Tienes " + captcha.getCredits() + " creditos");

		// Por último comentar que si no supiesemos la respuesta podemos hacer un
		// captcha.dequeue();
		// Seguido de un
		// captcha.enqueue();
		// para obtener la siguiente imagen



		// *************************************************************
		// Esta segunda parte del código veremos como darle una imagen al
		// servidor y que este nos devuelva la respuesta.
		// *************************************************************

		// Con esta línea el captcha trader nos devolverá automaticamente la
		// respuesta
		texto = captcha.submit(new File("Ruta de la imagen"));
		System.out.println(texto);

		// Por último para decirle a captcha trader si la respuesta es buena o no,
		// es decir, si la cadena recibida corresponede a la imagen enviada
		// lo hacemos con el método respond.
		if (teclado.nextLine().compareTo("s") == 0)
			captcha.respond(true);
		else
			captcha.respond(false);
	}
}
Categorías: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

Categorías:Java

Como añadir librerías externas a un proyecto en Eclipse

En ocasiones necesitamos añadir funcionabilidad extra a nuestros proyectos. Una forma sencilla de hacerlo es mediante librerías externas con extensión .jar. Lo que ahora voy a intentar explicar es como configurar el proyecto para poder usar esas librerías usando Eclipse.

Primero y antes de nada debemos crear un nuevo proyecto java. Seguidamente clickamos con el botón derecho sobre el y seleccionamos Build Path / Configure Build Path

Image

Seguidamente nos aparecerá una ventana emergente donde deberemos dirigirnos a la pestaña Libraries. En esta ventana podremos observar que actualmente se encuentran las librerías propias de java (el JRE). Ya solo nos quedaría clickar en el botón Add External Jars… añadir la o las librerías necesarias y pulsar en aceptar.

Image

Finalmente os añado una captura de ejemplo de como importar una librería externa a una clase.

Image

Categorías:Java

Recuperar la ubicación del archivo ejecutado con Java

En ocasiones es necesario saber la ruta del archivo .jar del programa, esto se puede averiguar de la siguiente forma.


import java.io.File;

public class uso
{
 public static void main(String ars[])
 {

 recurso = uso.class.getResource(recurso).toString();
 System.out.println("nRuta del archivo .class ejecutado: ");
 System.out.println(recurso);

}

}

Categorías:Java

Listado de los dispositivos de almacenamiento (Raíces)

El título lo dice todo, recupera y lista todas los dispositivos de almacenamiento del sistema (HDDs, pen drives, lectores de DVD…)


import java.io.File;

public class Uso
{
	public static void main(String ars[])
	{
		System.out.println("Raices");
		//Recupera todos los dispositivos de almacenamiento del sistema.
		File[] a = File.listRoots();
		for(int i=0; i<a.length;i++)
			System.out.println(a[i].getAbsolutePath());
	}
}

Categorías:Java