SlideShare una empresa de Scribd logo
1 de 29
Descargar para leer sin conexión
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

Más contenido relacionado

Destacado

NoSQL com Cassandra e Python
NoSQL com Cassandra e PythonNoSQL com Cassandra e Python
NoSQL com Cassandra e Pythonpugpe
 
Blender Com Python
Blender Com PythonBlender Com Python
Blender Com Pythonpugpe
 
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 xvraonyaraujo
 
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 GHMMpugpe
 
Clustering com numpy e cython
Clustering com numpy e cythonClustering com numpy e cython
Clustering com numpy e cythonAnderson Dantas
 
Wikilytics
WikilyticsWikilytics
Wikilyticspugpe
 
Rain Toolbox - Previsão de Chuvas
Rain Toolbox -  Previsão de ChuvasRain Toolbox -  Previsão de Chuvas
Rain Toolbox - Previsão de Chuvaspugpe
 
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 HerokuFilipe 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 TDDRafael Carício
 
Palestra sobre Inteligência Coletiva
Palestra sobre Inteligência ColetivaPalestra sobre Inteligência Coletiva
Palestra sobre Inteligência Coletivapugpe
 
Porque foi bom aprender com Python
Porque foi bom aprender com PythonPorque foi bom aprender com Python
Porque foi bom aprender com PythonFernando Rocha
 
Computação Científica com Python
Computação Científica com PythonComputação Científica com Python
Computação Científica com PythonHugo Serrano
 

Destacado (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
 

Similar 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 ComposeStefan Teixeira
 
Bdd rails 3
Bdd rails 3Bdd rails 3
Bdd rails 3tchandy
 
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 WorkshopAlexei Znamensky
 
Introducao ao python - Luciana Mota
Introducao ao python - Luciana MotaIntroducao ao python - Luciana Mota
Introducao ao python - Luciana Motalucianacmota
 
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 produtividadeIgor Nicoli
 
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 2010lucashungaro
 
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 ScrapyGabriel Freitas
 
TDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de DadosTDC2016SP - Trilha Banco de Dados
TDC2016SP - Trilha Banco de Dadostdc-globalcode
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn 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.pptMarcos 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 js4ALL 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 CasperJSFrederico Allan
 
HTML, CSS & JS: olhando pra frente
HTML, CSS & JS: olhando pra frenteHTML, CSS & JS: olhando pra frente
HTML, CSS & JS: olhando pra frenteLuiz Oliveira
 
Aula WebCrawlers com Regex - PyCursos
Aula WebCrawlers com Regex - PyCursosAula WebCrawlers com Regex - PyCursos
Aula WebCrawlers com Regex - PyCursosMarcel 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 ValeGabriel Machado
 

Similar 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
 

Más de pugpe

Projeto Amadeus
Projeto AmadeusProjeto Amadeus
Projeto Amadeuspugpe
 
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
Intropugpe
 
Palestra sobre Collections com Python
Palestra sobre Collections com PythonPalestra sobre Collections com Python
Palestra sobre Collections com Pythonpugpe
 
Visualização da Informação
Visualização da InformaçãoVisualização da Informação
Visualização da Informaçãopugpe
 
Criando comunidades bem sucedidas
Criando comunidades bem sucedidasCriando comunidades bem sucedidas
Criando comunidades bem sucedidaspugpe
 
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 enginepugpe
 
Qml + Python
Qml + PythonQml + Python
Qml + Pythonpugpe
 
Pip - Instalando Pacotes facilmente para Python
Pip - Instalando Pacotes facilmente para PythonPip - Instalando Pacotes facilmente para Python
Pip - Instalando Pacotes facilmente para Pythonpugpe
 
Pug pe vii - luciano rodrigues - debugger
Pug pe vii - luciano rodrigues - debuggerPug pe vii - luciano rodrigues - debugger
Pug pe vii - luciano rodrigues - debuggerpugpe
 
Pug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debuggerPug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debuggerpugpe
 
Python e Django
Python e DjangoPython e Django
Python e Djangopugpe
 
Python e Dispositivos Móveis
Python e Dispositivos MóveisPython e Dispositivos Móveis
Python e Dispositivos Móveispugpe
 
Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Developmentpugpe
 
Redes Neurais e Python
Redes Neurais e PythonRedes Neurais e Python
Redes Neurais e Pythonpugpe
 
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 Eventospugpe
 
Python Funcional
Python FuncionalPython Funcional
Python Funcionalpugpe
 
Open Allure
Open AllureOpen Allure
Open Allurepugpe
 
Iron Python
Iron PythonIron Python
Iron Pythonpugpe
 

Más 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
 

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