Creando un bot que hace FAV automáticamente en Twitter con un script de Python

Ayer aproveché el festivo para repasar un poco de scripting de Python (vicios que tiene uno), y me encontré este tutorial para crear un bot de Twitter, que he supuesto que podría interesarle a alguno de mis lectores por lo que vamos con una traducción no literal del mismo (como otras veces os cuento lo que pone pero no traduzco línea por línea).

El funcionamiento del bot/script es el siguiente: le das al bot una palabra clave, este la busca por Twitter y reparte FAV a diestro y siniestro.

El primer paso es descargar el módulo de herramientas de Twitter para Python (en el artículo original os dirige a la versión 1.10, pero es una entrada de 2013, ya van por la 1.17, yo os dejo apuntando al general para que seleccionéis la versión que os convenga). Luego tendréis que dar de alta el app en Twitter también. Al registrar el app Twitter os dará unas claves de autentificación, que se usarán para realizar la conexión tal que así:

from twitter import Twitter, OAuth, TwitterHTTPError

OAUTH_TOKEN = 'tu oauth token'
OAUTH_SECRET = 'tu oauth secret'
CONSUMER_KEY = 'tu consumer key'
CONSUMER_SECRET = 'tu consumer secret'

t = Twitter(auth=OAuth(OAUTH_TOKEN, OAUTH_SECRET,
            CONSUMER_KEY, CONSUMER_SECRET))

Lo siguiente es definir un método de búsqueda, que recoja los tweets:

def search_tweets(q, count=100):
    return t.search.tweets(q=q, result_type='recent', count=count)

Y definir el método que hará FAV al tweet:

def fav_tweet(tweet):
    try:
        result = t.favorites.create(_id=tweet['id'])
        print "Favorited: %s" % (result['text'])
        return result    
    # En caso de que ya esté marcado con FAV
    # devolverá un error.
    except TwitterHTTPError as e:
        print "Error: ", e
        return None

Y ahora ¿qué nos queda? Pues el código principal del script:

def auto_fav(q, count=100):
    result = search_tweets(q, count)
    a = result['statuses'][0]['user']['screen_name']
    print a
    success = 0
    for tweet in result['statuses']:
        if fav_tweet(tweet) is not None:
            success += 1
    print "Marcamos  %i tweets como favoritos de un total de %i tweets" % (success,
          len(result['statuses']))

Y listo, nuestro bot está preparado. Queda guardarlo en un archivo .py, como por ejemplo twitter_bot.py (respetamos el nombre del artículo original) y ya podemos ejecutarlo desde el terminal tal que así:

$ python

>>> import twitter_bot
>>> twitter_bot.auto_fav('#python','50')

El ejemplo buscará en los 50 últimos tweets el hashtag #python y marcará como favoritos los tweets que lo lleven. Ojo, porque abusar de este script podría llevar a que Twitter te aplique un baneo con todas las de la ley.

En fin, resumiendo aquí os dejo el script del artículo original (con los comentarios y el texto de salida en inglés) completo, por si queréis probar:

from twitter import Twitter, OAuth, TwitterHTTPError

OAUTH_TOKEN = 'your oauth token'
OAUTH_SECRET = 'your oauth secret'
CONSUMER_KEY = 'your consumer key'
CONSUMER_SECRET = 'your consumer secret'

t = Twitter(auth=OAuth(OAUTH_TOKEN, OAUTH_SECRET,
            CONSUMER_KEY, CONSUMER_SECRET))

def search_tweets(q, count=100):
    return t.search.tweets(q=q, result_type='recent', count=count)

def fav_tweet(tweet):
    try:
        result = t.favorites.create(_id=tweet['id'])
        print "Favorited: %s" % (result['text'])
        return result
    # when you have already favourited a tweet
    # this error is thrown
    except TwitterHTTPError as e:
        print "Error: ", e
        return None

def auto_fav(q, count=100):
    result = search_tweets(q, count)
    a = result['statuses'][0]['user']['screen_name']
    print a
    success = 0
    for tweet in result['statuses']:
        if fav_tweet(tweet) is not None:
            success += 1
    print "We Favorited a total of %i out of %i tweets" % (success,
          len(result['statuses']))

Instalando Elementary Tweaks en Elementary OS Freya.

No hace mucho comentaba que me había pasado a Elementary OS Luna. Anteayer instalé la última versión, Freya (y la verdad es que he notado una mejoría en el rendimiento, debe ser cosa del kernel). A raiz de aquella instalación os comentaba cómo instalar Elementary Tweaks, una herramienta que permite personalizar todavía más vuestro sistema. Pero con el cambio de versión el repositorio desde el que descargar Tweaks también cambia, así que si sois usuarios de Freya os tocará teclear lo siguiente:

sudo add-apt-repository ppa:mpstark/elementary-tweaks-daily
sudo apt-get update
sudo apt-get install elementary-tweaks

Luego, para seguir con la personalización ya podéis buscar diversos paquetes de iconos o temas. Para Luna había un huevo, como ya se comentó en el artículo pasado. Para Freya de momento no he encontrado tantos, aunque si le he metido el paquete de iconos de Potenza.

Conectando a IRC-Hispano con X-Chat

Entrada que agrego porque me lo han preguntado hace un rato, y así comparto el tutorial con quien tenga dudas. Aunque a más de uno os sorprenda, el protocolo de chat IRC se sigue utilizando. Desde luego no de una forma tan masiva como a principios de los dosmiles, pero existe actividad. Me preguntaba hace un rato una colega cómo podría conectarse a un canal de la red IRC-Hispano y le dije que había un app para Android, que chupa la hostia de bateria y ancho de banda, pero cumple el cometido en tu móvil. ¿Y para PC? Pues en Ubuntu/Mint/Elementary tienes opciones como X-Chat, que puedes instalar desde el centro de software de la popular distribución (Existen otras, como HEX-Chat, del que ya hablamos aquí).

Una vez instalado verás que te da opciones como elegir varios apodos por si el tuyo está ocupado, nombre de usuario, etc… y debajo te aparecerá una lista de servidores a los que conectarte, entre los cuales NO ESTÁ el IRC-Hispano. Y esto era lo que le interesaba la persona que preguntaba, ya que quería unirse al canal #Coruña, perteneciente a ese servidor ¿Cómo se configura esto?. Pues muy simple:

  • En el apartado Redes pulsa el botón Añadir
  • Ponle el nombre, para acordarte
  • Con la red recién añadida selecciónala y pulsa Editar
  • Una vez pulsado editar veremos todos los servidores de la red (debería haber sólo uno que ponga «nuevo/6667» o algo así). Editáis el que aparece por defecto y lo cambiáis por irc.irc-hispano.org/6667 siendo 6667 el número del puerto al que os conectaréis.
  • Tras añadir esto os queda pulsar Aceptar y Conectar, y ya conseguís el acceso a los canales de IRC-Hispano.

Y tras esto podéis disfrutar del chateo old-school.

Calculando la distancia entre dos coordenadas en Java

Si no hace mucho os comenté por aquí cómo calcular la distancia entre dos puntos dadas sus coordenadas en MySQL (en ese artículo tenéis todo el tema del algoritmo para el cálculo más desarrollado, aquí vamos al grano), hoy vamos a ver cómo hacer una función que nos haga esta operación con Java.

La función recibe cuatro parámetros: las latitudes y longitudes de ambos puntos. Y devuelve un double con la distancia como resultado

public static double distanciaCoord(double lat1, double lng1, double lat2, double lng2) {  
        //double radioTierra = 3958.75;//en millas  
        double radioTierra = 6371;//en kilómetros  
        double dLat = Math.toRadians(lat2 - lat1);  
        double dLng = Math.toRadians(lng2 - lng1);  
        double sindLat = Math.sin(dLat / 2);  
        double sindLng = Math.sin(dLng / 2);  
        double va1 = Math.pow(sindLat, 2) + Math.pow(sindLng, 2)  
                * Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2));  
        double va2 = 2 * Math.atan2(Math.sqrt(va1), Math.sqrt(1 - va1));  
        double distancia = radioTierra * va2;  
  
        return distancia;  
    }  

Conversión de boolean a int en Java

Entradita rápida y simple. ¿Tienes una variable con un booleano y necesitas convertirla en un entero? No es habitual, pero por ejemplo hoy me veía en esa tesitura con una vista en JSP. ¿Cual es la mejor forma en Java, la más eficiente y corta, de convertir un boolean en un entero? Pues la siguiente:

/*Supongamos una variable boolean llamada
miBooleano*/

int miEntero = miBooleano ? 1 : 0;

/*devuelve 1 si es true y 0 si es false*/

Pioneras de la programación

«Deberíamos pensar en internet como una escuela a la que muchas chicas como nosotras nunca tuvieron la ocasión de asistir, utilizándola precisamente para superar el miedo de no ser lo bastante guapas, lo bastante cultas, lo bastante fuertes, lo bastantes bellas, lo bastante despiertas o lo que sea. puede que las mujeres no sean tan buenas en la batalla física, pero de lo que estoy segura es que son buenísimas tecleando como una ráfaga de metralleta.»

Esta frase es de Jude Milhon, autora fundamental en la cultura hacker y una de las madres del término y género cyberpunk.

En su día, con motivo de la muerte del genial Dennis Ritchie, incidía en que en la mitología creada alrededor de la informática el sistema prefiere resaltar a los empresarios por encima de a los perfiles más técnicos, a pesar de que estos últimos sean los verdaderos artífices de la innovación y la genialidad. Pero el capitalismo necesita mitos para sostenerse, y los millones de Gates, Jobs y Zuckerberg son más vendibles que las aportaciones técnicas de Torvals, Berners-Lee y Ritchie o que las de todas estas señoras de las que hablaremos a continuación. La verdad es que entre los billonarios tecnológicos no hay mucha presencia femenina, como si la hay entre las grandes mentes de este campo.

Ya en el siglo XIX, la matemática Augusta Ada Byron (hija de Lord Byron, poeta esencial en el romanticismo británico), condesa de Lovelace, nos avanzó múltiples conceptos de la computación y la informática en su trabajo sobre la máquina analítica de Charles Babbage. Originalmente se consideró qúe Ada sólo fue la traductora del trabajo del ingeniero italiano Luigi Menabrea, pero posteriormente se comprobó que la matemática inglesa había añadido las notas fundamentales a este trabajo para darle consistencia, definiendo conceptos como subrutina o análisis antes incluso de la existencia del ordenador y del concepto «software».

La contribución de Ada Lovelace puede parece muy «primitiva» por haberse dado en una etapa que podríamos describir como «prehistoria de la informática» , pero inspiraría años después a otra mujer fundamental en la historia de la informática, la estadounidense Grace Hopper. Durante la II Guerra Mundial ingresó en el ejército estadounidense, tras haberse doctorado en matemáticas en Yale. La marina la destinó a Harvard para que trabajase en el Mark I de IBM, y allí desarrolló FLOW-MATIC, el primer lenguaje de programación de alto nivel, creando posteriormente A-0 y B-0, los primeros compiladores. Fuera de su trabajo en el ejército (se mantuvo años en la reserva naval, volviendo puntualmente para trabajos con el ejército hasta su jubilación en 1986, con el rango de contraalmirante y siendo en ese momento la oficial de más edad de las fuerzas armadas estadounidenses) llevó los conceptos de FLOW-MATIC, un lenguaje de programación que utiliza palabras clave en inglés para facilitar su comprensión, a un lenguaje de uso empresarial: el popular COBOL. Posteriormente también fue parte del comité de estandarización del lenguage Fortran. Como curiosidad, bastante paradójica, ganó el premio a Hombre del Año en Ciencias de la Computación de la AITP.

Grace Hopper en 1952

Casi contemporáneamente a Hopper, en el desarrollo de ENIAC, el primer superordenador de propósito general, trabajaron como programadoras un grupo de mujeres, las cuales contaban con la dificultad de tener que trabajar sin manuales ni referencias, teniendo que desarrollar su propio método para programar. Para la historia siempre quedaron los nombres de John Mauchly y John Eckert, los ingenieros desarrolladores del hardware, mientras que Betty Snyder Holberton, Jean Jennings Bartik, Kathleen McNulty Mauchly Antonelli, Marlyn Wescoff Meltzer, Ruth Lichterman Teitelbaum y Frances Bilas Spence permanecieron en el anonimato, e incluso durante años hubo quien afirmó que se trataba de modelos que sólo posaban para la foto, despreciando su papel fundamental para el funcionamiento de la máquina.

Programadoras del ENIAC

La primera mujer en recibir un doctorado en Ciencias de la Computación, y realmente una de las primeras dos personas en recibirlo pues lo consiguieron a la vez, fue la hermana Mary Kenneth Keller. Sí, hermana en el sentido religioso, la Dra. Keller había tomado los votos con 19 años uniéndose a las Hermanas de la Caridad de la Beata Virgen María, dedicando posteriormente su vida a la ciencia y la ingeniería, licenciándose en matemáticas en 1943, obteniendo el master en matemáticas y física en 1953 y finalmente siendo nombrada doctora en Ciencias de la Computación en 1965. Antes de ese logro académico formó parte del grupo de investigación de la Universida de Dartmouth que trabajaría en el desarrolo del lenguaje BASIC, una de las familias de lenguajes de programación más extendidas e importantes.

Mary-Kenneth-Keller-780x583

Tampoco sería justo olvidar a Margaret Hamilton, que fue la creadora del término Ingeniería del Software cuando trabajaba en la NASA nada menos que en el proyecto del Apollo XI, así que si has visto el meme de cómo una nave con el hardware de una lavadora llegó a la luna fue esta señora quien dirigió la creación del software que ejecutaba. Aunque su aportación al proyecto Apollo sea lo más llamativo y famoso seguramente en el día a día su importancia sea mayor por sus aportaciones en los inicios de la programación asíncrona, el procesamiento multi-hilo o la técnica de control de fallos conocida como End-To-End Testing.

800px-Margaret_Hamilton_-_restoration

Como decía al principio, en la historia de la informática, en los últimos años, se ha resaltado más el papel de aquellos que triunfaron en el campo económico y se ha relegado al ostracismo a los perfiles más técnicos, dejando en muchos casos a estas pioneras olvidadas de forma intencional. ¿Puede ser esto la causa de que a día de hoy haya más hombres interesados en la programación que mujeres? Tal vez sea más necesario que nunca reivindicar a estas pioneras, en lugar de a hipsters que se hicieron millonarios a base de vender teléfonos fabricados por obreros explotados en Asia.

Windows 93 Online

Si, has leído bien, Windows 93. ¿Se trata esto de una broma? Pues obviamente , pero oye, con un trabajo detrás curioso e interesante. En un arranque de nostalgia de los tiempos de Windows 95, los desarrolladors Jankenpopp y Zombectro (este último debe ser blackmetalero, viendo su página personal) se han currado el sitio web de Windows 93, donde podrás trastear con esta invención suya desarrollada en HTML5 y Javascript. (hay que reconocer que les ha debido robar mucho tiempo este proyectillo)

En esta divertida réplica bastarda de Windows han añadido un buen montón de software inútil (como aquel que nos regalaban en tantas recopilaciones de freeware), una versión HTML5 de Wofenstein 3D, al menos dos virus (hydra y totally not a virus, claramente no puede ser un Windows si no tiene virus de serie), un archivo corrompido, un navegadador/buscador web, un vídeo de Star Wars en código ASCII o un defragmentador de disco… que sólo te diré que tienes que probar.

En resumen, una verdadera frikada cuya utilidad es nula pero muy divertida. Si conociste Windows 95 te hará gracia y te arrancará una sonrisilla durante unos minutos. Además, al contrario que el Windows original, con este basta con refrescar el navegador para tener un reinicio limpio y seguro.

Seguridad en WordPress ¿cómo cambiar el prefijo de la base de datos?

Si alguna vez has hecho una instalación de WordPress verás que te solicita, para crear el sitio, el nombre de una base de datos, el usuario con el que se conectará a ella, la contraseña de ese usuario y un prefijo. ¿Por qué un prefijo? Simplemente porque así puedes tener varias instalaciones de WordPress (o de otros CMS que usen nombres de tabla muy genéricos tipo «users», «posts», etc.) en una misma base de datos.

Si no cambiamos esta configuración por defecto el sistema pondrá el prefijo «wp_» a las tablas. El no poner un prefijo personalizado, en si, constituye un error. Porque dejando el prefijo por defecto estás provocando: a)Que si un atacante logra ver el nombre de una tabla descubra que el CMS que estás utilizando es WordPress y b) Que dicho atacante, entonces, pueda conocer los nombres de las tablas de tu base de datos. La solución es simple, durante la instalación define un prefijo personalizado.

¿Ya lo tienes instalado? Don’t worry, be nécora. No está todo perdido, tienes todavía varias opciones. La más rápida y simple, instalas este plugin que te permitará cambiarla cómodamente desde la interfaz gráfica. ¿La versión más larga y compleja y élite? Pues los siguientes pasos te lo explican:

Bueno, como paso previo, o paso 0 del proceso HAZ UN BACKUP DE TU BASE DE DATOS POR SI ALGO FALLA Y TIENES QUE RECUPERARLA. Consejo que debes tener siempre en mente cuando te pongas a tocar tablas de una instalación de cualquier cosa.

El primer paso: ir a wp-config.php y cambiar ahí el prefijo (en nuestro caso pondremos como prefijo personalizado my_b457Bch33s_ ).

$table_prefix  = 'my_b457Bch33s_';

El siguiente paso es renombrar todas las tablas de tu instalación de wordpress:

/*Básicamente vas haciendo esto con todas las tablas*/
RENAME table `wp_comments` TO `my_b457Bch33s_comments`;

Tras renombrar las tablas haces un update sobre la tabla options buscando todas las líneas que hagan referencia a tablas con el prefijo viejo para actualizarlas:

UPDATE `my_b457Bch33s_options` SET `option_name`=REPLACE(`option_name`,'wp_','my_b457Bch33s_') WHERE `option_name` LIKE '%wp_%';

Y con la tabla usermeta tres cuartos de lo mismo, update que te crió.

UPDATE `my_b457Bch33s_usermeta` SET `meta_key`=REPLACE(`meta_key`,'wp_','my_b457Bch33s_') WHERE `meta_key` LIKE '%wp_%';

Y tras esto deberías tener todo funcionando de nuevo, pero con el nuevo prefijo, más seguro contra potenciales atacantes.

Primeros días con ElementaryOS

Como todo el que me siga en Twitter sabrá, no hace mucho en uno de mis equipos he migrado de Ubuntu (con Unity) a ElementaryOS. Vamos con una serie de primeras impresiones. Empezaré por lo malo, que ha sido poco.

Si tuviera que poner algo negativo, en comparación con Ubuntu (que a fin de cuentas, es la «madre» de Elementary) fue que durante la instalacioń no podía conectar con las redes WiFi, dado que ElementaryOS no incluye los paquetes de drivers privativos de Ubuntu, por lo que tuve que conectarme mediante cable para descargar e instalar todos los paquetes, incluyendo esos drivers. En fin, un problema menor pero hay que tener en cuenta antes de empezar la instalación.

Escritorio Elementary OS

El fuerte de ElementaryOS es el diseño, se trata de un sistema operativo «bonito«, muy bien diseñado. A la hora de personalizar su apariencia incluye varias opciones, aunque yo recomendaría la instalación de Elementary Tweaks, que nos permitirá personalizarlo con mayor precisión, e instalar los paquetes de iconos y temas alternativos:

sudo apt-get install elementary-blue-theme elementary-champagne-theme elementary-colors-theme elementary-dark-theme elementary-harvey-theme elementary-lion-theme elementary-milk-theme elementary-plastico-theme elementary-whit-e-theme elementary-elfaenza-icons elementary-emod-icons elementary-enumix-utouch-icons elementary-nitrux-icons elementary-taprevival-icons elementary-thirdparty-icons elementary-plank-themes elementary-wallpaper-collection

Elementary Tweaks

A pesar de su cuidado aspecto no es un sistema operativo pesado para nada. Ahora mismo, con varias pestañas abiertas en Firefox, Audacious reproduciendo música, Shutter abierto para editar capturas de pantalla para esta entrada y un par de procesos más trabajando en segundo plano no llega a los 1200 megas consumidos. A nivel de interfaz me gusta el dock, basado en Docky, y el concepto de las esquinas activas, que nos permite automatizar una acción cada vez que llevamos el botón a una esquina de la pantalla (por ejemplo, minimizar la ventana activa cuando lo llevo a la esquina izquierda). Para facilitar la instalación de software han incluído el centro de software de Ubuntu, y yo recomendaría además instalar también el gestor de paquetes de Synaptic. Y por comodidad también metería el lanzador de Synapse. Elementary OS no trae preinstalado mucho software (viene con el navegador Midori, el chat Empathy, Geary para el correo, Shotwell para las imágenes, sendos reproductores de música y vídeo…), por un lado os obligará a instalar muchas cosas tras la migración, por otro lado os evitará el coñazo de andar desinstalado según qué cosas (por ejemplo, no está la polémica búsqueda en Amazon por defecto de Ubuntu).

Añadiré que he leído que Elementary puede dar problemas con tarjetas gráficas ATI antiguas, aunque parece que se soluciona con la instalación de los drivers legacy y un downgrade (por cierto, estoy promocionando el uso del término «antiguación» en lugar de downgrade, un palabro que surgió entre cañas en una cena de ex-compañeros de clase, mucho más bonito ).

En resumen, la experiencia en los primeros días con este sistema operativo ha sido buena. De momento se quedará una temporada en el equipo.

¿Cómo instalo Elementary Tweaks en Elementary OS Luna?

(Nota: Este artículo era sobre la instalación en ElementaryOS Luna, para Freya mira Este)

Si usas ElementaryOS y quieres tener más opciones de personalización, cuentas con la opción de Elementary Tweaks, una herramienta que te permitirá aumentar la precisión en tu personalización del escritorio de este sistema operativo basado en Ubuntu. La cosa es sencilla, basta abrir un terminal y teclear las siguientes instrucciones:

sudo apt-add-repository ppa:versable/elementary-update
sudo apt-get update
sudo apt-get install elementary-tweaks

Luego basta con ir a la configuración del sistema y ya encontrarás el icono para abrir Tweaks.