Mi blog y yo solos en el mundo

pensando en la gente que ama las madalenas

No hay un camino para la paz, la paz es el camino -Ghandi-

Y entonces comprendí porque le llamaban

domingo, noviembre 02, 2014

El fascistobot

He estado probando tweepy porque me apetecía picar algo rápido y porque me parece que utilizar Twitter como pasarela entre varios equipos es una alternativa interesante a crear un email o cualquier otra solución basada en compartición.

Lo primero que tengo que decir es que para programar, al menos a mi que me gusta ir probando pequeños cambios, Twitter me parece una puta mierda, única y exclusivamente por el tema del máximo de peticiones en 15 minutos, tan coñazo me ha resultado el tema que al final he tenido que estar simulando las entradas y salidas para poder ser algo productivo.

Así que seguramente miraré en el código de Tweepy a ver si se puede hacer algo para poner la librería en modo simulación y enviaré los cambios a la gente de Tweepy por si a ellos también les parece una buena idea, si no pues al menos yo tengo mis librerías para poder probar mierdas varias sin tener que tomar café cada 5 minutos porque he agotado el número de consultas.

En cuanto al resto debo decir que encantado con tweepy, es rápido está bien documentado y funciona simplemente bien.

Por si a alguno os apetece jugar con esto aquí os dejo mi código


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

import tweepy, time, sys, operator, re, random 
reload(sys)
sys.setdefaultencoding("utf-8")

#Connect to twitter
CONSUMER_KEY = 'REMOVED'
CONSUMER_SECRET = 'REMOVED'
ACCESS_KEY = 'REMOVED'
ACCESS_SECRET = 'REMOVED'
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
api = tweepy.API(auth)

#initialize the dictionary
wordDic = {'': 0}

#Recover the last 100 tweets in my TL and find the most common word
statuses = tweepy.Cursor(api.home_timeline).items(100)
for status in statuses:
   for word in status.text.split():
      if len(word) > 4:
         if word.upper() in wordDic:
            wordDic[word.upper()]+= 1
         else:
            wordDic[word.upper()] = 1
wordDic = sorted(wordDic.items(), key=operator.itemgetter(1), reverse = True)

#Look for a tweet with the most common word and extract a URL on it
#TODO: Check why I need to request the status again
statuses = tweepy.Cursor(api.home_timeline).items(100)
counter = 0
while True:
   for status in statuses:
      if status.text.upper().find(wordDic[0][0]) != -1:
         match = re.search("(http://[^ ]+)", status.text)
         if match is not None:
            sa_file =open("SA.txt",'r')
            f=sa_file.readlines()
            sa_file.close()
            randLine = random.randint(0, len(f))
            for line in f:
               if counter == randLine:
                  line = line + match.group(0)
                  api.update_status(line)
                  break
               counter+= 1
      if counter != 0:
         break

#If there is no url, let's post something stupid
   if counter == 0:
      sa_file =open("SA2.txt",'r')
      f=sa_file.readlines()
      sa_file.close()
      randLine = random.randint(0, len(f))
      counter = 0
      for line in f:
         if counter == randLine:
            line = line + match.group(0)
            api.update_status(line)
            break
         counter+= 1
   time.sleep(90000 + random.randint(1000))

El bot simplemente sigue a un montón de fascistas varios lee sus post y publica enlaces con alguna frase suficientemente ambigua como para que sea lo que sea que esté difundiendo suene correcto, mi teoría es que pasa el test de Turing
hotlink a http://mattcrap.deviantart.com/

Etiquetas: , , , ,