4 jun. 2013

Utilizando el API de Stream de Twitter con Python y tweetstream. Parte 1.

Siguiendo con los artículos de Python y Twitter, ahora mostraré como usar el API Stream de Twitter.

En este caso como la librería twitter no maneja stream es necesario instalar otra librería llamada tweetstream.

La documentación del API Stream de twiitter se encuentra en el enlace, y  en específico para obtener información  objeto tweets lo pueden revisar en el enlace.

Ahí encontrarán la estructura json de este objeto. El campo que se uso en el ejemplo son 'text' y 'user', text contiene el texto del tweet y user contiene otro objeto que contiene información del usuario, para este caso se usará el campo 'screen_name' que maneja el nombre del usuario twitter que envía el tweet.

A continuación el código de la aplicación:
#!/usr/bin/env python

# -*- coding: utf-8 -*-



#Import tweetstram, sleep y exit

import tweetstream

from time import sleep

from sys import exit





#Se crea la funcion StreamTweet donde se le pasa el usuario y la clave de una cuenta twitter.

def StreamTweet(usuario,clave):

    #Se captura la excepcion de error de conexion e interrupcion por teclado

    try:

 #Se intenta conectar a la funcion de stream de tweetstream con el usuario y la clave

 #Asignando a stream el resultado

 with tweetstream.TweetStream(usuario,clave) as stream:

     #Se genera un ciclo de cada tweet

     for tweet in stream:

  #Se captura la excepcion de KeyError e Interrupcion de teclado, de esa forma

  #Se devuelve un mensaje de error y se termina el programa respectivamente.

  try:

      #Se crea un texto con el numero de tweet y la velocidad de cada tweet.

      adicional = "|| tweet %d || velocidad %.5f tweets/seg" %(stream.count,stream.rate)

      #Se crea un texto final donde se le pasa el nombre del usuario que envia el tweet,

      #el texto del tweet y el texto anterior

      texto = tweet['user']['screen_name'] + "||" + tweet['text'] + adicional

      #Se imprime dicho texto en pantalla

      print texto

  except KeyError:

      print "No hay tweet"

  except KeyboardInterrupt:

      exit()

  #Se espera 5 segundos para continuar al siguiente ciclo del lazo

  sleep(5)

    except tweetstream.ConnectionError, e:

 print "Desconectado de twitter. Razon: ", e.reason

 exit()

    except KeyboardInterrupt:

 exit()

 

 





if __name__ == '__main__':

    #Se llama a la funcion pasando el usuario y la clave.

    StreamTweet(usuario,clave)



En la siguiente figura se muestra la captura de pantalla del programa en funcionamiento:

Se muestra en cada tweet, el usuario que envía el tweet, el tweet en si, el número de tweet enviado y la velocidad con que se envía el tweet.


2 jun. 2013

Máquinas virtuales con kvm y qemu

Hace años usaba qemu para probar los paquetes que empaquetaba para Debian, luego me pase a virtualbox.
Últimamente me ha parecido que consume más recursos virtualbox, así que por recomendación retomé qemu con kvm. 

Los paquetes necesario son: 
  • kvm
  • virt-manager: Para manejar las máquians virtuales de forma gráfica
  • libvirt-bin
  • qemu-kvm
Instalación:
apt-get install kvm virt-manager libvirt-bin qemu-kvm


Prueba inicial:
Se iniciará una máquina virtual que arranca un live-cd, por ejemplo el live-cd de Linuxmint 15 con 720M de RAM:
kvm -m 720 -cdrom  linuxmint-15-cinnamon-dvd-32bit.iso

En la siguiente figura se muestra la captura de pantalla de la máquina virtual:



Crear un disco duro para la máquina virtual:
Se crea el disco duro virtual en un archivo, en este caso se creará un disco duro virtual de 10 GB para instalar Debian en dicho disco duro virtual:

qemu-img create debian.img 10G
Formatting 'debian.img', fmt=raw size=10737418240

Ahora se tiene: 

ernesto@debian:~/imagenes$ ls -l
total 1808024
-rw-r--r-- 1 ernesto ernesto 10737418240 jun  2 16:22 debian.img
-rw-r--r-- 1 root    root    10737418240 jun  2 16:00 debianserver.img
-rw-r--r-- 1 ernesto ernesto 10737418240 jun  2 15:30 linuxmint.img

Instalación de  Debian en la máquina virtual:
:
Ahora se instalará en el disco duro virtual llamado debian.img la distribución Debian para i386 con 720MB de RAM, se le define el disco duro a usar y el iso a utilizar:
qemu -m 720 -hda debian.img  -cdrom ../Isos/debian-7.0.0-i386-lxde-CD-1.iso

En la siguiente captura de pantalla se muestra el inicio del cd de Debian:

Luego de terminar el proceso de instalación se inicia la máquina virtual de la siguiente forma:
qemu -m 720 -hda debian.img
La siguiente figura muestra el escritorio de LXDE de Debian con la consola abierta mostrando la IP que tiene la máquina virtual:

Como se puede ver la IP que tiene la máquina virtual es una IP privada, la única forma de acceder a la máquina virtual es directamente desde qemu, no se podrá abrir una sesión remota por que desde el equipo que aloja la máquina virtual no se tiene una ruta de como llegar a la IP de la máquina virtual.

Para ello necesitaremos darle unas opciones de redes a qemu, estas son nic y tap, la última crea una interfaz tap en el equipo que aloja la máquina virtual con la ruta de una red.

qemu -m 720 -hda debian.img   -net nic -net tap

Adicional a esto es necesario instalar dnsmasq y configurar una regla de iptables en la configuración de kvm para poder navegar desde la máquina virtual.

Instalar dnsmasq:
apt-get install dnsmasq

Agregar la siguiente configuración en el archivo /etc/dnsmasq.conf:
#Archivo de resolv.conf con la configuración de dns de la red local.
resolv-file=/etc/resolv-orig.conf
#Interface a la cual acepta peticiones, en este caso tap0 para la máquina virtual (dns y dhcp) y wlan0 (sólo dns).
interface=tap0,wlan0
#No se activa el dhcp a la interfaz wlan0
no-dhcp-interface=wlan0
#Se define el rango de red de dhcp y el tiempo de liberación de las IPs.
dhcp-range=172.20.0.10,172.20.0.15,12h

Se agrega la siguiente regla de iptables al archivo /etc/kvm/kvm-ifup:
vim /etc/kvm/kvm-ifup
exec iptables  -t nat -A POSTROUTING -s 172.20.0.0/16 -o wlan0 -j MASQUERADE

Está regla aplica nat a la red 172.20.0.0/255.255.0.0.


Ya con esta configuración ya se puede navegar y acceder remotamente a la máquina virtual.

Para terminar las configuraciones se agrega una regla de iptables que borre las tablas de nat en el archivo /etc/kvm/kvm-ifdown:
vim /etc/kvm/kvm-ifdown

exec iptables -t nat -F

La tabla de enrutamiento del equipo donde se levanta la máquina virtual es la siguiente:
root@debian:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         185.29.52.131   0.0.0.0         UG    0      0        0 wlan0
172.20.0.0      0.0.0.0         255.255.0.0     U     0      0        0 tap0
185.29.52.128   0.0.0.0         255.255.255.128 U     0      0        0 wlan0


En la siguiente captura de pantalla se muestra la página de este blog desde la máquina virtual y la consola donde se muestra la IP que está usando la máquina virtual, con esa IP se puede acceder desde el equipo que aloja la máquina virtual.



AddThis