Skip to content

Instantly share code, notes, and snippets.

@fitorec
Created November 10, 2009 16:37
Show Gist options
  • Save fitorec/231014 to your computer and use it in GitHub Desktop.
Save fitorec/231014 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# filename: bruto.py
# Copyright 2009 Fitorec Rey sol <chanerec@gmail.com>
"""
Decripcion: Script util para jugar bruto.es
este script trata de darte una lista de rivales
a los que les estadisticamente tienes más oportunidades
de ganarles.
Breve explicación: el script se conecta a la página elbruto.es
hace un logeo cacha cookies y se dirige a la celda de combate
ahí para cada rival hace un spider el cual explora el arbol
de posibilidades a 3 niveles(pueden ser mas revisar def spider)
buscando siempre a los usuarios más debiles.
Ejecucion: este script ha sido probado sobre GNU/Linux Badado en Debian
Argumentos:
1.- el nickname del bruto.
2.- el password respectivo del bruto.
Ejemplo:
python brutoLogin.py fitorec myPassFitorec
"""
import urllib, urllib2, cookielib,httplib,sys,re
username = sys.argv[1]
password = sys.argv[2]
""" clase a utilizar """
""" clase el bruto estrae los datos de un bruto apartir de su nick"""
class bruto:
def __init__(self,nick,levelParent):
self.nickname = nick
headers = {
"Content-type": "application/x-www-form-urlencoded",
"Accept": "text/plain"
}
url = self.nickname+".elbruto.es"
url = url.replace('_', '')
url = url.replace(' ', '-')
url = url.replace('--', '-')
url = url.replace('%', '')
url = re.sub(r'-+', '-', url)
url = re.sub(r'\.+', '.', url)
conn = httplib.HTTPConnection(url)
print "check [url]: "+url
conn.request("GET", "/cellule")
r1 = conn.getresponse()
htmlContent = r1.read()
htmlContent = cut(htmlContent,'Victorias</div>')
self.tVictorias, htmlContent = between(htmlContent,'Tip.hide()">','<')
self.nivel, htmlContent = between(htmlContent,'<span>Nivel','<')
self.vida, htmlContent = between(htmlContent,'<div class="life"><div>','<')
self.fuerza, htmlContent = between(htmlContent,"this,'Fuerza:","'")
self.agilidad, htmlContent = between(htmlContent,"this,'Agilidad:","'")
self.velocidad, htmlContent = between(htmlContent,"this,'Velocidad:","'")
htmlContent = cut(htmlContent,'<div class="logs">')
htmlContent = htmlContent[:htmlContent.find('</td>')]
self.victorias = numeroDeCoincidencias(htmlContent,'log log-win')
self.derrotas = numeroDeCoincidencias(htmlContent,'log log-lose')
self.probabilidad = 0
if (self.derrotas+self.victorias)>0:
self.probabilidad = (self.derrotas*1.000/(self.derrotas+self.victorias))*100
if self.probabilidad > 82 and levelParent<=self.nivel:
print "Juega contra!:"
print "http://"+self.nickname+".elbruto.es/cellule/"
print "http://"+sys.argv[1]+".elbruto.es/vs/"+self.nickname
self.printDatos()
if(self.victorias>0):
self.pichones = extraePichones(htmlContent)
def printDatos(self):
print "Nombre de : "+self.nickname
print "Nivel: "+str(self.nivel)
print "Vida: "+str(self.vida)
print "fuerza: "+str(self.fuerza)
print "agilidad: "+str(self.agilidad)
print "Velocidad: "+str(self.velocidad)
print "Total Victorias: "+str(self.tVictorias)
print "Victorias(recientes): "+str(self.victorias)
print "Derrotas(recientes): "+str(self.derrotas)
print "Probabilidad de ganarle:"+str(self.probabilidad)+"%"
""" funciones de iteraccion """
"""############################################"""
""" recibe una cadena y la recorta asta donde halla encontrado tag """
def cut(cadena,tag):
ini=cadena.find(tag)+len(tag)
if ini>=len(tag):
return cadena[ini:]
return cadena
""" regresa al siguiente VSbruto de arene """
def nextVs(cadena):
cad = cut(cadena,"document.location='/vs/")
return cad, cad[:cad.find("'")]
""" regresa el numero de veces que aparece tag en cadena """
def numeroDeCoincidencias(cadena,tag):
x=0
cad = cadena
while cad.find(tag)>=0 :
ini = cad.find(tag) + len(tag)
cad = cad[ini:]
x=x+1
return x
""" Devuelve los losers del cellule de un bruto """
def extraePichones(cadena):
r = []
cad = cadena
tag = '<div class="log log-win">'
while cad.find(tag)>=0 :
ini = cad.find(tag) + len(tag)
cad = cad[ini:]
pichon = cad[cad.find(' a ')+3:cad.find('.</a>')]
r.append(pichon)
return r
""" regresa regresa cadena y el conttenido de cadena entre tag1 y tag2 """
def between(cadena,tag1,tag2):
cad = cut(cadena,tag1)
return int(cad[:cad.find(tag2)]) , cad[cad.find(tag2)+len(tag2):]
""" regresa True si element pertenece a lista en caso contrario False """
def exist(lista,element):
for e in lista:
if e == element:
return True
return False
""" funcion spider navega entre los brutos losers """
def spider(brutohijo,nivelPadre,profundidad,brutos):
for b in brutohijo.pichones:
if not exist(brutos,b) and profundidad<3:
nuevoBruto = bruto(b,nivelPadre)
brutos.append(b)
if nuevoBruto.victorias>0 :
spider(nuevoBruto,nivelPadre,profundidad+1,brutos)
""" END funciones """
"""############################################"""
""" seccion del logeo en el bruto cachamos cookies y mandamos parametros por post """
cookie_h = urllib2.HTTPCookieProcessor()
opener = urllib2.build_opener(cookie_h)
urllib2.install_opener(opener)
ua = 'Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.0.11) Gecko/2009061118 Fedora/3.0.11-1.fc10 Firefox/3.0.11'
h = {"User-Agent": ua}
params = urllib.urlencode({"pass": password,"submit" :"Entrar","go":"/arene"})
r = urllib2.Request("http://"+username+".elbruto.es/login", headers=h)
f = urllib2.urlopen(r,params)
htmlContent = f.read()
""" creamos nuestro bruto """
brutos = [sys.argv[1]]
myBruto = bruto(sys.argv[1],0)
for p in myBruto.pichones:
brutos.append(p)
""" para los 6 rivales en la arena mandamos a explorar con spider """
for i in range(6):
htmlContent, brutoVs= nextVs(htmlContent)
brutos.append(brutoVs)
print "Rival explorar: "+brutoVs
rival = bruto(brutoVs,myBruto.nivel)
spider(rival,myBruto.nivel,0,brutos)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment