.
     
» Ajax Links          

  Python

pygtk threads subprocess

6 Nov 2009 | Escrito por: lopz | En: Python
pygtk threads subprocess commands

Hola

Después de mucho tiempo sin escribir nada paso a poner una breve nota sobre el uso de threads en pygtk, en google hay mucha información al respecto, inclusive en su página hay esto:
http://faq.pygtk.org/index.py?file=faq20.006.htp&req=show

Y bueno, escribí un pequeño trozo de código que será fácil entender si se lee el anterior link, en esta ocasión pasaré de escribir línea a línea el script xD


Code:
import gtk
import os
import subprocess as sp
import time
import threading

gtk.gdk.threads_init()
#gobject.threads_init()

CMD = 'du -sh /home/lopz/'

class MainWin:
    """
    Creates a main window object
    """
    def __init__(self):
   w = gtk.Window()
   self.pb = gtk.ProgressBar()
   box = gtk.HBox(False, 0)
   self.btn_start = gtk.Button("Start")
   self.btn_start.connect("clicked", self.btn_start_click)
   box.pack_start(self.btn_start)
   btn_test = gtk.Button("Test")
   btn_test.connect("clicked", self.btn_test_click)
   box.pack_end(btn_test)

   self.btn_stop = gtk.Button("Stop")
   self.btn_stop.connect("clicked", self.btn_stop_click)
        self.btn_stop.set_sensitive(False)
   box.pack_end(self.btn_stop)

   box.pack_start(self.pb)

   w.add(box)
   w.show_all()
   w.connect("destroy", self.quit)

    def get_popen(self, cmd):
        return sp.Popen(cmd, stdout=sp.PIPE, stderr=sp.STDOUT)
   
    def pulse(self):
   while not self.quit:
       time.sleep(0.1)
       gtk.gdk.threads_enter()
       self.pb.pulse()
       gtk.gdk.threads_leave()

    def exec_cmd(self):
   self.popen = self.get_popen(CMD.split())
   out = self.popen.stdout.read()
        if out:
            print out
            self.terminate()
       
    def terminate(self):
   self.quit = True
   os.kill(self.popen.pid, 9)
        self.btn_stop.set_sensitive(False)
        self.btn_start.set_sensitive(True)
        print "Terminate threads"

    def quit(self, widget):
   gtk.main_quit()
   self.terminate()

    def btn_test_click(self, widget):
   print "gtkMain thread"

    def btn_stop_click(self, widget):
   self.pb.set_text("Completed")
   self.terminate()

    def new_thread(self, method):
        t = threading.Thread(target=method, args=())
   t.start()


    def btn_start_click(self, widget):
   print "Start threads"
        self.quit = False
        self.btn_stop.set_sensitive(True)
        widget.set_sensitive(False)
        self.pb.set_text('Running')
        self.new_thread(self.pulse)
        self.new_thread(self.exec_cmd)
       
if __name__ == "__main__":
    gui = MainWin()
    gtk.gdk.threads_enter()
    gtk.main()
    gtk.gdk.threads_leave()


A grandes rasgos lo que hace el script es lo siguiente:

crea una ventana con unos 3 widgets dentro, un progressbar y 3 botones, el progressbar es para mostrar al usuario que aún se está realizando la tarea, el botón start pues empieza la tarea, el stop detiene todo y el test lo que hace simplemente es imprimir en consola.
Start: Lanzará 2 threads, en uno lo que hacemos es modificar los widgets, ahí puedes modificar cualquier parte de la interfaz mientras estás haciendo alguna tarea junto a este threads lanza otro donde se ejecutará nuestra tarea pesada, en este caso el comando du -sh /home/tu_user que lo que hace es mostrar el tamaño del directorio, como este comando tiende a tardar en mostrar el resultado al usuario le mostraremos una barra de progreso para que sea que aún se está realizando la tarea.
stop: lo que hace es terminar ambos hilos, el que muestra la barra de progreso y el que ejecuta el comando, en este caso matando el pid del comando y automáticamente sale del hilo.
test: este botón es una prueba que podemos usar nustra gui mientras ejecutamos tareas pesadas por debajo, y este solo imprime en consola desde el thread de main.

El botón salir de la ventana hace lo mismo que el botón Stop, para ambos threads y luego destruye la ventana del hilo principal, si no destruimos los hilos uno quedará pegado hasta que termine de ejecutarse nuestro comando, cosa que no queremos.

Creo que es todo, para ser un pequeño ejemplo para ayudar a un amigo va bien y de paso recordé un poco esto de python que lo tengo ya olvidado.

A continuación pasaré como siempre a pegar una pequeña captura de pantalla de la pequeña gui funcionando.



Espero que a alguien le sirva y deja algún comentario.

Igual se puede usar gobject.idle_add(mi_funcion) pero esto no toqué para nada.
tampoco he visto cual sea la manera correcta o la mejor de hacerlo.

Tu amigo programador de python+pygtk ¿Cómo solucionas este tipo de problemas?

Saludos!

3 Comentarios »

Sesiones+sessions+python

14 Abr 2009 | Escrito por: lopz | En: Python
Sesiones+sessions+python

Hola

No sé si el título describa lo que explicaré a continuación, ya que no sé si es el correcto, pero en fin, para mí si lo es xD

En esta entrada aprenderemos a manejar sesiones http utilizando python, no sé por que pero me a dado por usar MUCHO la librería httplib de python, según se en la que están basadas urllib, urllib2 y urllib3 esta última está en google code, y bueno se podrían usar estas otras que facilitan las cosas a la hora de manejar cookies con python, pero si las otras están basadas en esta entonces por que no se podría implementar con esta librería?

Bueno hace tiempo cuando estaba empezando en python siempre me llamaba la atención poder hacer tonterías con webs+python, osea, interactuar con ellas, realizar búsquedas en google, en otras páginas lo mismo, extraer datos de una y otra página, navegar por sus links, vamos, un crawler, spider o como le llamen ustedes todo funciona bien hasta que quieres automatizar alguna tarea en una página donde tienes que iniciar sesión con un user y pass para poder navegar por los demás links, aquí es donde entra el uso de sesiones, para realizar este tipo de cosas lo único que hay que hacer es "imitar" lo que hace el usuario en conjunto con su navegador, enviar los MISMOS parámetros que pide la web (request) entonces la página pensará que eres un navegador y te dará acceso como si lo haría un humano, vamos, hacer lo mismo pero con código escrito en cualquier lenguaje, pero como a mí me encanta python lo hice en este jeeeeje, para entender esto es necesario saber lo básico de como funciona un servidor http y un navegador y como dije solo queda imitarlo.

En esta entrada veremos como hacer esto con una página que encontré por ahí no fue suerte mas bien por pasar el rato escribiendo algo referente a ella sea de paso, la página es http://www.futbolreto.com ahora bien para poder probar nuestro pequeño robot necesitamos crearnos una cuenta en dicha página, no lleva más de 1 minuto.

Hagamos de cuenta que ya tienes un user y pass válido para la página, ahora solo quedará ingresar a la página con el navegador y como se han podido dar cuenta es un juego, una trivia donde hay que responder preguntas referentes al futbol y estas tienen un tiempo para responderlas, es una pregunta y son varias respuestas de las cuales solo una es válida y entonces lo que vamos a hacer es eso, simular todo, desde el login hasta poder recibir las trivias.

Ahora que he explicado como va la cosa estaremos listos para modificar el script con tu user y pass, configurar algunos datos: tu user y pass son urgentes, luego la categoría, y el número de trivias que tendremos resueltas por el robot.

No pasaré a hablar más del error de la página ya que este post no va para eso, si no para mostrar como mantener la sesión al navegar por diferentes links de la página como se puede notar en el script.

Ya, mucho blah blah y poca acción, empecemos por modificar el script como ya les había indicado y lo ponen a correr y notarán que les imprime la pregunta y su respuesta correcta, todo esto manteniendo la sesión utilizando la COOKIE que es lo importante, como ve, primero realizo una request simple luego obtengo la cookie, y hago el POST enviado el user y pass y el servidor nos responderá con la cookie de nuestra sesión que es la que usaremos siempre para cualquier request.

Esto se puede hacer para cualquier página web, inclusive para las que tienen captchas, pero en este caso solo necesitas logearte con el navegador y coger la cookie que nos envía el server y utilizar esa para los demás request, es así como hice esos bots para metroflog y fotologs, ya que estos utilizan captchas para iniciar sesión, pero todo eso fue para probar y distraerme un rato con los "amigos/as" que joden con que le firmen el puto metro que tienen, así les llenas de spam los comentarios y les agotas sus comentarios y no joderán hasta el otro día claro está jaja

Bueno me pasé a otro tema, siempre suelo ser así jeje. ya, ahora paso a pastear el script que solo necesitan copiarlo a un fichero de texto y ponerlo a correr, como siempre digo los post que pongo aquí son para personas que ya tienen la idea de que es python, como ejecutar un script, etc, vamos, con algo de noción de informática.


Code:

#!/usr/bin/python
# -*- coding=UTF-8 -*-

#       Copyright 2009 Jorge J. Lopez C. <lowlifebob[at]gmail.com>
#
#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.

import httplib

USER = "tuuser"  # username
PWD = "tupass" # password
CAT = "4"
"""
   CAT: [option]
   
   [options]:   
   1 = Colombiano
   2 = Copa Mundo
   3 = Alemania 2006
   4 = Argentino
"""
RESP = 5 # Numero de trivias



def download(dom, url, params=None, ref=False,
          cookie=None, ctype=False, clength=False):

   headers = {
            "User-Agent": "Mozilla/5.0 (X11; U; Linux i686; es-ES; \
             rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3",
            "Accept": "text/html,application/xhtml+xml,application/xml;q=\
            0.9,*/*;q=0.8",
            "Accept-Language": "es-es,es;q=0.8,en-us;q=0.5,en;q=0.3",
            "Accept-Charset": "UTF-8,*",
            "Keep-Alive": "300",
            "Proxy-Connection": "keep-alive"
            }
   if ref:
      headers["Referer"] = "http://www.futbolreto.com/trivia//index.php"
   if cookie:
      headers["Cookie"] = cookie
   if ctype:
      headers["Content-Type"] = "application/x-www-form-urlencoded"
   if clength:
      headers["Content-Length"] = len(params)      
   
   conn = httplib.HTTPConnection(dom, 80)
   if params:
      conn.request("POST", url, params, headers)
   else:
      conn.request("GET", url, params, headers)
   resp = conn.getresponse()
   return resp
   
def url_split(url):
   slashes = url.find("://")
   if slashes == -1:
      slashe = url.find("/")
      dom = url[:slashe]
      url = url[slashe:]
      return dom, url
   else:
      url = url[slashes + 3:]
      return url_split(url)

def search_between(ini, end, html):
   try:
      html = html[html.index(ini) + len(ini):]
      html = html[:html.index(end)]
      return html
   except:
      return None

if __name__ == "__main__":
   
   uri = "http://www.futbolreto.com/trivia//include/login.php"
   params = "loginname=" + USER + "&pass=" + PWD + "&log=Ingresar"

   dom, url = url_split(uri)
   resp = download(dom, url)

   cookie = resp.getheader("set-cookie")
   cookie = cookie[:cookie.find(";")]
   resp = download(dom, url, params, True, cookie, True, True)

   url = "/trivia/index.php?open=aktiv"
   download(dom, url, None, True, cookie)
   url = "/trivia/index.php?open=secure"
   download(dom, url, None, False, cookie)

   url = "/trivia/cargaswf93669366dave.php"
   params = "llama=1&onLoad=%5Btype%20Function%5D"
   xml = download(dom, url, params, False, cookie, True, True).read()
   daves = search_between("na=", "&&uids", xml)
   url = "/trivia/cargadordepreg.php"
   params = "categoria=categoria" + CAT +"&hsDaVeStOnE=" + daves

   for i in range(RESP):
      xml = download(dom, url, params, False, cookie, True, True).read()
      # parsing
      print ">", search_between("unta>", "</pregunta>", xml)
      print search_between("esta1>", "</respuesta1>", xml)


Bueno, es todo el código, cabe destacar que es solo una prueba ya que ahí no capturo ningún error ni nada que pueda suceder, eso ya va para el que quiera usarlo en algún proyecto de verdad y no sea un chiste como esto.

Como siempre dejaré una pequeña SS del script funcionado.



Espero que a alguien le sirva para base de manejo de sesiones con python, y claro, la idea está hecha para poder divertirnos un rato con esa página jugando a lo informático jeje

Saludos!!

PD cualquier duda por favor un comment!

4 Comentarios »

extraer emails con python

3 Abr 2009 | Escrito por: lopz | En: Python
Extraer emails de una página web usando python

Hola

Bueno, mucha gente se pregunta como realizar un spider o crawler para obtener datos de una página web de forma automática y en realidad no es tan difícil, solo bastaría con ir navegando por las urls, pero en este caso mostraremos como obtener cierto tipo de datos que nos interesan de la web, y por ahora mostraremos como extraer los mails de una página web o lo mismo es válido para un fichero de texto donde tengas emails y quieras tenerlos algo mas organizado o hasta en una base de datos.

La idea de este script es solo mostrar con que facilidad se puede hacer esto usando python, no quiero incitar a la gente que haga spam ni nada parecido, tampoco que lo usen para esos fines, y bueno tampoco es que yo sea el primero en postear algo así, y es que hay una cosa, cuando un usuario n00b quiere hacer spam, entonces este buscará un script que lo haga todo completo, y como este no es su fin osea que no le servirá, y si es un usuario avanzado el puede usarlo para estos fines, pero es obvio que el mismo podría hacerse uno en cualquier lenguaje, a su gusto y mucho mejor que este, osea que de cualquier forma no molestará a nadie :D



Code:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
#
#      PyImg2Text.py
#
#      Copyright 2009 Jorge J. Lopez C. <lowlifebob[arroba]gmail.com>
#
#      This program is free software; you can redistribute it and/or modify
#      it under the terms of the GNU General Public License as published by
#      the Free Software Foundation; either version 2 of the License, or
#      (at your option) any later version.
#
#      This program is distributed in the hope that it will be useful,
#      but WITHOUT ANY WARRANTY; without even the implied warranty of
#      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#      GNU General Public License for more details.
#
#      You should have received a copy of the GNU General Public License
#      along with this program; if not, write to the Free Software
#      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#      MA 02110-1301, USA.

import httplib
import re

const_dom = "www.nodo50.org"
const_url = "/cbc/lista.htm"
const_mailsrch = re.compile(r'[w-][w-.]+@[w-][w-.]+[a-zA-Z]{1,4}')

def download(dom, url):
   headers = {
            "User-Agent": "Mozilla/5.0 (X11; U; Linux i686; es-ES; \
             rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3",
            "Accept": "text/html,application/xhtml+xml,application/ \
            xml;q=0.9,*/*;q=0.8",
            "Accept-Language": "es-es,es;q=0.8,en-us;q=0.5,en;q=0.3",
            "Accept-Charset": "UTF-8,*",
            "Keep-Alive": "300",
            "Proxy-Connection": "keep-alive",
            }

   # conectamos con el servidor
   conn = httplib.HTTPConnection(dom, 80)
   # hacemos la peticion
   conn.request ("GET", url, None, headers)
   resp = conn.getresponse()
   return resp


def main():
   mails = []
   db = open('emails.txt', 'a')
   xml = download(const_dom, const_url).read()
   mails.extend(const_mailsrch.findall(xml))   
   
   for mail in mails:
      db.write(mail + 'n')
      print "Email:", mail
   db.close()

if __name__ == '__main__':
   main()


Como pueden ver hemos obtenido todos los emails de una página web y guardado en un fichero de texto plano, y como les decía, podíamos hacerlo a una DB, etc
la página que elegí es al azar, osea que no digan que tengo algo contra los dueños de esos emails.

Y como siempre a continuación pongo un SS del script funcionando




PD me olvidaba de algo, aquí uso expresiones regulares para extraer los emails, y es una bien sencilla, funciona como debe ser, pero NO ES CORRECTA, osea pueden haber una y muchas excepciones donde habrá un error al poner un email como válido o inválido, si quieren pueden buscar las regex para validar un email y se asombrarán lo complicado que resulta validarlo.

Saludos!

2 Comentarios »

busquedas google python

2 Abr 2009 | Escrito por: lopz | En: Python
Búsquedas en google desde python o usando python

Hola

Estos últimos días ando mirando código que tengo en mi HD y que lo escribí hace mucho tiempo, algunos míos otros modificados o usando partes de los ejemplos de las doc de python, pero hace unas semanas entró un usuario al canal de python-es en freenode a preguntar cómo podría hacer búsquedas desde python en google, y el tenía un código para esta función pero que no servía, y como no era mi código no quería tocarlo ni mirarlo y recordaba que hace tiempo había querido/necesitado hacer algo así, entones busqué el código y no funcionaba, pero cambiando unas cuantas líneas otra ves funcionó y lo pegaré aquí para que no se me olvide y sobre todo para compartirlo con otras personas que buscan mucho este tipo de cosas y creen que es realmente difícil hacerlo, pero aquí se desmiente todo.

Bueno, sin mas aquí les pego este código que busca en google según la palabra que ingreses y te mostrará los links de los resultados.

Aquí les dejo el script y como siempre solo tienes que copiarlo, pegarlo a un fichero de texto y ponerle el nombre que quieran con extensión .py pero repito, el que lo use supongo que ya sabrá lo que es python y como usar un script.


Code:

# Copyright (C) 2009 Jorge J. Lopez C. <lowlifebob[at]gmail[point]com>
# weblog : http://www.lopz.org

import httplib
import re
from sgmllib import SGMLParser

const_dom = "www.google.com.bo"
const_url = "/search?as_q=%s&hl=es&num=%s&safe=off"

class atag(SGMLParser):
   def reset(self):
      SGMLParser.reset(self)
      self.urls = []

   def start_a(self, attrs):
      href = [x for y, x in attrs if y=='href']
      if href:
         self.urls.extend(href)

def download(dom, url, query, num):
   headers = {
            "User-Agent": "Mozilla/5.0 (X11; U; Linux i686; es-ES; \
             rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3",
            "Accept": "text/html,application/xhtml+xml,application/ \
            xml;q=0.9,*/*;q=0.8",
            "Accept-Language": "es-es,es;q=0.8,en-us;q=0.5,en;q=0.3",
            "Accept-Charset": "UTF-8,*",
            "Keep-Alive": "300",
            "Proxy-Connection": "keep-alive",
            }

   # conectamos con el servidor
   conn = httplib.HTTPConnection(dom, 80)
   # hacemos la peticion a la imagen
   conn.request ("GET", url % (query, num), None, headers)
   resp = conn.getresponse()
   return resp

def get_links(dom, url, query, num):
   query = query.replace(' ','+')   
   ident = re.compile("related:")
   listalinks = []
   #descargamos la pagina
   resp = download(dom, url, query, num)
   html = resp.read()
   #extraemos todos los links
   links = atag()
   links.feed(html)
   links.close()

   for x in links.urls:
      if ident.search(x):
         url = x.replace("/search?hl=es&safe=off&q=related:","http://")
         listalinks.append(url)
   return listalinks

query = raw_input('Palabra a buscar :')
#num = raw_input('Numero de resultados: ')
links = get_links(const_dom, const_url, query, num=10)

for link in links:
   print link


y bueno, como siempre un pequeño ss funcionando.



Saludos!!

PD, por cierto, esta función puedes ponerle a un bot de IRC, realizar un crawler, etc

0 Comentarios »

Plugins xchat en python

1 Abr 2009 | Escrito por: lopz | En: Python
Plugins para xchat en python

Hola, bueno, aquí hice un pequeño plugin en python para xchat, su función es trasladar lo que uno escribe a cualquier lenguaje que soporte google translate, ya que uso este motor para realizar el traslado de las palabras y frases completas, su función es bien simple y uso es bien simple, pasará a explicar a continucación como instalarlo y usarlo:

Primero bajamos el código de plugins y lo guardamos en el directorio de xchat, normalmente está en /home/TU_USER/.xchat2/ lo cuardamos con el nombre del pyTrans.py, luego si abrimos el xchat lo tendría que cargar automáticamente, pero si no lo hace, podemos hacerlo nosotros escribiendo en la caja de entrada de texto del xchat el siguiente comando:

Code:
/py load pyTrans.py

y nos tendría que mostrar algo como:
pyTrans lang, loaded!!

Entonces ya habrá cargado el plugins si no lo hizo al iniciar el xchat, normalmente o siempre carga los plugins cuando se inicia.

Bueno, ahora es tan simple como poner "/t hola" (sin las comillas) en la entrada del xchat y el texto saldrá traducido al canal directo para que lo lean los usuarios, el plugins soporta la traducción de múltiples idiomas, tantos como soporta google translate, ya que usa este motor, por default el plugin está configurado para traducir del español al ingles, pero eso se puede configurar solo cambiando los valores de las variables a y b, también está la lista de lenguajes soportados, puedes realizar la combinación que desees.

Aquí dejaré el código pegado, lo que tienes que hacer es guardarlo con el nombre de pyTrans.py, o el nombre que quieras, pero recuerda que para cargarlo tienes que usar el mismo nombre /py loud nombre_script.py



Code:

# -*- coding: utf-8 -*-

# XChat translato spanish to english plugin
# Copyright (C) 2009 Jorge J. Lopez C. <lowlifebob[at]gmail[point]com>
# weblog : http://www.lopz.org

import xchat
import httplib

__module_name__ = "pyTransXchat"
__module_version__ = "1.0"
__module_description__ = "pyTrans lang"

# Lang. support
"""
sq : albanés
de : alemán
ar : árabe
bg : búlgaro
ca : catalán
cs : checo
zh-CN : chino
ko : coreano
hr : croata
da : danés
sk : eslovaco
sl : esloveno
es : español
et : estonio
fi : finlandés
fr : francés
gl : gallego
el : griego
iw : hebreo
hi : hindi
nl : holandés
hu : húngaro
id : indonesio
en : inglés
it : italiano
ja : japonés
lv : letón
lt : lituano
mt : maltés
no : noruego
pl : polaco
pt : portugués
ro : rumano
ru : ruso
sr : serbio
sv : sueco
tl : tagalo
th : tailandés
tr : turco
uk : ucraniano
vi : vietnamita
"""

a = "es"
b = "en"

const_dom_trans = "translate.google.es"
const_url_trans = "/translate_a/t?client=t&text=%s&sl=" + a + "&tl=" + b

def quote(s, safe = '/'):
   """ quote('abc def') -> 'abc%20def' """
   always_safe = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ'
               'abcdefghijklmnopqrstuvwxyz'
               '0123456789' '_.-')
   _safemaps = {}

   cachekey = (safe, always_safe)

   try:
      safe_map = _safemaps[cachekey]
   except KeyError:
      safe += always_safe
      safe_map = {}
      for i in range(256):
         c = chr(i)
         safe_map[c] = (c in safe) and c or ('%%%02X' % i)
      _safemaps[cachekey] = safe_map
   res = map(safe_map.__getitem__, s)
   return ''.join(res)

def download(dom, url, word=None):
   if word:
      headers = {
               "User-Agent": "Mozilla/5.0 (X11; U; Linux i686; es-ES; \
                rv:1.9.0.3) Gecko/2008092416 Firefox/3.0.3",
               "Accept": "text/html,application/xhtml+xml,application/xml; \
               q=0.9,*/*;q=0.8",
               "Accept-Language": "es-es,es;q=0.8,en-us;q=0.5,en;q=0.3",
               "Accept-Charset": "UTF-8,*",
               "Keep-Alive": "300",
               "Connection": "keep-alive"
               }

      # conectamos con el servidor
      conn = httplib.HTTPConnection(dom, 80)
      # hacemos la peticion a la imagen
      conn.request ("GET", (url % word), None, headers)
      resp = conn.getresponse()
      return resp
   else:
      pass


def main(words, word_eol, userdata):
   try:
      words = " ".join(words[1:])
      trans = download(const_dom_trans, const_url_trans, quote(words)).read()
      resp = trans[1:-1]
      xchat.command("msg %s %s" % (xchat.get_info("channel"), resp))   
   except:
      xchat.prnt("use: /t words")      
   return xchat.EAT_ALL

xchat.hook_command("t", main, help="/t words")
xchat.prnt(__module_description__ + ", loaded!!")



Y aquí está el mismo code pero en otra página http://dpaste.com/22396/
algo coloreado y con mejor aspecto

Cualquier duda, sugerencia, etc, por favor un comentario, o si lanza algun error el plugin igual, para así corregirlo, espero que a más de uno le sirva

Aquí una pequeña captura del plugin en funcionamiento, así debería ser la forma de enviarle el texto para que traduzca, caso contrario se usaría normalmente el xchat



Saludos!

3 Comentarios »

Imagen a texto PIL+python

24 Mar 2009 | Escrito por: lopz | En: Python
Imagen a texto PIL+python

Hola, el otro día estaba jugando con una librería para el tratamiento de imágenes en python, la cual se llama PIL, la verdad es que hasta donde he visto es fácil tratar las imágenes, aplicar filtros, etc, y bueno, para meterme algo más a fondo hice un pequeño script que toma de entrada una imágen en formato JPG o PNG, y que contenga algo, en este caso un número, que es el 1.

Estoy usando una imágen en blanco y negro para que haya resultado más fácil, si no, se habría tenido que limpiar el ruido del fondo de la imágen, etc, ya para eso hacíamos un captcha break hehe.

Y bueno, como les decía, abre la imágen, la procesa, y el final te imprime en pantalla el número de la imágen pero con ceros y unos, cada pixel representaría un número, si es de baja luminosidad pones un 0, y si no, un 1, entonces el resultado quedaría de la siguiente forma, y como dicen, una imagen vale más que mil palabras

La imágen antes de ser tratada con script en python



Y este es el resultado.



y bueno, se podría hacer un sistema de reconocimiento de caracteres en python usanro PIL, mapas de bits, y jugar con redes neuronales, en esto último me tengo que poner.

Espero que les haya servido de ejemplo y cualquier duda o comentarios dejar un comment y trataré de responder.

Aquí el código de script.


Code:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
#
#      PyImg2Text.py
#
#      Copyright 2009 Jorge J. Lopez C. <lowlifebob[arroba]gmail.com>
#
#      This program is free software; you can redistribute it and/or modify
#      it under the terms of the GNU General Public License as published by
#      the Free Software Foundation; either version 2 of the License, or
#      (at your option) any later version.
#
#      This program is distributed in the hope that it will be useful,
#      but WITHOUT ANY WARRANTY; without even the implied warranty of
#      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#      GNU General Public License for more details.
#
#      You should have received a copy of the GNU General Public License
#      along with this program; if not, write to the Free Software
#      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#      MA 02110-1301, USA.

# Import library
import Image

__program__ = "PyImg2Text"
__author__ = "Jorge J. López C."
__version__ = "0.1"

im = Image.open("1.jpg")
x, y = im.size

def procImgRGB(im):
   im_pxls = tuple(im.getdata())

   resp = []
   for i in range(len(im_pxls)):
      r = im_pxls[i][0]
      g = im_pxls[i][1]
      b = im_pxls[i][2]   
      if ((r + g + b) / 3) < 50:
         resp.append(1)
      else:
         resp.append(0)
   return resp

matrix = procImgRGB(im)

def make_list(flist, long):
    i = j = 0
    list_ = []
    while j < flist.__len__():
        j += long
        list_.append(flist[i:j])
        i = j
    return list_


matrixImg = make_list(matrix, x)
for i in matrixImg:
   print str(i).replace(", ", "")


Ya no hay necesidad de decirles que copien y peguen esto en un fichero y luego python script.py, por que supongo que el que quiera probar este script ya estará al menos familiarizado con este lenguaje.

Saludos!

2 Comentarios »

Bajar imágenes de google

23 Mar 2009 | Escrito por: lopz | En: Python
Bajar, descargar imágenes de google imágenes

Hola

Bueno, después de unos días sin postear aquí vengo con algo nuevo, resulta que un amigo mía tenía un programa hecho en processing el cual trabaja con imágenes, leyendo pixel a pixel y de acuerdo a su luminosidad de cada pixel lo pinta de otro color, en fin, eso es otro caso, el tema es que el me dijo que sería interesante poder bajar imágenes y trabajar con ellas, y bueno, que mejor que google para buscar imágenes y tratarlas con el programa de mi amigo, pero la cosa es que tenía que ser imágenes pequeñas, así para que sea rápido el proceso de las imágenes, y como digo, que mejor que los thumbnails de google que te muestra, entonces la cosa era bajarlos y guardarlos en un directorio, y bueno, me pidió que haga algo, y que mejor para estas cosas sencillas usar python, y bueno, este es el resultado, un simple script que baja las miniaturas de google imágenes y las guarda en el disco, no explicaré que hace cada línea, esto no es un tutorial ni algo parecido, simplemente quería compartir con ustedes este pequeño script, además aprender de el (para los nuevos como yo sirve)
y bueno, basta de blah blah y pego YA el script aquí, como ven solo uso una librería para bajar tanto la página web como las imágenes, igual se podría usar otras o hasta sockets si eres de los que le gusta escribir más código, por cierto cualquier duda, comentario, insulto será bienvenidos, entonces que esperan para comentar, eso si, menos spam coño!!


Code:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#
#      PyImgFetcher.py
#
#      Copyright 2009 Jorge J. Lopez C. <lowlifebob[arroba]gmail.com>
#
#      This program is free software; you can redistribute it and/or modify
#      it under the terms of the GNU General Public License as published by
#      the Free Software Foundation; either version 2 of the License, or
#      (at your option) any later version.
#
#      This program is distributed in the hope that it will be useful,
#      but WITHOUT ANY WARRANTY; without even the implied warranty of
#      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#      GNU General Public License for more details.
#
#      You should have received a copy of the GNU General Public License
#      along with this program; if not, write to the Free Software
#      Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#      MA 02110-1301, USA.

# Import library
import httplib

__program__ = "PyImgFetcher"
__author__ = "Jorge J. López C."
__version__ = "0.1"


# Configuration
const_dom_img = "tbn2.google.com"
const_url_img = "q=tbn:%s"
const_dom_google_img =  "images.google.com.bo"
const_url_google_img = "hl=es&q=%s"

def download(dom, url, query):
   # connect to server
   conn = httplib.HTTPConnection(dom, 80)
   # GET!!
   conn.request ("GET", "/images?" + url % (query))
   resp = conn.getresponse()
   return resp
   
   
def save_img(name_img, resp):
   # open or create the image
   img = file(name_img + ".jpg", "wb" )
   # saving image
   img.write(resp.read())
   # close image
   img.close()
   

def main():
   print "Downloader images thumbnails for google images by:lopzn"
   query = raw_input("Query: ")
   count_name_img = 0
   r = download(const_dom_google_img, const_url_google_img, query)
   l = r.read().split(':"')
   for i in l:
      p = ("").join(i)
      code = p[p.rfind('"')+1:]

      if code[code.rfind("M"):] == "M":
         resp = download(const_dom_img, const_url_img, code)
         name_img = "glitch_" + str(count_name_img)
         save_img(name_img, resp)
         count_name_img += 1
         print "saving image name", name_img
   print "nfinish downloading images!!!"         

if __name__ == "__main__":
   main()


y aquí dejaré una url para ver el script a colores y bonito
http://dpaste.com/18284/

Bueno, espero que a más de uno le sirva

PD, por cierto, es un script hecho a la rápida, como ven, no capturo errores ni nada parecido, ahhh otra cosa que lo sé, mi ingles apesta xDD

Saludos!

1 Comentario »

Seleccionar file TreeView

8 Dic 2008 | Escrito por: lopz | En: Python
Hola, después de mucho tiempo regreso a postear, ahora en este nuevo dominio, si, lo sé, suelo cambiar de dominio como de mujer jaja

En fin, en este blog suelo poner tonterías, y ahora pondré de nuevo otra tontería jiji, siempre que quiero poner un post pienso que si realmente vale la pena ponerlo, osea si será interesante para alguien y al final decido no ponerlo por que me parece no interesante y ahora en adelante empezaré a poner recortes de código de todo tipo, para ayudar a alguien que necesite algo así, y para no olvidarme y tenerlo aquí como pastebin, jeje

En esta oportunidad estaba buscando como seleccionar una fila en un TreeView, en pygtk y he encontrado una solución que seguro que a más de uno se servirá como a mí


Code:
        treeselection = MiTreeView.get_selection()
        model = MiTreeView.get_model()
        iter = model.get_iter((1, 0))
        treeselection.select_iter(iter)


Saludos!

2 Comentarios »

Bot para MetroFlog

10 Jun 2008 | Escrito por: lopz | En: Python
Bot para metroflog

Hola
Ya tengo unos días que no pongo nada en mi blog, es que no tenía nada interesante que poner y poco me gusta hacer copy/paste de otros blogs, etc, siempre trato de poner cosas técnicas, aunque ya hablaré de mi vida personal un día de estos...

Pues a lo que va el post, resulta que a mi mail me suelen llegar invitaciones para que vea sus feos metroflog's de algunos amigos y personas que no conozco, como es de esperarse estaba aburrido sin saber que hacer y peor que un tío me viene y me ofrece un bot para postear en los fotologs, pero necesitaba para los metros, además claro, me lo quería vender a un precio elevadísimo y no tengo pasta para nada, peor para pagar algo que yo mismo podía hacer o por lo menos intentar y de ahí a salido este pequeño bot que no hace mas que joder al dueño del bot jeje, no es algo ético pero me parece divertido jiji

¿Qué es lo que hace?
Pues nada del otro mundo, le pasas el link del metro y le envía comentarios hasta saturar sus pocos y míseros comentarios, que son 20, joder, qué poco... y tiene otras opciones para hacer lo mismo con sus "favoritos" y como no, darles un regalito a tus amiguetes que te ponen un ___on haha, igual es una araña por que hace lo mismo con los amigos, y amigos de los amigos, etc, algo de nunca acabar... un verdadero desastre

¿El code?
pues aquí lo tengo, no pienso postearlo para que le den mal uso al menos los spammers pero eso si, si están interesados en el, envíen un privado o mail y vemos en que quedamos.

¿y?
La verdad es que nunca pensé que fuese tan fácil poder hacer este tipo de cosas, robots que te automaticen la tarea diaria, en este caso, responderle a tus amiguetes con lo que piden.... que les dejes el _____on (rayón) y se lo dejas bien dejado.

Este metroflog utiliza un sistema de seguridad que es un envío máximo de 2 mensajes y tienes que esperar 5 minutos para el nuevo envío... pero esto el bot se lo pasa por el forro, en fin.. un post mas sin importancia alguna, ya que el que lo lea no obtendrá nada, pero a ver si se animan y hacen el suyo. Estoy pensando en hacer un pequeño ejemplo de robot para que tengan una base para hacer los suyos, pero en la red hay un montón de ejemplos y uso de las librerías en diferentes lenguajes.

Ya, creo que eso es todo el post por ahora.

Saludos!

PD: Ya sabe, si les interesa el code envíen un mail y charlamos.

1 Comentario »

exeCmd

10 Jun 2008 | Escrito por: lopz | En: Python
exeCmd - ejecutar comandos del sistema con python

Hola
Que nombre más original que le puse jeje, pero esto viene de la petición de un tío que quería ejecutar comandos en otro PC y recibir los datos desde donde los envía.
Hice unos pequeños scripts para esa tarea, le puse de nombre exeCmd. Ya creo que eso lo dice todo, son 2 script que uno es como un servidor y el otro cliente.


este código lo guardas con el nombre de shellinv.py.
¿Puedo guardarlo con otro nombre?
NO
¿por que?
ya chaval, deja de preguntas y guárdalo como te salga del forro.


Code:
#!/usr/bin/env python
# encoding: utf-8

#Copyright 2008 Jorge J. López C. <lowlifebob (at) gmail.com>

import socket
import commands

port = 4545
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.bind((socket.gethostname(), port))
server_sock.listen(1)

print "Waiting for connection on port: %d" % port

client_sock, client_info = server_sock.accept()
print "Accepted connection from ", client_info

while True:
    data = client_sock.recv(1024)
    if len(data) == 0: break
    cmd_resp = commands.getoutput(data)
    if cmd_resp == '':
        client_sock.send("OK")
    else:
        print "execute command: [%s] and sending resp." % data
        client_sock.send(cmd_resp)

client_sock.close()
server_sock.close()


Ahora este otro, lo guardas con el nombre de exeCmd.py
su nombre lo dice todo, tendrías que ser retrasado mental para no entender.

Code:

#!/usr/bin/env python
# encoding: utf-8

#Copyright 2008 Jorge J. López C. <lowlifebob (at) gmail.com>

import socket

port = 4545
ip = "127.0.0.1"

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((ip, port))

while True:
    user1 = raw_input("command exucute: ")
    sock.send(user1)
    resp = sock.recv(1024)
    print "Resp: ", resp
sock.close()



Ahora les dejo una captura de pantalla en acción, por cierto, ahí dice: "exucute", es error de dedo, y me dio pereza sacar una nueva jeje

"puedes probar los comandos que ves en la captura de pantalla" pero OJO, solo si sabes lo que hacen :cry:

Saludos!!

PD, joder, se me olvidaba la captura de pantalla que tanto la mencioné xDD



0 Comentarios »

   

 
  Pagina 1 de 2
Ir a pagina: 1, 2  Siguiente 

Powered by MySql' Powered by PHP XHTML Valido CSS Valido

Tiempo de carga del servidor: 0.0773