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']))

Anuncios