SlideShare uma empresa Scribd logo
Lightning Talk
Using Python to Automate Repetitive Tasks
André Ericson
Novembro/2011, Pug-Pe
Using Python to Automate
Repetitive Tasks
Roteiro




    • Por que py?
    • Case of Study 1
         • Motivação
         • Objetivos
         • Ferramentas
    • Case of Study 2
         • Motivação
         • Objetivos
         • Resultados
         • Ferramentas
    • Code
    • Bonus
Por que Python?




  • Simplicidade
  • Legibilidade do Código
  • Tempo
  • Batteries Included
  • PyPI(17484 packages)
Por que Python?




  • Simplicidade
  • Legibilidade do Código
  • Tempo
  • Batteries Included
  • PyPI(17484 packages)
  • Não é Java
Case of Study: Unicap_br
Motivação
Unicap-br
Objetivos




    • Fazer o login no site da católica
    • Receber dados dos livros emprestados
    • Renovar livros
    • Checar sucesso da renovação
    • Renovar automaticamente com frequência Crontab
Unicap-br
Objetivos




    • Fazer o login no site da católica
    • Receber dados dos livros emprestados
    • Renovar livros
    • Checar sucesso da renovação
    • Renovar automaticamente com frequência Crontab
Unicap-br
Objetivos




    • Fazer o login no site da católica
    • Receber dados dos livros emprestados
    • Renovar livros
    • Checar sucesso da renovação
    • Renovar automaticamente com frequência Crontab
Unicap-br
Objetivos




    • Fazer o login no site da católica
    • Receber dados dos livros emprestados
    • Renovar livros
    • Checar sucesso da renovação
    • Renovar automaticamente com frequência Crontab
Unicap-br
Objetivos




    • Fazer o login no site da católica
    • Receber dados dos livros emprestados
    • Renovar livros
    • Checar sucesso da renovação
    • Renovar automaticamente com frequência Crontab
Unicap-br
Ferramentas




    • BeautifulSoup: HTML/XML parser designed for quick turnaround
     projects like screen-scraping
    • Mechanize: Stateful programmatic web browsing in Python
Unicap-br
Ferramentas




    • BeautifulSoup: HTML/XML parser designed for quick turnaround
     projects like screen-scraping
    • Mechanize: Stateful programmatic web browsing in Python
Case of Study: CheckSubs
Motivação
Objetivo




  • Checar legendas novas para determinadas séries de TV
  • Notificar quando uma nova legenda estiver disponível.
Objetivo




  • Checar legendas novas para determinadas séries de TV
  • Notificar quando uma nova legenda estiver disponível.
Resultado
Ferramentas




  • Python-twitter: A Python wrapper around the Twitter API
  • bitlyapi: A very thin wrapper for the bit.ly API
  • pynotify: Python bindings for libnotify(Desktop Notification Library)
  • feedparser: Parse Atom and RSS feeds in Python
Ferramentas




  • Python-twitter: A Python wrapper around the Twitter API
  • bitlyapi: A very thin wrapper for the bit.ly API
  • pynotify: Python bindings for libnotify(Desktop Notification Library)
  • feedparser: Parse Atom and RSS feeds in Python
Ferramentas




  • Python-twitter: A Python wrapper around the Twitter API
  • bitlyapi: A very thin wrapper for the bit.ly API
  • pynotify: Python bindings for libnotify(Desktop Notification Library)
  • feedparser: Parse Atom and RSS feeds in Python
Ferramentas




  • Python-twitter: A Python wrapper around the Twitter API
  • bitlyapi: A very thin wrapper for the bit.ly API
  • pynotify: Python bindings for libnotify(Desktop Notification Library)
  • feedparser: Parse Atom and RSS feeds in Python
Talk is cheap.
Show me the Code.
BeautifulSoup



  <tr class=’rel2’>
      <td nowrap><input type=’checkbox’
        name=’check_2’ value=’99236167@#1’>
      </td>
      <td nowrap>99236167</td>                soup = BeautifulSoup(request)
      <td nowrap>                             books = soup.findAll(’tr’, attrs={’class’:
           Introducao a administracao:                                re.compile(’rel.*’)})
           edicao compacta.</td>              return [Book(book) for book in books]
      <td nowrap>&nbsp;</td>                  ############################################
      <td nowrap>Livros</td>                  class Book(object):
      <td nowrap>25/10/2011</td>                  def __init__(self, soup_tag):
      <td nowrap>09/11/2011</td>                      tds = soup_tag.findAll(’td’)
      <td nowrap>&nbsp;</td>                          self.check = str(tds[0].find(’input’)
      <td nowrap>&nbsp;</td>                                                      [’name’])
      <td nowrap>Normal</td>                          self.title = tds[2].string.strip()
      <td nowrap>Biblioteca Central</td>
      <td nowrap>0</td>
      <td nowrap>15</td>
  </tr>
Mechanize




                                                browser = mechanize.Browser()
                                                cj = cookielib.LWPCookieJar()
  <form ... name="form1" ... >                  browser.set_cookiejar(cj)
      <input type="text" name="login">          browser.open(LOGIN_PAGE)
      <input type=’password’ name=’password’>   browser.select_form(name=’form1’)
  </form>                                       browser.form[’login’] = login
                                                browser.form[’password’] = password
                                                r = browser.submit()
Android(SL4A)
Android(SL4A)
Tasker
Dúvidas?




                     André Ericson
           http://www.github.com/aericson
                de.ericson@gmail.com
                      @_aericson

Mais conteúdo relacionado

Destaque

NoSQL com Cassandra e Python
NoSQL com Cassandra e PythonNoSQL com Cassandra e Python
NoSQL com Cassandra e Python
pugpe
 
Blender Com Python
Blender Com PythonBlender Com Python
Blender Com Python
pugpe
 
Postgresql +python
Postgresql +pythonPostgresql +python
Postgresql +python
Marcos Thomaz
 
Python e bancos NoSQL
Python e bancos NoSQLPython e bancos NoSQL
Python e bancos NoSQL
Marinho Brandão
 
Com vocês, Django!
Com vocês, Django!Com vocês, Django!
Com vocês, Django!
Marinho Brandão
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
antonio sérgio nogueira
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!
Juliano Atanazio
 
(entregando djangoapps)@tangerinalab - pugpe xv
(entregando djangoapps)@tangerinalab - pugpe xv(entregando djangoapps)@tangerinalab - pugpe xv
(entregando djangoapps)@tangerinalab - pugpe xv
raonyaraujo
 
REST APIs com Django
REST APIs com DjangoREST APIs com Django
REST APIs com Django
Mailson Menezes
 
Python Debugger - PUG-PE
Python Debugger - PUG-PE Python Debugger - PUG-PE
Python Debugger - PUG-PE
Arthur Alvim
 
Python e Cadeias de Markov GHMM
Python e Cadeias de Markov GHMMPython e Cadeias de Markov GHMM
Python e Cadeias de Markov GHMM
pugpe
 
Clustering com numpy e cython
Clustering com numpy e cythonClustering com numpy e cython
Clustering com numpy e cython
Anderson Dantas
 
Wikilytics
WikilyticsWikilytics
Wikilytics
pugpe
 
Rain Toolbox - Previsão de Chuvas
Rain Toolbox -  Previsão de ChuvasRain Toolbox -  Previsão de Chuvas
Rain Toolbox - Previsão de Chuvas
pugpe
 
Migrando do App Engine para o Heroku
Migrando do App Engine para o HerokuMigrando do App Engine para o Heroku
Migrando do App Engine para o Heroku
Filipe Ximenes
 
Peça seu código em casamento: Votos, Tópicos e TDD
Peça seu código em casamento: Votos, Tópicos e TDDPeça seu código em casamento: Votos, Tópicos e TDD
Peça seu código em casamento: Votos, Tópicos e TDD
Rafael Carício
 
Palestra sobre Inteligência Coletiva
Palestra sobre Inteligência ColetivaPalestra sobre Inteligência Coletiva
Palestra sobre Inteligência Coletiva
pugpe
 
Porque foi bom aprender com Python
Porque foi bom aprender com PythonPorque foi bom aprender com Python
Porque foi bom aprender com Python
Fernando Rocha
 
Computação Científica com Python
Computação Científica com PythonComputação Científica com Python
Computação Científica com Python
Hugo Serrano
 
Pep 8
Pep 8Pep 8

Destaque (20)

NoSQL com Cassandra e Python
NoSQL com Cassandra e PythonNoSQL com Cassandra e Python
NoSQL com Cassandra e Python
 
Blender Com Python
Blender Com PythonBlender Com Python
Blender Com Python
 
Postgresql +python
Postgresql +pythonPostgresql +python
Postgresql +python
 
Python e bancos NoSQL
Python e bancos NoSQLPython e bancos NoSQL
Python e bancos NoSQL
 
Com vocês, Django!
Com vocês, Django!Com vocês, Django!
Com vocês, Django!
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!
 
(entregando djangoapps)@tangerinalab - pugpe xv
(entregando djangoapps)@tangerinalab - pugpe xv(entregando djangoapps)@tangerinalab - pugpe xv
(entregando djangoapps)@tangerinalab - pugpe xv
 
REST APIs com Django
REST APIs com DjangoREST APIs com Django
REST APIs com Django
 
Python Debugger - PUG-PE
Python Debugger - PUG-PE Python Debugger - PUG-PE
Python Debugger - PUG-PE
 
Python e Cadeias de Markov GHMM
Python e Cadeias de Markov GHMMPython e Cadeias de Markov GHMM
Python e Cadeias de Markov GHMM
 
Clustering com numpy e cython
Clustering com numpy e cythonClustering com numpy e cython
Clustering com numpy e cython
 
Wikilytics
WikilyticsWikilytics
Wikilytics
 
Rain Toolbox - Previsão de Chuvas
Rain Toolbox -  Previsão de ChuvasRain Toolbox -  Previsão de Chuvas
Rain Toolbox - Previsão de Chuvas
 
Migrando do App Engine para o Heroku
Migrando do App Engine para o HerokuMigrando do App Engine para o Heroku
Migrando do App Engine para o Heroku
 
Peça seu código em casamento: Votos, Tópicos e TDD
Peça seu código em casamento: Votos, Tópicos e TDDPeça seu código em casamento: Votos, Tópicos e TDD
Peça seu código em casamento: Votos, Tópicos e TDD
 
Palestra sobre Inteligência Coletiva
Palestra sobre Inteligência ColetivaPalestra sobre Inteligência Coletiva
Palestra sobre Inteligência Coletiva
 
Porque foi bom aprender com Python
Porque foi bom aprender com PythonPorque foi bom aprender com Python
Porque foi bom aprender com Python
 
Computação Científica com Python
Computação Científica com PythonComputação Científica com Python
Computação Científica com Python
 
Pep 8
Pep 8Pep 8
Pep 8
 

Semelhante a Automatizando tarefas com Python

Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeScrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Stefan Teixeira
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3
tchandy
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
Alexei Znamensky
 
Introducao ao python - Luciana Mota
Introducao ao python - Luciana MotaIntroducao ao python - Luciana Mota
Introducao ao python - Luciana Mota
lucianacmota
 
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividadeZabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Igor Nicoli
 
Python 06
Python 06Python 06
Python 06
Bruno Catão
 
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
lucashungaro
 
Django Básico
Django BásicoDjango Básico
Django Básico
Joffily Ferreira
 
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
Filipe Ximenes
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Tchelinux
 
Capturando a web com Scrapy
Capturando a web com ScrapyCapturando a web com Scrapy
Capturando a web com Scrapy
Gabriel Freitas
 
TDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de DadosTDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de Dados
tdc-globalcode
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
Kinn Julião
 
InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time
Umbler
 
Tdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptTdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.ppt
Marcos Artigas
 
Tutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper jsTutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper js
4ALL Tests
 
Tutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSTutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJS
Frederico Allan
 
HTML, CSS & JS: olhando pra frente
HTML, CSS & JS: olhando pra frenteHTML, CSS & JS: olhando pra frente
HTML, CSS & JS: olhando pra frente
Luiz Oliveira
 
Aula WebCrawlers com Regex - PyCursos
Aula WebCrawlers com Regex - PyCursosAula WebCrawlers com Regex - PyCursos
Aula WebCrawlers com Regex - PyCursos
Marcel Caraciolo
 
Logs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeLogs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP Vale
Gabriel Machado
 

Semelhante a Automatizando tarefas com Python (20)

Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker ComposeScrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
Scrum Gathering Rio 2016 - Conteinerizando Testes com Docker Compose
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
Introducao ao python - Luciana Mota
Introducao ao python - Luciana MotaIntroducao ao python - Luciana Mota
Introducao ao python - Luciana Mota
 
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividadeZabbix Conference LatAm 2019 - Automação: Ganhando produtividade
Zabbix Conference LatAm 2019 - Automação: Ganhando produtividade
 
Python 06
Python 06Python 06
Python 06
 
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
Coisas que aprendi e quero passar adiante - RubyConf Brasil 2010
 
Django Básico
Django BásicoDjango Básico
Django Básico
 
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
APIs: o que são? onde vivem? do que se alimentam? [PyNE2016]
 
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
Desenvolvendo um buscador com PHP e Elasticsearch - Fernando Silva - Tchelinu...
 
Capturando a web com Scrapy
Capturando a web com ScrapyCapturando a web com Scrapy
Capturando a web com Scrapy
 
TDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de DadosTDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de Dados
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time InfluxDb: como monitorar milhares de dados por segundo em real time
InfluxDb: como monitorar milhares de dados por segundo em real time
 
Tdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.pptTdc2016 trilha-banco-influx.ppt
Tdc2016 trilha-banco-influx.ppt
 
Tutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper jsTutorial visão automação de testes e casper js
Tutorial visão automação de testes e casper js
 
Tutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJSTutorial - Visão sobre Automação de Testes com CasperJS
Tutorial - Visão sobre Automação de Testes com CasperJS
 
HTML, CSS & JS: olhando pra frente
HTML, CSS & JS: olhando pra frenteHTML, CSS & JS: olhando pra frente
HTML, CSS & JS: olhando pra frente
 
Aula WebCrawlers com Regex - PyCursos
Aula WebCrawlers com Regex - PyCursosAula WebCrawlers com Regex - PyCursos
Aula WebCrawlers com Regex - PyCursos
 
Logs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP ValeLogs, pra que te quero! @ Meetup PHP Vale
Logs, pra que te quero! @ Meetup PHP Vale
 

Mais de pugpe

Projeto Amadeus
Projeto AmadeusProjeto Amadeus
Projeto Amadeus
pugpe
 
E o que danado é o PUG-PE?
E o que danado é o PUG-PE?E o que danado é o PUG-PE?
E o que danado é o PUG-PE?
pugpe
 
Intro
IntroIntro
Intro
pugpe
 
Palestra sobre Collections com Python
Palestra sobre Collections com PythonPalestra sobre Collections com Python
Palestra sobre Collections com Python
pugpe
 
Visualização da Informação
Visualização da InformaçãoVisualização da Informação
Visualização da Informação
pugpe
 
Criando comunidades bem sucedidas
Criando comunidades bem sucedidasCriando comunidades bem sucedidas
Criando comunidades bem sucedidas
pugpe
 
Desenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engineDesenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engine
pugpe
 
Qml + Python
Qml + PythonQml + Python
Qml + Python
pugpe
 
Pip - Instalando Pacotes facilmente para Python
Pip - Instalando Pacotes facilmente para PythonPip - Instalando Pacotes facilmente para Python
Pip - Instalando Pacotes facilmente para Python
pugpe
 
Pug pe vii - luciano rodrigues - debugger
Pug pe vii - luciano rodrigues - debuggerPug pe vii - luciano rodrigues - debugger
Pug pe vii - luciano rodrigues - debugger
pugpe
 
Pug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debuggerPug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debugger
pugpe
 
Python e Django
Python e DjangoPython e Django
Python e Django
pugpe
 
Python e Dispositivos Móveis
Python e Dispositivos MóveisPython e Dispositivos Móveis
Python e Dispositivos Móveis
pugpe
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
pugpe
 
Redes Neurais e Python
Redes Neurais e PythonRedes Neurais e Python
Redes Neurais e Python
pugpe
 
CATS: Sistema de Recomendação de Eventos
CATS: Sistema de Recomendação de EventosCATS: Sistema de Recomendação de Eventos
CATS: Sistema de Recomendação de Eventos
pugpe
 
Python Funcional
Python FuncionalPython Funcional
Python Funcional
pugpe
 
Open Allure
Open AllureOpen Allure
Open Allure
pugpe
 
Iron Python
Iron PythonIron Python
Iron Python
pugpe
 

Mais de pugpe (19)

Projeto Amadeus
Projeto AmadeusProjeto Amadeus
Projeto Amadeus
 
E o que danado é o PUG-PE?
E o que danado é o PUG-PE?E o que danado é o PUG-PE?
E o que danado é o PUG-PE?
 
Intro
IntroIntro
Intro
 
Palestra sobre Collections com Python
Palestra sobre Collections com PythonPalestra sobre Collections com Python
Palestra sobre Collections com Python
 
Visualização da Informação
Visualização da InformaçãoVisualização da Informação
Visualização da Informação
 
Criando comunidades bem sucedidas
Criando comunidades bem sucedidasCriando comunidades bem sucedidas
Criando comunidades bem sucedidas
 
Desenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engineDesenvolvendo aplicativos web com o google app engine
Desenvolvendo aplicativos web com o google app engine
 
Qml + Python
Qml + PythonQml + Python
Qml + Python
 
Pip - Instalando Pacotes facilmente para Python
Pip - Instalando Pacotes facilmente para PythonPip - Instalando Pacotes facilmente para Python
Pip - Instalando Pacotes facilmente para Python
 
Pug pe vii - luciano rodrigues - debugger
Pug pe vii - luciano rodrigues - debuggerPug pe vii - luciano rodrigues - debugger
Pug pe vii - luciano rodrigues - debugger
 
Pug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debuggerPug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debugger
 
Python e Django
Python e DjangoPython e Django
Python e Django
 
Python e Dispositivos Móveis
Python e Dispositivos MóveisPython e Dispositivos Móveis
Python e Dispositivos Móveis
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
 
Redes Neurais e Python
Redes Neurais e PythonRedes Neurais e Python
Redes Neurais e Python
 
CATS: Sistema de Recomendação de Eventos
CATS: Sistema de Recomendação de EventosCATS: Sistema de Recomendação de Eventos
CATS: Sistema de Recomendação de Eventos
 
Python Funcional
Python FuncionalPython Funcional
Python Funcional
 
Open Allure
Open AllureOpen Allure
Open Allure
 
Iron Python
Iron PythonIron Python
Iron Python
 

Último

História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 

Último (8)

História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 

Automatizando tarefas com Python

  • 1. Lightning Talk Using Python to Automate Repetitive Tasks André Ericson Novembro/2011, Pug-Pe
  • 2. Using Python to Automate Repetitive Tasks Roteiro • Por que py? • Case of Study 1 • Motivação • Objetivos • Ferramentas • Case of Study 2 • Motivação • Objetivos • Resultados • Ferramentas • Code • Bonus
  • 3. Por que Python? • Simplicidade • Legibilidade do Código • Tempo • Batteries Included • PyPI(17484 packages)
  • 4. Por que Python? • Simplicidade • Legibilidade do Código • Tempo • Batteries Included • PyPI(17484 packages) • Não é Java
  • 5. Case of Study: Unicap_br
  • 7. Unicap-br Objetivos • Fazer o login no site da católica • Receber dados dos livros emprestados • Renovar livros • Checar sucesso da renovação • Renovar automaticamente com frequência Crontab
  • 8. Unicap-br Objetivos • Fazer o login no site da católica • Receber dados dos livros emprestados • Renovar livros • Checar sucesso da renovação • Renovar automaticamente com frequência Crontab
  • 9. Unicap-br Objetivos • Fazer o login no site da católica • Receber dados dos livros emprestados • Renovar livros • Checar sucesso da renovação • Renovar automaticamente com frequência Crontab
  • 10. Unicap-br Objetivos • Fazer o login no site da católica • Receber dados dos livros emprestados • Renovar livros • Checar sucesso da renovação • Renovar automaticamente com frequência Crontab
  • 11. Unicap-br Objetivos • Fazer o login no site da católica • Receber dados dos livros emprestados • Renovar livros • Checar sucesso da renovação • Renovar automaticamente com frequência Crontab
  • 12. Unicap-br Ferramentas • BeautifulSoup: HTML/XML parser designed for quick turnaround projects like screen-scraping • Mechanize: Stateful programmatic web browsing in Python
  • 13. Unicap-br Ferramentas • BeautifulSoup: HTML/XML parser designed for quick turnaround projects like screen-scraping • Mechanize: Stateful programmatic web browsing in Python
  • 14. Case of Study: CheckSubs
  • 16. Objetivo • Checar legendas novas para determinadas séries de TV • Notificar quando uma nova legenda estiver disponível.
  • 17. Objetivo • Checar legendas novas para determinadas séries de TV • Notificar quando uma nova legenda estiver disponível.
  • 19. Ferramentas • Python-twitter: A Python wrapper around the Twitter API • bitlyapi: A very thin wrapper for the bit.ly API • pynotify: Python bindings for libnotify(Desktop Notification Library) • feedparser: Parse Atom and RSS feeds in Python
  • 20. Ferramentas • Python-twitter: A Python wrapper around the Twitter API • bitlyapi: A very thin wrapper for the bit.ly API • pynotify: Python bindings for libnotify(Desktop Notification Library) • feedparser: Parse Atom and RSS feeds in Python
  • 21. Ferramentas • Python-twitter: A Python wrapper around the Twitter API • bitlyapi: A very thin wrapper for the bit.ly API • pynotify: Python bindings for libnotify(Desktop Notification Library) • feedparser: Parse Atom and RSS feeds in Python
  • 22. Ferramentas • Python-twitter: A Python wrapper around the Twitter API • bitlyapi: A very thin wrapper for the bit.ly API • pynotify: Python bindings for libnotify(Desktop Notification Library) • feedparser: Parse Atom and RSS feeds in Python
  • 23. Talk is cheap. Show me the Code.
  • 24. BeautifulSoup <tr class=’rel2’> <td nowrap><input type=’checkbox’ name=’check_2’ value=’99236167@#1’> </td> <td nowrap>99236167</td> soup = BeautifulSoup(request) <td nowrap> books = soup.findAll(’tr’, attrs={’class’: Introducao a administracao: re.compile(’rel.*’)}) edicao compacta.</td> return [Book(book) for book in books] <td nowrap>&nbsp;</td> ############################################ <td nowrap>Livros</td> class Book(object): <td nowrap>25/10/2011</td> def __init__(self, soup_tag): <td nowrap>09/11/2011</td> tds = soup_tag.findAll(’td’) <td nowrap>&nbsp;</td> self.check = str(tds[0].find(’input’) <td nowrap>&nbsp;</td> [’name’]) <td nowrap>Normal</td> self.title = tds[2].string.strip() <td nowrap>Biblioteca Central</td> <td nowrap>0</td> <td nowrap>15</td> </tr>
  • 25. Mechanize browser = mechanize.Browser() cj = cookielib.LWPCookieJar() <form ... name="form1" ... > browser.set_cookiejar(cj) <input type="text" name="login"> browser.open(LOGIN_PAGE) <input type=’password’ name=’password’> browser.select_form(name=’form1’) </form> browser.form[’login’] = login browser.form[’password’] = password r = browser.submit()
  • 29. Dúvidas? André Ericson http://www.github.com/aericson de.ericson@gmail.com @_aericson