Group: Root Admin
Posts: 2,380
Joined: 14-April 06
From: Mty, Nuevo Leon
Member No.: 38
Primero decir que, pareciera que en muchos de mis topics me decanto por la opción de no explicar demasiado las cosas y por solo dar las instrucciones de una forma general, pero esto sucede por que estoy convencida de que la mejor forma de aprender a programar es: viendo los códigos (y escribiendo, claro esta), allí están las respuestas y después de un tiempo de leer te vas dando cuenta realmente el por que se hicieron las cosas de tal modo, es lo positivo y lindo del software libre, allí esta el medio para aprender.
Empezando
Twitter es un servicio de microblogging muy popular en estos tiempos, el cual cuenta con una API para facilitar el desarrollo de aplicaciones de terceros. Nuestro ejemplo de robot (para hacerlo mas divertido), tratara de leer el RSS del foro y por cada nueva entrada actualizar una cuenta en twitter (partiendo de la idea de que ya se cuenta con una, ej: http://www.twitter.com/hackerss )
Primero necesitamos una clase para facilitarnos las peticiones por HTTP, usaremos esta:
public String getValue() { return this.value; } } }
Que a pesar que es algo vieja, es funcional. Esta clase permite agregar propiedades a la consulta y enviar por metodo POST. Lo cual es importante ya que la opción que usaremos del API de twitter requiere este método (sobre la clase, no hay mucho que explicar, usa "URLConnection" y dos streams)
Tengo que decir que no es en si una clase para leer RSS (coge los nodes de una forma rara ), pero funciona y es corta, lo que es perfecto para el ejemplo Entonces, esta clase al ser usada lee el xml de la dirección de hackerss, lo evalua y con "getEntries" nos devuelve un ArrayList con las entradas recientes. Ahora que se tienen las entradas, se requeriría por supuesto algo que las envíe a twitter:
public class TwitterUpdater extends Thread { static public String user = "mi_user"; static public String pass = "mi_pass"; static public ArrayList<String> msgs = new ArrayList<String>(); public String status;
Esta es una clase que extiende a Thread (asi que corre como un hilo), y cada que se ejecuta envía a twitter una actualización. Aquí hay algunas cosas interesantes; Twitter para la mayoria de sus servicios requiere una autentificación del tipo: HTTP Basic Authentication , asi que debemos agregar un parámetro especial: Authentication: Basic user:pass
Hecho esto, podemos utilizar sus opciones, en este caso requerimos enviar la actualización por POST, para eso usamos: "setPostData('status=' + nstatus)" siendo nstatus el nuevo mensajes pasado por urlencode, y al terminar imprimiría un mensaje de éxito. En este ejemplo va guardando los mensajes en un ArrayList para revisar que no hayan sido enviado antes, claro esto no es lo mas optimo.., lo escribí por rapidez.
Ahora ya tenemos como leer el feed de hackerss y como enviarlo, pero necesitamos la clase que las conjunte y las utilice , la cual es la siguiente:
@Override public void run() { HssRss rss = new HssRss(); ArrayList<HssEntry> entries = rss.getEntries();
for(HssEntry e : entries) { TwitterUpdater twit = new TwitterUpdater(e.toString()); twit.start(); } }
}
Esta clase consume el rss de hackerss, toma las entradas y por cada una trata de actualizar nuestro twitter. En este caso extiende a TimerTask para poder ser establecida como una tarea.
static public void main(String[] args) { Timer timer = new Timer(); TwitterBot twit = new TwitterBot(); timer.schedule(twit, 1000, 600000); } }
La clase Main inicia la aplicación, establece la instancia de "TwitterBot" para que corra primero en 1 segundo y después cada 10 minutos, y asi logramos que se este actualizando nuestro twtitter constantemente
Y ya esta, con estas cuatro clases logramos tener un bot que actualize nuestro twitter desde un RSS .
A pesar de que no se explique a fondo como están escritas, como dije antes, las respuestas están alli, como leer un xml, como enviar peticiones HTTP, como usar el API de twitter..
Cualquier cosa: ironic@ironicnet.com Msn: ironic@ironicnet.com Registrate en Bux.to y sumate unos dolares mensuales! No te hace millonario, pero ayuda...