version = "0.1"

__module_name__ = "Pyxgle"
__module_version__ = version
__module_description__ = "Python module for xchat2 to search Google"
__module_author__ = "Tomás Javier Robles Prado"

import xchat
import httplib
import string

URL                 = 'www.google.com'
COD_BUSQUEDA        = '/search?num=100&q='
CABECERA        = ' <b>...</b> \n<br><font color=#008000>'
FIN                = ' '
NUM_RESULTADOS        = 3
MAX_RESULTADOS  = 50

def formateaQuery(query):
        a = query.split()
        return string.join(a, '+')

def google(word, word_eol, ud):
        
        
        canal = xchat.get_info("channel")
        nick  = xchat.get_info("nick")
        if len(word) == 1:
                xchat.command('msg %s Uso: /google palabra1 palabra2 palabraN Numero_Resultados' % (canal))
                return xchat.EAT_ALL
        
        try:        
                #Mira si hay numero de resultados
                n = int(word_eol[len(word_eol) - 1])
                b = []
                for x in word:
                        b.append(x)
                #Hay que quitar primero y ultimo
                b = b[1:-1]
                query = string.join(b,'+')
                
                        
                        
        except:
                #No se ha pasado el numero de resultados
                n = NUM_RESULTADOS
                #Solo hay que quitar el primero
                b= []
                for x in word:
                        b.append(x)
                b = b[1:]
                query = string.join(b,'+')
                
                
        
        busqueda = run (query,n)
        if busqueda == -2:
                xchat.command('msg %s %s, tu búsqueda para %s no ha arrojado resultados.' % (canal, nick, query.replace('+',' ')))
                return xchat.EAT_ALL
        if busqueda == -1:
                xchat.prnt ('No se ha podido efectuar la conexión')
        i = 1
        xchat.command('msg %s %s, tu búsqueda para %s ha arrojado estos resultados:' % (canal, nick, query.replace('+',' ')))
        for x in busqueda:
                xchat.command('msg %s %d- %s' % (canal, i, x))
                i += 1
        return xchat.EAT_ALL

def run(query , n):
        
        if n is None:
                n = NUM_RESULTADOS        
        try:
                conn = httplib.HTTPConnection(URL)
                conn.request ("GET", COD_BUSQUEDA + formateaQuery(query))
                r = conn.getresponse()
                
        except:
                
                return -1
                
        if r.reason == 'OK':
                data = r.read()
        else:
                return -1
        conn.close()
        aux = data.split(CABECERA)
        #Hay que desechar el primer elemento
        aux.pop(0)
        if len(aux) == 0:
                return -2
                
        busqueda = []
        i = 0
        while n != 0 and i < MAX_RESULTADOS:
                try:
                        a =  aux[i].split(FIN,2)[0]
                        if a != '':
                                busqueda.append('http://'+a)
                                n -=  1
                except:
                        pass
                i +=  1
        return busqueda
        
xchat.hook_command("google", google, help='/google')
xchat.prnt("Pyxgle Version %s cargado!" % (version))
xchat.prnt('Uso: /google palabra1 palabra2 palabraN Numero_Resultados')
xchat.prnt('Visita: http://users.servicios.retecal.es/tjavier y http://elcubo.freezope.org')