Banco de pruebas

Jugando con Java y el API de Twitter

Twitter tiene un API muy completa que nos permite interactuar con su servicio desde nuestras aplicaciones. Esta tarde he estado enredando un poco con ella y la verdad es que se me ocurren un montón de aplicaciones prácticas(logueos, análisis automáticos, integración en servicios de noticias, estadísticas, seguimiento de usuarios, actualizaciones automáticas del perfil, etc…)

Existen librerías en un montón de lenguajes que facilitan aún mas su uso. Pero en este caso yo he preferido programar un servicio desde cero (lo cual, gracias a la documentación del API no ha sido nada complicado).

El siguiente ejemplo es una aproximación sencilla que permite actualizar nuestro estado (enviar un post) desde aplicación Java.

/*
 *   http://creativecommons.org/licenses/by-nc/3.0/deed.es
 */

package org.francho.java.twitter;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
// http://commons.apache.org/codec/
import org.apache.commons.codec.binary.Base64;

/**
 *
 * @author francho - http://francho.org/lab/
 */
public class Twitter {

    private String username;
    private String pass;
    private String response;

    Twitter(String username, String pass) {
        setCredentials(username, pass);
    }

    /**
     * Ejemplo de acción implementada.
     *
     * Actualiza el estado de Twitter con el texto que recibe
     *
     * @param status
     */
    public void statusesUpdate(String status) {
        try {
            URL url = new URL("http://twitter.com/statuses/update.xml");
            status = URLEncoder.encode(status, "UTF-8");
            String parametros = "status=" + status;
            doTwitterRequest(url, parametros);
        } catch (MalformedURLException ex) {
            Logger.getLogger(Twitter.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedEncodingException ex) {
            Logger.getLogger(Twitter.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Se encarga de la conexión con Twitter.
     * Necesita tener precargada los datos de autentificación (constructor), la url y los parámetros
     */
    private void doTwitterRequest(URL url, String parametros) {
        response = "";
        try {
            // Creamos una conexión
            URLConnection conn;
            conn = url.openConnection();
            conn.setAllowUserInteraction(false);
            conn.setDoOutput(true);

            // Configuramos la autentificación (sencilla basada en HTTP)
            conn.setRequestProperty("Authorization", "Basic " + getBasicCredentials());

            // Preparamos la conexión con el servidor (vamos a mandar un formulario por post)
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            // Abrimos el canal de comunicación de envío
            DataOutputStream out = new DataOutputStream(conn.getOutputStream());
            // Mandamos los parámetros de la acción que (los ha tenido que precargar el método correspondiente)
            out.writeBytes(parametros.toString());
            // Nos aseguramos de que todo se envíe
            out.flush();
            // Ya hemos dicho lo que teníamos que decir, así que cerramos la conexión de envio
            out.close();

            // Capturamos la respuesta
            BufferedReader input = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            String l = "";
            while ((l = input.readLine()) != null) {
                response += l + "\n";
            }

        } catch (IOException ex) {
            Logger.getLogger(Twitter.class.getName()).log(Level.SEVERE, null, ex);

        }

    }

    public void setCredentials(String username, String pass) {
        this.username = username;
        this.pass = pass;
    }

    public String getBasicCredentials() {
        byte[] credentialsBytes = (username + ":" + pass).getBytes();
        byte[] encodedBytes = Base64.encodeBase64(credentialsBytes);
        return new String(encodedBytes);
    }

    public String getResponse() {
        return response;
    }
}

Este sería un ejemplo de uso de nuestra clase:

/*
 *   http://creativecommons.org/licenses/by-nc/3.0/deed.es
 */

package org.francho.java.twitter;

import java.util.Date;

/**
 *
 * @author francho - http://francho.org/lab/
 */
public class Test {
    public static void main(String[] args) {
        Twitter twitter = new Twitter("yoEnTwitter", "miclave");

        Date ahora = new Date();

        twitter.statusesUpdate("Jugando con Java y el API de Twitter " + ahora);
        System.out.println(twitter.getResponse());
    }
}

Moblin 2.0 en mi asus Eee PC 901

eee-moblinLlevaba tiempo sin trastear y como hoy tenia un poco de tiempo me he puesto a probar Moblin en mi netbook. La versión Live 2.0 final me ha gustado tanto que me he decidido a instalarlo definitivamente sustituyendo mi Ubuntu Netbook Remix (a pesar de que iba bastante bien y los cambios de la 9.10 me gustaban).

Para quien no lo conozca, Moblin es una distribución de Linux que empezo a desarrollar Intel y luego cedió a la Linux Foundation. Es un sistema operativo optimizado para netbooks y MIDs, lo que quiere decir que es rápido, esta compilado para su hardware, aprovecha al máximo la pantalla, es funcional, pensada para sacar partido de Internet (redes sociales, mensajería, etc)… y además es bonita.

Lee el resto del articulo »

Publicando en el blog con el móvil

WpToGo es una aplicación para Android que permite publicar y editar artículos en Wordpress desde el móvil.

Es un programa gratuito que está disponible en el market.

Este post es una prueba para ver como funciona.

Editado: su interfaz es muy sencillo pero cumple su cometido. Permite crear y editar posts incluyendo imágenes y urls. Por poner una pega, no permite incluir varias categorías en un artículo.
image

Extensiones Firefox

Extensiones Firefox

Estas son las extensiones que tengo instaldas en mis Firefox.

Mención especial a WOT y Prhishtank que me permiten cuando un sitio es fraudulento

Mandando emails a la Wii

Para mandar un email a la Wii (siempre que esta tenga configurada la conexión internet) solo hay que escribir a w1111111111@wii.com, donde 1111111111 es el número de identificación de la consola en cuestión (se puede consultar cual es desde la agenda del tablón Wii).

Cuando se recibe un mail, la luz azul del CD parpadea, si tienes activada la función wii24h parpadea incluso aunque esté apagada.

Desde el tablón Wii también se pueden mandar mails a cuentas de correo, eso si primero hay que añadirlos en la agenda. Al destinatario se le manda un mail pidiendole permiso para cartearse y luego ya se pueden mandar mails sin problema.

Estaria bien poder crear alias del email para que no fuera tan críptico.

Eso si, lo que no he conseguido de momento es enviar una foto o un mii desde la consola a un email