Sign up to create your own snipts, or login.

Public snipts » italomaia's snipts The latest snipts from italomaia.

showing 1-12 of 12 snipts
  • script exemplo de utilização do clevercss
    # retirado de http://sandbox.pocoo.org/clevercss/
    import clevercss
    print clevercss.convert('''
    body:
      background-color: $background_color
    ''', {'background_color: 'red.darken(10)'})
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Feb 17, 2010 at 1:52 p.m. EST
  • amr2ogg script
    #!/bin/bash
    # The following packages are needed for this to work:
    # alsa-utils amrnb amrwb libamrnb3 libamrwb3 vorbis-tools
    
    ############################################################################
    #
    # date: 16/12/2009
    # author: italo maia
    # website: http://italomaia.com
    # script heavily based on http://snipt.net/d1s4st3r/tag/amrnb-decoder
    # special thanks to fernando: http://www.forumdebian.com.br/viewtopic.php?f=13&t=7125
    #
    ############################################################################
    
    if [ -e /usr/bin/amrnb-decoder ]
    then
        if [ -e /usr/bin/oggenc ]
        then
            if [ -f $1 ]
            then
                fname="${1%.*}"
                fext="${1##*.}"
                
                amrnb-decoder $1 $fname.raw
                oggenc -r -B 16 -C 1 -R 8000 -o $fname.ogg $fname.raw
                echo "cleaning up"
                rm $fname.raw
            else
                echo "file '$1' not found."
            fi;
        else
            echo "please, install oggenc"
        fi;
    else
        echo "please, install amrnb-decoder"
    fi;
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Dec 16, 2009 at 5:04 a.m. EST
  • css2clever translator. Simple and functional.
    #!/usr/bin/python
    # -*- coding:utf-8 -*-
    
    #--------------------------------------
    #
    # data: 30/11/2009
    # author: italo moreira campelo maia
    # http://italomaia.com
    # http://eusouolobomau.blogspot.com/
    #
    #--------------------------------------
    
    import os, sys, time
    import clevercss as clever
    
    def parse(filepath):
        if filepath.endswith(".clever"):
            with open(filepath) as file:
                data = file.read()
                return clever.convert(data)        
    
    def write(filename, data):
        with open(filename, 'w') as file:
            file.write(data)
    
    def write_clever(cfile, verb=False):
        data = parse(cfile)
        if verb:
            print "CLEVER FILE: ", cfile
            print "------------------------------------------"
            print ""
            print data
            print ""
        write("%s.css" % cfile[:-7], data)
        print ("%s.css criado." % cfile[:-7])
    
    def print_help():
        print "USAGE:"
        print "clever2css -c *.clever - cria"
        print "clever2css -c arquivo.clever - cria"
        print "clever2css -w *.clever - cria e observa por atualizações"
        print "clever2css -w arquivo.clever - cria e observa por atualizações"
        print "clever2css -q *.clever - modo simples"
        print "clever2css -q arquivo.clever - modo simples"
        print "clever2css -p *.clever - modo verborrágico"
        print "clever2css -p arquivo.clever - modo verborrágico"
        print "clever2css -q -p -c *.clever"
        print "clever2css -q -p -c arquivo.clever"
        
    
    def main(args):
        LIST=True
        WATCH=False
        CREATE=False
        PRINT=False
    
        if "-h" in args:
            print_help()
            exit(0)
    
        # quiet
        if "-q" in args:
            args.pop(args.index("-q"))
            LIST=False
    
        # create
        if "-c" in args:
            args.pop(args.index("-c"))
            CREATE=True
        
        if "-w" in args:
            args.pop(args.index("-w"))
            WATCH=True
    
        # print
        if "-p" in args:
            args.pop(args.index("-p"))
            PRINT=True
        
        if args:
            if LIST:
                print ""
                print "PROCESSANDO:"
                for arg in args: print "- %s" % arg
                print ""        
            
            if any([WATCH, CREATE]):
                if WATCH:
                    tdict = {}
                    while True:
                        for arg in args:
                            ftime = os.path.getmtime(arg)
                            
                            if tdict.get(arg, False)!=ftime:
                                tdict[arg]=ftime
                                write_clever(arg, PRINT)
                            time.sleep(0.5)
                elif CREATE:
                    for arg in args:
                        write_clever(arg, PRINT)
        else: print "Nada a fazer."
    
    if __name__=="__main__":
        main(sys.argv[1:])
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Dec 11, 2009 at 11:39 a.m. EST
  • comparativo mootools vs jquery
    // mootools Vs jquery
    // por: italo maia
    // data: 30/11/2009
    // http://italomaia.com/
    // http://eusouolobomau.blogspot.com/
    
    // pega o elemento com id=id
    $("#id"); // jquery - perl?
    $("id"); // mootools - codigo menor
    
    
    // jquery
    // duas formas de se adicionar eventos. Confuso!
    $("#id").bind("click", function(){alert("oi")});
    $("#id").click(function(){alert("oi")});
    
    // eventos tratados de formas diferentes
    document.ready(function(){alert("oi")}) ;
    
    
    // mootools
    // apenas uma forma de se adicionar eventos. Pythonico!
    $("id").addEvent("click", function(){alert("oi")});
    // eventos sao tradados de forma semelhante
    document.addEvent("domready", function(){alert("oi")});
    
    // pega todos os elementos de tagname=a
    // jquery - codigo menor
    $("a"); 
    // mootools - criterio de selecao definido pelo metodo e nao por marcacao
    $$("a");
    
    // conta ocorrencias
    
    // jquery - semelhante 
    $("a").size()
    
    // mootools - semelhante
    $$("a").size() 
    
    // jquery - nomeclatura de metodo confusa. style acessa ou define?
    $("#id").style('atrib', 'valor');
    
    // mootools - explicito > implicito
    $("id").setStyle('atrib', 'valor');
    
    // jquery - feio e maior. "javeiro"?
    $.each([1,2,3], function(index, el){alert(i);alert(el);});
    
    // mootools - sintaxe menor e mais bonita. each é método da lista
    [1,2,3].each(function(el, index){alert(i);alert(el);});
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Nov 29, 2009 at 9:59 p.m. EST
  • Converts ogg files to mp3 / Converte arquivos ogg para mp3
    #!/usr/bin/python
    #-*- coding: utf-8 -*-
    
    import os
    import sys
    import glob
    
    from subprocess import Popen, PIPE
    from optparse import OptionParser
    
    def process(folder, bitrate, keep_wav):
        # pega os arquivos do local especificado
        arqs = [ os.path.splitext(arq)[0] for arq in glob.glob( os.path.join(folder,"*.ogg") )]
        # ordena os bixin
        arqs.sort() 
        
        for arq in arqs:
            # transforma o arquivo para wav
            Popen( ("oggdec", "%s.ogg" % arq,), ).wait()
            
            # transforma o arquivo para mp3
            print "Convertendo `%s` para mp3" % arq
            p = Popen( ("lame", "-b 128", "%s.wav" % arq, "%s.mp3" % arq,), stdout=PIPE,stderr=PIPE )
        print "Terminando ultimo processo..."
        stdout, stderr = p.communicate()
        
        if not keep_wav:    
            print "Removendo arquivos .wav"
            for arq in arqs:
                os.remove("%s.wav" % arq)
        print "Fim..."
    
    if __name__=="__main__":
        print "---------------------------------------------------------------"
        print "* Programa desenvolvido por Italo Moreira Campelo Maia - UECE *"
        print "* www.italomaia.com.br                                        *"
        print "*                                                  25/02/2008 *"
        print "---------------------------------------------------------------"
        
        uso = """: python %prog [options]
        Requesitos: os programas oggdec e lame devem estar instalados"""
        
        parser = OptionParser(usage=uso, version="%prog 1.0")
        parser.add_option("-s", "--source", default="", help=u"Diretório onde estão seus arquivos .ogg")
        parser.add_option("-b", "--bitrate", default=128, type="int", help=u"Bitrate das mp3 geradas (ex:-b 128, --bitrate=160)")
        parser.add_option("-k", "--keep-wav", default=False, action="store_true", \
            help=u"""Caso a opção -k seja fornecida, os arquivos wav não serão apagados ao fim do processo""")
        try:
            # pega as opções do programa
            (options, args) = parser.parse_args()
        except:
            print "ocorreu um erro"
            exit()
        
        if options.keep_wav:
            print "Os arquivos .wav serão mantidos"
        else:
            print "Os arquivos .wav serão apagados ao fim do processo"
        if options.source:
            print "Os arquivos da pasta atual serão usados"
        else:
            print "Serão usados os arquivos do diretório %s" % options.source
        print "Será utilizado o bitrate %d para converter as mp3" % options.bitrate
        # executa o programa    
        process(options.source, options.bitrate, options.keep_wav)
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Oct 29, 2009 at 7:22 p.m. EDT
  • permite acessar a base do onemanga.com
    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    
    #------------------------------------
    #
    # autor: italo moreira campelo maia
    # website: http://italomaia.com/
    # data: 07/10/2009
    # last update: 13/02/2010
    # inspirado no script de Will Larson
    #
    #------------------------------------
    
    import os
    import re
    import sys
    import copy
    import time
    import shutil
    
    try:
        import Tkinter as tk
        import tkMessageBox as MessageBox
        import tkFileDialog as FileDialog
    except:
        tk = None
        print "Tkinter not installed. UI not avaiable."
    
    from os import path
    from socket import timeout
    from urlparse import urljoin
    from datetime import datetime
    from urllib2 import urlopen, URLError
    
    try:
        # download here: http://www.crummy.com/software/BeautifulSoup/
        from BeautifulSoup import BeautifulSoup 
    except:
        print "BeautifulSoup is required."
        print "You can install it from here: %s" % "http://www.crummy.com/software/BeautifulSoup/"
        sys.exit(1)
        
    TIMEOUT = 2
    WAIT_BETWEEN_REQUESTS = 2
    HOME_DIR = os.getenv("HOME")
    MAIN_PAGE = "http://www.onemanga.com/"
    RECENT_PAGE = "http://www.onemanga.com/recent/"
    DIRECTORY_PAGE = "http://www.onemanga.com/directory/"
    
    BASE_CACHE_PATH = path.exists('/tmp/') and "/tmp/omreader/" \
        or path.join(HOME_DIR, '/tmp/omreader/')
    
    CACHE_PATH = lambda arg : "%s%s:%s.json" % (BASE_CACHE_PATH, arg, datetime.today().strftime("%d-%m-%Y"))
    
    if not path.exists(BASE_CACHE_PATH):
        os.mkdir(BASE_CACHE_PATH)
    
    class OMReader(object):
        
        def __init__(self):
            self.series = get_series()
    
        def find(self, name):
            for i, v in enumerate(self.series):
                if name in v["name"].lower():
                    print "code:", i, "-", v["name"]
        
        def download(self, serie, chapter=None, page_id=None, basepath=None):
            log("downloading...please, wait")
            download_list = []
    
            if all([chapter, page_id]): # marca pagina para download
                page = chapter["pages"][page_id]
                load_image_source(page)
                filename = page["name"]
                download_list.append((filename, page))
                
            elif chapter is not None: # marca capitulo para download
                for page in chapter["pages"]:
                    load_image_source(page)
                    
                    filename = path.join(chapter["name"], page["name"])
                    download_list.append((filename, page))
            
            else: # marca o quadrinho todo para download
                for chapter in serie["chapters"]:
                    load_pages(chapter)
                    for page in chapter["pages"]:
                        load_image_source(page)
                        
                        filename = path.join(chapter["name"], page["name"])
                        download_list.append((filename, page))
            # baixa os quadrinhos da lista
            for filename, page in download_list:
                if basepath is not None:
                    filename = path.join(basepath, filename)
                
                folder = path.dirname(filename)
                
                if path.exists(filename):
                    print "'%s' exists. Moving on." % filename
                    continue
    
                if not path.exists(folder):
                    print "creating '%s'" % folder
                    os.mkdir(folder)
    
                image = get_manga_image(page)
                with open(filename, 'w') as file:
                    file.write(image)
        
        def put_cache(self):
            'Records the loaded series in a json cache'
            import json
            cache_path = CACHE_PATH("series")
            with open(cache_path, 'w') as file:
                json.dump(self.series, file)
    
    def log(msg):
        if VERBOSE: print msg
    
    def purlopen(source, timeout=TIMEOUT):
        'Tries to fetch a url, if it fails, tries again'
        try: return urlopen(source, timeout=timeout)
        except KeyboardInterrupt, e: raise e
        except Exception, e:
            log("timeout for source: %s" % source)
            time.sleep(WAIT_BETWEEN_REQUESTS)
            # ok. This part is messed up. Still thinking about it.
            return purlopen(source, timeout=timeout*2)
    
    def clear_cache():
        shutil.rmtree(BASE_CACHE_PATH)
        print "cache cleared."
    
    def get_series():
        cache_path = CACHE_PATH("series")
        if path.exists(cache_path):
            import json
            with open(cache_path) as file:
                temp = json.load(file)
            return temp
        else:
            print "connecting to:", DIRECTORY_PAGE
            handle = purlopen(DIRECTORY_PAGE)
            data = handle.read()
            handle.close()
            
            temp = []
            soup = BeautifulSoup(data)
            for match in soup.findAll('tr')[2:]:
                td_list = match.findAll('td')
                if len(td_list) is 3:
                    el_subject, el_chapter, el_status = td_list        
                    el_link = el_subject.find('a')
    
                    ctx = {}
                    ctx["name"] = el_link.string
                    ctx["url"] = urljoin(MAIN_PAGE, el_link['href'])
                    ctx["status"] = el_status.string and el_status.string or "unknown"
                    aka = el_subject.find('span', {'class':'aka'})
                    ctx["aka"] = aka and aka.string or ''
                    temp.append(ctx)
            return temp
    
    def load_chapters(serie):
        if not "chapters" in serie.keys():
            handle = purlopen(serie["url"])
            data = handle.read()
            handle.close()
            
            temp = []
            soup = BeautifulSoup(data)
            for match in soup.findAll('tr')[1:]:
                el_subject, el_scans, el_date = match.findAll('td')
                el_link = el_subject.find('a')
    
                data = []
                ctx = {}
                ctx["name"] = el_link.string
                ctx["url"] = urljoin(MAIN_PAGE, el_link['href'])
                ctx["scans"] = el_scans.string
                ctx["date"] = el_date.string
                temp.append(ctx)
            temp.reverse()
            serie["chapters"] = temp
    
    def load_pages(chapter):
        if not "pages" in chapter.keys():
            handle = purlopen(chapter["url"])
            data = handle.read()
            handle.close()
            
            soup = BeautifulSoup(data)
            el_cover = soup.find('div', {'id':'chapter-cover'})
            ul_el = el_cover.find('ul')
            pages_url = ul_el.find('a')['href']
            
            handle = purlopen(urljoin(MAIN_PAGE, pages_url))
            data = handle.read()
            handle.close()
            
            temp = []
            soup = BeautifulSoup(data)
            el_select = soup.find('select', {'id':'id_page_select'})            
            el_option_list = el_select.findAll('option')
            
            for opt in el_option_list:
                ctx = {}
                ctx["url"] = urljoin(chapter["url"], opt.string)
                ctx["ident"] = path.basename(ctx["url"])
                temp.append(ctx)
            chapter["pages"] = temp
    
    def load_image_source(page):
        if not "img_src" in page.keys():
            handle = purlopen(page["url"])
            data = handle.read()
            handle.close()
        
            soup = BeautifulSoup(data)
            page["img_src"] = soup.find('img', {'class':'manga-page'})['src']
            page["name"] = path.basename(page["img_src"])
    
    def get_manga_image(page):
        'Loads the image file for a page'
        log("retrieving: %s" % page["img_src"])
        handle = purlopen(page["img_src"])
        image = handle.read()
        handle.close()
        return image
    
    def print_help():
        print '''Usage: python onemanga.py option manga_number<:manga_chapter-1>
        Options:
            help:      shows the help message
            find:      findout the number of a particular manga
            download:  download a complete manga or chapter
            show:      get info about a certain manga
        
        Usage:
            omreader find wantedManga # don't use spaces!
            omreader download mangaId # downloads manga with ID mangaId
            omreader download mangaId:chapterNumber # downloads chapter Number from manga with ID mangaId
            omreader download mangaId:chapterNumber:pageNumber
            omreader show mangaId # shows manga with mangaId
            omreader show mangaId:chapterId # shows chapter Number from manga with ID mangaId
            omreader clear_cache # clear omreader cache
            omreader help # shows help message
        '''
    
    def serie_to_str(serie):
        serie_info = """\n ========== Manga ==========
             name : %(name)s
              url : %(url)s"
         chapters : %(released)d released
      last update : %(status)s
     ========== ***** ==========
    """
        load_chapters(serie)
        chapter_count = len(serie["chapters"])
        items = serie.items()+{"released" : chapter_count}.items()
        return serie_info % dict( items )
    
    def chapter_to_str(chapter):
        chapter_info = """\n ========= Chapter =========
             name : %(name)s
              url : %(url)s
             scan : %(scans)s
         released : %(date)s
     ========= ******* =========
    """
        return chapter_info % chapter
    
    def show(reader, serie_ident, chapter_ident=None):
        serie = reader.series[int(serie_ident)]
        load_chapters(serie)
        
        if chapter_ident is not None:
            chapter = serie["chapters"][int(chapter_ident)]
            print serie_to_str(serie) + chapter_to_str(chapter)
        else: print serie_to_str(serie)
    
    def download(reader, serie_ident, chapter_ident=None, page_ident=None):
        global FORCE
        serie, chapter, page = None, None, None
        serie = reader.series[int(serie_ident)]
        load_chapters(serie)
        
        if chapter_ident is not None:
            chapter = serie["chapters"][int(chapter_ident)-1]
            load_pages(chapter)
            if page_ident is not None:
                page = int(page_ident)
        
        if FORCE: reader.download(serie, chapter, page)
        else:
            if page is not None:
                if raw_input("Confirm download of page %s from chapter '%s', serie '%s'? (y/n)\n> " % (page_ident, chapter["name"], serie["name"])) in ("y", "s"):
                    FORCE = True
                    reader.download(serie, chapter, page)
            elif chapter is not None:
                if raw_input("Confirm download of chapter '%s', serie '%s'? (y/n)\n> " % (chapter["name"], serie["name"])) in ("y", "s"):
                    FORCE = True
                    reader.download(serie, chapter, page)
            elif raw_input("Confirm download of complete serie '%s'? (y/n)\n> " % serie["name"]) in ("y", "s"):
                    FORCE = True
                    reader.download(serie, chapter, page)
    
    def download_bash(reader, args):
        if len(args) == 2: # baixar quadrinhos inteiros
            init, end = int(args[0]), int(args[1])+1
            
            print "\nThe following series were found:"
            print "********************************"
            for s in reader.series[init:end]: print "|", s["name"]
            print "********************************\n"
            
            if FORCE or raw_input("Do you wish to download all series above? (y/n)\n> ") in ("y", "s"):
                for serie in reader.series[init:end]:
                    load_chapters(serie)
                    reader.download(serie)
        
        elif len(args) == 3: # baixar capitulos
            serie_ident = int(args[0])
            init, end = int(args[1])-1, int(args[2])
            serie = reader.series[serie_ident]
            load_chapters(serie)
            
            print "\nThe following chapters were found:"
            print "********************************"
            for chapter in serie["chapters"][init:end]: print "|", chapter["name"]
            print "********************************\n"
            
            if FORCE or raw_input("Do you wish to download all chapters above? (y/n)\n> ") in ("y", "s"):
                for chapter in serie["chapters"][init:end]:
                    load_pages(chapter)
                    reader.download(serie, chapter)
        else: print "nada a fazer."
    
    class InfoWindow(tk.Toplevel):
        def __init__(self, *args, **kwargs):
            tk.Toplevel.__init__(self, *args, **kwargs)
            self.initialize()
    
        def initialize(self):
            self.frame = tk.Frame(self)
            self.message = tk.Message(self.frame, justify=tk.CENTER, aspect=200, padx=2, pady=1)
            self.str_var = tk.StringVar()
            self.message.config(textvariable=self.str_var)
            self.ok_button = tk.Button(self, text="Ok", command=self.destroy)
            
            self.message.pack(expand=1, fill=tk.BOTH)
            self.frame.pack(expand=1, fill=tk.BOTH)
            self.ok_button.pack()
    
        def set_text(self, msg):
            self.str_var.set(msg)
    
    class DownloadDialog(tk.Toplevel):
        def __init__(self, *args, **kwargs):
            tk.Toplevel.__init__(self, *args, **kwargs)
            self.dpath, self.response = None, False
            self.initialize()
    
        def initialize(self):
            self.title('Download folder')
            self.frame = tk.Frame(self)
            self.label = tk.Label(self.frame)
            self.entry = tk.Entry(self.frame)
            self.ok_button = tk.Button(self, text="Ok", command=self.ok)
            self.cancel_button = tk.Button(self, text="Cancel", command=self.cancel)
            self.str_var = tk.StringVar()
    
            self.str_var.set('Download path')
            self.entry.insert(0, path.abspath("."))
            self.label.config(textvariable=self.str_var)
            self.frame.pack(fill=tk.BOTH, expand=True)
            self.label.pack(side=tk.LEFT)
            self.entry.pack(side=tk.LEFT)
            self.ok_button.pack(side=tk.RIGHT)
            self.cancel_button.pack(side=tk.RIGHT)
            self.resizable(False, False)
        
        def ok(self):
            self.response = True
            self.destroy()
    
        def cancel(self):
            self.response = False
            self.destroy()
    
    class SerieWindow(tk.Toplevel):
        def __init__(self, serie, *args, **kwargs):
            tk.Toplevel.__init__(self, *args, **kwargs)
            load_chapters(serie)
            self.serie = serie
    
        def initialize(self):
            self.ch_frame = tk.Frame(self)        
            self.listbox = tk.Listbox(self.ch_frame)
            self.listbox_scroll = tk.Scrollbar(self.ch_frame, orient=tk.VERTICAL)
            
            for chapter in self.serie["chapters"]:
                self.listbox.insert(tk.END, chapter["name"])
            self.listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
            self.listbox_scroll.pack(side=tk.RIGHT, fill=tk.Y)
            self.listbox_scroll.config(command=self.listbox.yview)
            self.listbox.config(yscrollcommand=self.listbox_scroll.set)
            self.ch_frame.pack(expand=1, fill=tk.BOTH)
            
    
    class AppUI(tk.Tk):
        def __init__(self, omreader, *args, **kwargs):
            tk.Tk.__init__(self, *args, **kwargs)
            self.omreader = omreader        
            self.initialize()
    
        def initialize(self):
            # configuring
            self.title("Onemanga UI")
            self.resizable(True, True)
            
            self.listframe = tk.Frame(self)
            
            # widgets
            self.listbox_scroll = tk.Scrollbar(self.listframe, orient=tk.VERTICAL)
            self.listbox = tk.Listbox(self.listframe)
            
            for serie in self.omreader.series:
                self.listbox.insert(tk.END, serie["name"])
            
            self.listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
            self.listbox_scroll.pack(side=tk.RIGHT, fill=tk.Y)
            self.listbox_scroll.config(command=self.listbox.yview)
            self.listbox.config(yscrollcommand=self.listbox_scroll.set)
            self.listframe.pack(expand=1, fill=tk.BOTH)
            
            self.dl_button = tk.Button(self, text="Download", command=self.download)
            self.info_button = tk.Button(self, text="Info", command=self.info)
            self.dl_button.pack(side=tk.RIGHT)
            self.info_button.pack(side=tk.RIGHT)
            
            self.listbox.bind('<Double-Button-1>', self.show_current_serie)
    
        def listbox_selection(self):
            return [self.omreader.series[sel] for sel in  map(int, self.listbox.curselection())]
        
        def show_current_serie(self, event):
            for serie in self.listbox_selection():
                serie_window = SerieWindow(serie, master=self)
                serie_window.title(serie["name"])
                serie_window.initialize()
    
        def download(self):
            selection = self.listbox_selection()
            dialog = DownloadDialog()
            self.wait_window(dialog)
            resp = dialog.response
            
            if resp:
                destiny_path = dialog.dpath
                for serie in selection:
                    self.omreader.download(serie)
    
        def info(self):
            for serie in self.listbox_selection():
                window = InfoWindow()
                window.set_text(serie_to_str(serie))
    
    def show_ui(omreader):
        root = AppUI(omreader)
        root.mainloop()
    
    def main(argv, omreader):
        
        ui_re = re.compile("^ui$")
        help_re = re.compile("^help$")
        find_re = re.compile("^find\s+(\w+)$")
        clear_cache_re = re.compile("^clear_cache$")
        
        show_re = re.compile("^show\s+(\d+):?(\d+)?$")
        dl_manga_re = re.compile("^download\s+(\d+)$")
        dl_chapter_re = re.compile("^download\s+(\d+):(\d+)$")    
        dl_page_re = re.compile("^download\s+(\d+):(\d+):(\d+)$")
        
        # ex: download 10-20
        dl_bash_manga_re = re.compile("^download\s+(\d+)\-(\d+)$")
        # ex: download 10:20-30
        dl_bash_chapter_re = re.compile("^download\s+(\d+):(\d+)\-(\d+)$")
        
        argc = " ".join(argv)
        
        if clear_cache_re.match(argc):
            clear_cache()
    
        elif ui_re.match(argc):
            if tk is not None:
                show_ui(omreader)
            else:
                print "Please, install tkinter to use graphical interface."
                sys.exit(0)
        
        elif help_re.match(argc):
            print_help()
        
        # procurando uma serie
        elif find_re.match(argc):
            m = find_re.match(argc)
            omreader.find(*m.groups())
        
        # mostrar informacoes
        elif show_re.match(argc):
            m = show_re.match(argc)
            show(omreader, *m.groups())
        
        # baixar manga
        elif dl_manga_re.match(argc):
            m = dl_manga_re.match(argc)
            download(omreader, *m.groups())
        
        # baixar capitulo
        elif dl_chapter_re.match(argc):        
            m = dl_chapter_re.match(argc)
            download(omreader, *m.groups())
        
        # baixar pagina
        elif dl_page_re.match(argc):
            m = dl_page_re.match(argc)
            download(omreader, *m.groups())
        
        elif dl_bash_manga_re.match(argc):
            m = dl_bash_manga_re.match(argc)
            download_bash(omreader, m.groups())
        
        elif dl_bash_chapter_re.match(argc):
            m = dl_bash_chapter_re.match(argc)
            download_bash(omreader, m.groups())
    
    if __name__=="__main__":
        # executa o programa como standalone
        global FORCE, VERBOSE
        run, FORCE, VERBOSE = True, False, False
        argv = copy.copy(sys.argv[1:])
        omreader = OMReader()
        
        if "-y" in argv:
            argv.remove("-y")
            FORCE=True
        
        if "-v" in argv:
            argv.remove("-v")
            VERBOSE=True
        
        while run:
            try:
                main(argv, omreader)
                run = False
            except timeout, e:
                print "timeout"
            except KeyboardInterrupt, e:
                print "\n- forced exit -\n"
                run = False
            except Exception, e:
                print "exp:",e
                print "type:", type(e)
                print "restarting"
                run = False
        omreader.put_cache()
        print ".finished.\n"
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Oct 07, 2009 at 11:01 a.m. EDT
  • baixa os quadrinhos do angeli
    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    
    #
    # author: italo mc maia
    # email: italo ponto maia arroba gimail ponto com
    # website: http://italomaia.com & http://eusouolobomau.blogspot.com/
    #
    
    "Baixa os quadrinhos do angeli"
    
    import sys, os
    from BeautifulSoup import BeautifulSoup
    from urllib import urlopen
    
    WEBSITE="http://camaracom.com.br/portal3/mundo-camara-2/quadrinhos-do-angeli/"
    
    def main(args):
        handle = urlopen(WEBSITE)
        data = handle.read()
        handle.close()
        soup=BeautifulSoup(data)
        
        
        entry_el=x=soup.find("div", {"class":"entry"})
        for img in entry_el.findAll("img"):
            comic_src=img.get("src")
            basename=os.path.basename(comic_src)
            with open(basename, "w") as file:
                handle=urlopen(comic_src)
                src_data=handle.read()
                handle.close()
                file.write(src_data)
                print "%s escrito" % basename
    
    if __name__=="__main__":
        print "Iniciando aplicativo por linha de comando"
        main(sys.argv[1:])
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Sep 24, 2009 at 7:13 p.m. EDT
  • imprime a lista de builtins do python em uma tabela
    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    
    #
    # data: 14/09/09
    # autor: italo maia <italo 'ponto' maia 'arroba' ´GIMAIL´ 'ponto' com>
    # website: http://italomaia.com/ | http://eusouolobomau.blogspot.com/
    #
    
    import sys
    
    str_size=0
    builtin_list = dir(__builtins__)
    for item in builtin_list:
        str_size=max(str_size, len(item))
    
    column_count = 3
    column_str = "%"+str(str_size)+"s|"
    columns_str = column_str * column_count
    line_str = "|%s"
    out = (str_size+1)*column_count*"-"+"-\n"
    
    temp=[]
    for i in range(len(builtin_list)):
        item = builtin_list.pop(0)
        temp.append(item)
        if len(temp) == column_count:        
            out+=line_str % columns_str % tuple(temp)
            temp=[]
            out+="\n"
    
    if len(temp) is 0:
        sys.exit(0)
    else:
        while len(temp) < column_count:
            temp.append("-")
        out+=line_str % columns_str % tuple(temp)
        out+="\n"
    
    out+= (str_size+1)*column_count*"-"+"-\n"
    print out
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Sep 14, 2009 at 6:24 p.m. EDT
  • reads nokia nbu contacts
    # -*- coding:utf-8 -*-
    
    #
    # data: 01/09/09
    # autor: italo moreira campelo maia
    # website: http://italomaia.com/ | http://eusouolobomau.blogspot.com/
    #
    
    "Lê os contatos de um arquivo de backup do symbian"
    # nao salva a imagem dos contatos
    
    import sys
    import os
    
    class Contact(object):
        att2field={
            'N:':'name',# nome
            'TEL;VOICE:':'tel',
            'TEL;VOICE;HOME:':'tel_res',# telefone de casa
            'TEL;VOICE;WORK':'tel_work',# telefone do trabalho
            'TEL;CELL:':'cell_tell',# celular
            'TEL;CELL;HOME:':'cell_home_tel',
            'TEL;CELL;WORK:':'cell_work_tel',
            'ADR;HOME:':'address_home',
            'ADR;WORK:':'address_work',
            'BDAY:':'birthday',
            'PHOTO;ENCODING=BASE64:':'photo'
        }
        def __iter__(self):
            for value in self.att2field.values():
                yield (value, getattr(self, value, ''))
    
        def __repr__(self):
            return str(self)
    
        def __str__(self):
            return str(dict(self))
    
        def format(self, fmt="%s:%s\n"):
            txt=''
            for key, value in self:
                if value:
                    txt+=fmt % (key,value)
            return txt
    
        def set_value(self, line):
            for key in self.att2field.keys():
                if line.startswith(key):
                    setattr(self, self.att2field[key], line[len(key):])
    
    def read_contacts(file):
        contact = None
        contacts = []
    
        for line in file.readlines():
            line = line.strip()
            if 'BEGIN:VCARD' in line:
                contact = Contact()
            elif line.startswith('END:VCARD'): # fim do contato
                contacts.append(contact)
                contact=None
            else:
                if contact is not None:
                    contact.set_value(line)
        return contacts
    
    def main(filename, output):
        if os.path.exists(filename):
            with open(filename, 'rb') as file:
                contacts = read_contacts(file)
            with open(output, 'w') as file:
                for i in range(len(contacts)):
                    c = contacts[i]
                    file.write(c.format())
                    file.write("\nContato %d:\n" % i)
            print "FINITO!"
        else: print "%s não existe" % filename
    
    def help():
        print """Este aplicativo lê contatos de um backup symbian
        Argumentos:
        <arquivo_nbu> <arquivo_saida>
        'arquivo_nbu' aponta para o arquivo de backup
        'arquivo_saida' informa onde deve ser gravado o arquivo de saída
    
        Exemplo:
        python read_nbu.py backup.nbu contatos_2009.txt"""
        sys.exit(0)
    
    if __name__=='__main__':
        if len(sys.argv[1:])!=2:
            help()
        else:
            main(*sys.argv[1:])
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Sep 01, 2009 at 8:29 p.m. EDT
  • como scriptar em python
    #!/usr/bin/python
    #-*- coding:utf-8 -*-
    
    #
    # autor: italo maia <italo 'ponto' maia 'arroba' ´GIMAIL´ 'ponto' com>
    # website: http://italomaia.com/ | http://eusouolobomau.blogspot.com/
    #
    
    import os.path as path
    import sys
    import zipfile
    import getopt
    
    def help():
        print """Utilização:
        python zip.py arq arq2...
        
    Argumentos:
        -h: mostra a ajuda"""
        sys.exit(0)
    
    def main(argv):
        "método que executa as funcionalidades do script"
        
        # -h -> não exige argumento
        opts, args = getopt.gnu_getopt(argv, "h")
        
        # garante que o arquivo de entrada é informado
        if len(args)==0: 
            print "Informe pelo menos um arquivo de entrada."
            sys.exit(0)
        
        # interpretando os parâmetros passados
        for opt, value in opts:
            if opt=="-h": help()
        
        for filename in args:
            
            if not path.isfile(filename): 
                print "'%s' não é um arquivo. Ignorado." % filename
                continue
            
            # um arquivo zipado não precisa ser zipado novamente
            if filename.endswith('.zip' ): 
                print "Nada a fazer com '%s'. Ignorado." % filename
                continue
        
            target = path.splitext(filename)[0]+".zip"
    
            # criando o arquivo zip
            fzip = zipfile.ZipFile(target, 'w', zipfile.ZIP_DEFLATED)
            fzip.write(filename)
            fzip.close()
            print "'%s' criado." % target
    
    if __name__=="__main__":
        # o primeiro argumento de argv e o nome do script sendo 
        # executado. Informação da qual não precisamos
        main(sys.argv[1:])
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Aug 17, 2009 at 1:25 p.m. EDT
  • Exemplo com gtkbuilder
    #!/usr/bin/python
    # -*- coding:utf-8 -*-
    
    # por: italo mc maia
    # data: indefinido
    # http://italomaia.com/
    # http://eusouolobomau.blogspot.com/
    
    
    import gtk
    
    gtk.require('2.0')
    
    class Example(object):
        GLADE_FILE = "caminho/gui.glade"
        def __init__(self):
            # construindo nosso builder
            builder = gtk.Builder()
            # carregando o .glade no builder
            builder.add_from_file(self.__class__.GLADE_FILE)
            # conectando os sinais definidos durante a construção
            # da interface a métodos de mesmo nome no objeto atual
            builder.connect_signals(self)
            # carregando o widget criado no glade3 pelo nome
            self.window = self.buider.get_object("main_window")
        
        def on_window_destroy(self):
            # finaliza o loop do gtk
            # deve haver um signal de nome 'on_window_destroy'
            # definido na interface
            gtk.main_quit()
        
        def show(self):
            # mostra a janela
            self.window.show()
    
    if __name__=="__main__":
        e = Example()
        e.show()
        gtk.main()
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Aug 12, 2009 at 11:56 a.m. EDT
  • estendendo o chooserdialog do gtk com python
    import gtk
    gtk.require('2.0')
    
    class ZipFileChooserDialog(gtk.FileChooserDialog):
        "Utilizado para escolher um arquivo zip do computador"
        def __init__(self):
            super(SeqFileChooserDialog, self).__init__()
            # inicializando botoes e texto da janela
            self.set_title("Carregar arquivo...")
            self.set_action(gtk.FILE_CHOOSER_ACTION_OPEN)
            self.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
            self.add_button(gtk.STOCK_OPEN, gtk.RESPONSE_OK)
                    
            # filtro padrao
            file_filter = gtk.FileFilter()
            file_filter.set_name("Somente arquivos zip")
            file_filter.add_pattern("*.zip")
            self.add_filter(file_filter)
            
            # filtro generico
            file_filter = gtk.FileFilter()
            file_filter.set_name("Todos os arquivos")
            file_filter.add_pattern("*")
            self.add_filter(file_filter)
            
        def get_response(self):
            """Retorna None caso a ação seja cancelada.
            Retorna o arquivo fasta selecionado, caso contrário."""
            response = self.run()
            if response == gtk.RESPONSE_OK:
                return self.get_filename()
            elif response == gtk.RESPONSE_CANCEL:
                return None
    
    if __name__=="__main__":
        chooser = ZipFileChooserDialog()
        r = chooser.get_response()
        print "resposta:", r
        chooser.destroy()
    

    copy | embed

    0 comments - tagged in  posted by italomaia on Aug 11, 2009 at 10:40 p.m. EDT
Sign up to create your own snipts, or login.