Mostrando las entradas con la etiqueta Java. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Java. Mostrar todas las entradas

sábado, 23 de enero de 2010

Usando el API de Twitter con Java


Siempre quise usar la API de Twitter, pero en vez de leer entender todo el funcionamiento del servicio opté por usar las librerías ya existentes, ¿para qué reinventar la rueda? Soy un flojo del demonio.

En el sitio de Twitter puedes encontrar numerosas librerías que te servirán para utilizar la API de Twitter y hacer tus juegos o experimentos, yo me decidí por JTwitter. Una vez descargado su archivo .jar e importarlo a un Java Project en Eclipse ya puedes empezar a hacer las maniobras que desees. Ojo, la API deTwitter fija un límite de requests así que no podrás usar bucles infinitos para espamear ni borrar todo tu timeline.

En mi caso, quise hacer lo que mencioné, borrar todos mis tweets pero es imposible. Les copio el código para borrar tus últimos 100 tweets. Es bueno crear una procedimiento wait para no saturar las llamadas al servidor de un solo porrazo. Otra cosa, tu perfil tuitero debe estar sin el candadito.

import winterwell.jtwitter.Twitter;
import winterwell.jtwitter.Twitter.Status;

public class TwitterRevenge {

public static void wait (int n){
long t0,t1;
t0=System.currentTimeMillis();
do{
t1=System.currentTimeMillis();
}
while (t1-t0<n);
}

public static void main(String[] args) {

// Nos logueamos. Usuario y contraseña.
Twitter twitter = new Twitter("zajnostiko","fujimoridemela");
// Usamos un bucle para borrar siempre el último estado
for (int i = 0; i < 100; i++){

Status estado = twitter.getStatus("zajnostiko") ;
System.out.println(i);
System.out.println(estado);
twitter.destroyStatus(estado);
wait(100);
}}}

¿Alguien tiene más código para compartir?

domingo, 3 de enero de 2010

Lecturas de Estado en ORCE Usando Java SE

No pude evitar la curiosidad. Aprovechando mis últimos momentos de descanso quise probar lo mismo que ayer pero usando Java en vez de Python. Quiero aclarar que no se está haciendo ninguna consulta a base de datos sino trabajar con el código HTML obtenido de las URL's invocadas. Ahí va el código:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.io.File;
import java.io.FileReader;

public class Lector {
public static void main(String[] args) {

File f = new File( "\\codigos.txt" );
BufferedReader entrada;
try {
entrada = new BufferedReader( new FileReader( f ) );
String codigo;
int eg=0,ba=0,ti=0,su=0,re=0 ;
while(entrada.ready()){
codigo = entrada.readLine();

URL url = new URL("http://www.orce.uni.edu.pe/detaalu.php?id="+codigo+"&op=detalu");
URLConnection urlConnection = url.openConnection();
InputStream inputStream = urlConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line = bufferedReader.readLine();
String nombre = null;
String condicion = null;

while (line != null) {

if (line.equals("      <td style=\"font-weight: bold;\"><img src=\"/images/flechita.gif\"> Nombres:</td>")){
line = bufferedReader.readLine();
nombre = line.replace("", "").replace(" ", "").replace(" ", "-").replace("", "");
if(nombre.charAt(nombre.length()-1)=='-'){
nombre= nombre.replace(nombre, nombre.substring(0,nombre.length()-1));
}
}
if (line.equals("      <td style=\"font-weight: bold;\"><img src=\"/images/flechita.gif\"> Situación:</td>")){
line = bufferedReader.readLine();
condicion = line.replace("", "").replace(" ", "");
if (condicion.equals("BACHILLER"))
ba=ba+1;
if (condicion.equals("SUSPENSION VOLUNTARIA"))
su=su+1;
if (condicion.equals("EGRESADO"))
eg=eg+1;
if (condicion.equals("TITULADO"))
ti=ti+1;
if (condicion.equals("EN REGULARIZACION DE CURSO(S)"))
re=re+1;

}
line = bufferedReader.readLine();
}
bufferedReader.close();
System.out.println(nombre+": "+condicion);
}
System.out.println("");
System.out.println("RESULTADOS");
System.out.println("");
System.out.println("TITULADOS: "+ti);
System.out.println("BACHILLERES: "+ba);
System.out.println("EGRESADOS: "+eg);
System.out.println("EN REGULARIACION DE CURSO: "+re);
System.out.println("SUSPENSIONES VOLUNTARIAS: "+su);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}}}
Al correr este código se imprime lo siguiente en la consola de Eclipse:

Y también las cantidades de cada estado:

Definitivamente en Python se requiere de menos código, de todas maneras si alguien puede mejorar el código bienvenido sea, seguro que así será. Chau vacaciones.

Nota: Por si acaso, descarga la fuente aquí. Usa tu propio .txt, no lo olvides.

domingo, 25 de noviembre de 2007

Canillita Simulation v1.0

Si no fuera por el curso de Simulación ya no hubiese retornado al mundo Cliente-Servidor de Java. Y fue duro acoplarse nuevamente a cosas que ya no hacía: JPanel, Container, ActionListener, etc. Eso sí, fracasé al recordar JTable pues es difícil comprender el TableModel bajo presión teniendo que hacer miles de cosas más para otras actividades.

Pero bueno, explico el modelo del aplicativo: Un canillita pide cierta cantidad de periódicos para vender. Recibe X soles por venta y Y soles por ediciones no vendidas (que serán devueltas al editorial proveedor). El modelo busca simular las ganancias del canillita, en un determinado espacio de tiempo en días, bajo el supuesto que la ventas poseen una distribución probabilística (aquí obviamente es importante usar el Random). De esta manera para varios periodos, medidos como días, se podrá conocer cuál es la cantidad preferible que el canillita deberá ordenar para obtener más ganancias.

Si te da flojera, puedes oprimir el botón "El Óptimo" para obtener ese maldito número que te ahorrará ejecutar 10000 pruebas, o sea, 10000 veces hacer click en "A Simular".

Ahora toca revisar JTable para mostrar reportes (hace 2 años que no programo en J2SE). Mil disculpas a los amantes de la "amigabilidad" y "trazabilidad" pero no hay tiempo para detalles de diseño. Me quedo con la "funcionalidad", y funciona.

miércoles, 27 de junio de 2007

La madre del cordero

Error, error, error. ¿Netbeans v5.0 o Netbeans v5.5? ¿La nueva version es un fraude o yo no he revisado bien el error en las excepciones y/o beans? ¿Acabaré a tiempo mi proyecto o me dejaré seducir por la Semana de Facultad?¿Tocaré o no tocaré la guitarra? ¿Tocaré o no tocaré el bajo por lo menos? ¿Por qué mierda soy zurdo? ¿Me pagarán un adelanto para el sábado de concierto Diazepunk o "caballero, no más" con Chabelos y Son Habana? Java es la madre del cordero.