lunes, 26 de diciembre de 2016

Controlando twitter desde la terminal con python



Autor: @PanaPunk

Todos conocemos twitter, algunos incluso lo usamos para difundir las entradas de nuestro blog u otras noticias de interés, también nos sirve para estar a la última en nuevas tecnologías, avances científicos o ser los primeros en ver el nuevo vídeo de el Rubius...

La publicación de cada tweet es instantánea y accesible desde cualquier lugar del ciber-universo conocido, y es que twitter, por su naturaleza y sencillez, puede llegar a ser mucho más que una simple aplicación de microbloging, ya que, no sé si lo has pensado alguna vez, pero ¿y si la usáramos para obtener notificaciones de otras aplicaciones, por ejemplo?, ¿o quizá para controlar máquinas de manera remota…?


Si, has leído bien, estoy proponiendo usar twitter como herramienta online de interconexión entre deferentes máquinas, es decir para que las máquinas hablen entre ellas o directamente hacia nosotros, mirándonos a los ojos y diciéndonos “estoy aquí humano, ¿puedo hacer algo por ti…?”

No es ciencia ficción, ni un proyecto secreto de la NASA, es tweepy (http://www.tweepy.org), una librería escrita en python que nos permitirá ampliar el uso de twitter hasta unos niveles insospechados, ya que nos permitirá usar la API de twitter de una manera muy sencilla. Si quieres comprobarlo por ti mism@ sigue leyendo.


- Creación de una aplicación en twitter

Antes de nada necesitarás una cuenta en twitter y crear una aplicación desde este enlace:

https://apps.twitter.com/
Manuales para crear aplicación de twitter (https://duckduckgo.com/?q=crear+aplicacion+en+twitter&t=h_&ia=web)

Cosas que necesitas de la aplicación creada:

- Consumer Key (API Key)
- Consumer Secret (API Secret)
- Access Token
- Access Token Secret

Deberás también de otorgarla de permisos necesarios (Read, write, and direct messages).


- Instalanto la librería tweepy

Por supuesto para utilizar tweepy primero deberás de tener instalado python.
Manuales: https://duckduckgo.com/?q=python+instlacion+y+primeros+pasos&t=h_&ia=web
Para instalar tweepy (en Linux basado en debian)


root@minibian:~# pip search tweepy # Comprobar si ya la tenemos
root@minibian:~# pip install tweepy # Instalación de la librería


Una vez llegados a este punto, ya podremos empezar a crear nuestros primeros archivos de python para el control de twitter.

Lo que yo he hecho es crearme un directorio llamado twitter, y dentro el archivo de claves (obtenidas de la app).


root@minibian:~# mkdir twitter
root@minibian:~# cd twitter

root@minibian:~# nano claves.py



### Claves obtenidas de la Aplicación de twitter
consumer_key = 'XXXXXXXXXXXXXX'
consumer_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
access_token = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
access_token_secret = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'

## Autenticación de la app
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

# Se obtiene el objeto api que nos posibilitará el uso de la API
api = tweepy.API(auth)

(Substituye las ‘XXXXXXXXXXXX’ por tus claves)

Esta será la cabecera para cada script de python:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tweepy # importamos la librería para poder usarla

## Codificación de caracteres en utf-8
import sys
encoding = sys.stdout.encoding or 'utf-8'

## Importamos el archivo de claves
import claves
from claves import *

### Nuestro código ###

(Incluir esta cabecera en cada script)


- Publicando mensajes en twitter

Ahora podremos empezar a obtener resultados, en primer lugar crearemos un archivo para publicar un tweet desde nuestra cuenta, para ello:


root@minibian:~# nano TweetPublico.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tweepy # importamos la librería para poder usarla

## Codificación de caracteres en utf-8
import sys
encoding = sys.stdout.encoding or 'utf-8'

## Importamos el archivo de claves
import claves
from claves import *

### Nuestro código ###
## Publicar un tweet publico
Texto = 'Primer tweet publicado desde el manual de @Honey_Sec'
Api.update_status( Texto )


Lo ejecutamos:


root@minibian:~# python TweetPublico.py


Si, así de sencillo, efectivo e indoloro ha sido publicar nuestro primer tweet.

Publicar un tweet directo (mensaje directo a un usuario de twitter) es tan sencillo como:


root@minibian:~# nano TweetDirecto.py

## Mensaje directo
Texto = 'mensaje directo que me envío yo solo desde manual @Honey_Sec'
api.send_direct_message('panapunk', text=Texto)

(No olvides incluir la cabecera)

Para publicar un tweet con una imagen, deberemos tener una imagen en nuestro directorio (o incluir la ruta de la imagen como es debido):


root@minibian:~# nano TweetImagen.py

## Mensaje con imagen
Texto = 'mensaje con imagen enviado desde manual @Honey_Sec'
api.update_with_media('entradillas.jpg', Texto)

(No olvides incluir la cabecera)


- Leyendo mensajes de twitter

Ahora que sabemos publicar mensajes públicos y privados, ya solo nos queda la mitad del proceso, poder obtener los tweets que nos interese según nuestras necesidades.


root@minibian:~# nano LeerMensajes.py

## Ahora leemos nuestro Timeline
Timeline = api.home_timeline( count = 10 ) # Para leer 10 tweets
# Segunda página
# Timeline = api.home_timeline( count = 10, page = 2 )

For tweet in Timeline:
        print tweet.text.encode(encoding) # Contenido del tweet
        print tweet.created_at # Fecha del tweet
        print tweet.id # Id único del tweet recibido
        print "@%s" % tweet.user.screen_name # Usuario que lo publica
        print tweet.user.id
        print "***********************"



## El Timiline de un usuario (Diferente al home timeline)
Timeline = api.user_timeline('panapunk', count=5)
#Timeline = api.user_timeline('honey_sec', count=5, page=2)

For tweet in Timeline:
        print tweet.text.encode(encoding) # Contenido del tweet
        print tweet.created_at # Fecha del tweet
        print tweet.id # Id único del tweet recibido
        print "***********************"



## Obteniendo mensajes directos
# Enviados por mi para mi
MensajesDirectos = api.sent_direct_messages( count=100 )

# Enviados por cualquier usuario
#MensajesDirectos = api.direct_messages( count=100, page=2 )
For tweet in MensajesDirectos:
        print tweet.text.encode(encoding)




## Buscando mensajes por palabras
#API.search(q[, lang][, locale][, rpp][, page][, since_id][, geocode][, show_user])
Search = api.search("HoneyCon16")

For tweet in Search:
        print tweet.text.encode(encoding)
        print "@%s" % tweet.user.screen_name
        print "***********************"
        print "*************************"

(No olvides incluir la cabecera)

Para obtener más métodos podremos ir a la documentación oficial de la librería: http://tweepy.readthedocs.io/en/v3.5.0/, allí podremos encontrar la manera de borrar tweets, crear listas, listar amigos, etc... y un montón de métodos más que nos permitirán controlar twitter de una manera muy completa.


- Posibles usos que le podríamos dar

Como ya habrás imaginado, la grandeza de todo esto radica en que al ejecutarse desde scripts en python, son acciones que se realizan desde nuestra querida y amada terminal, lo cual le otorga a todo este asunto de un potencial ilimitado. A mi así por de pronto se me ocurren las siguientes posibilidades:

- Recibir una notificación cuando nuestra RaspBerry Pi sube de temperatura (comando '/opt/vc/bin/vcgencmd measure_temp') o de cualquier otra eventualidad.

- Enviar mensaje directo (privado) con cualquier tipo de orden, que podremos leer desde nuestra aplicación y así realizar alguna tarea desde nuestra máquina.

- Comunicar máquinas entre si.

- Crear un bot que publique nuestra nueva entrada en el blog de manera automática.

- Un millón de cosas más...

¿Y tu, para qué utilizarías la librería tweepy?







1 comentario:

  1. Se pueden dar infinidad de usos divertidos. Tiempo atrás, yo tenía un sistema escrito en Ruby que me permitía, a través de Twitter y DMs, controlar la música de mi casa con la RPi. No molaba ni na.

    ResponderEliminar