Conteúdo do Post
Olá pessoal,
Essa semana tem alguns links bem interessantes, voltado para o desenvolvimento com Python.
Yagmail: Um client para Gmail
A proposta desse projeto é facilitar o uso do Gmail como servidor de envio dos e-mails da sua aplicação. Suportando desde Python 2 a 3, ele possui uma API bem simplificada, podendo enviar e-mails nos formatos Plain Text a HTML. Segue um exemplo da documentação:
import yagmail yag = yagmail.SMTP() contents = ['This is the body, and here is just text <http://somedomain/image.png>', 'You can find an audio file attached.', '/local/path/song.mp3'] yag.send('to@someone.com', 'subject', contents)
yagmail.SMTP('mygmailusername').send('to@someone.com', 'subject', 'This is the body')
Furl: Um parser de URLs simplificado
Lidar com parseamentos de URL no Python nunca foi complicado, mas essa lib desafia a ponto de deixar um pouco mais prático. No README do projeto resume a biblioteca assim:
Python’s standard urllib and urlparse modules provide a number of URL related functions, but using these functions to perform common URL operations proves tedious. Furl makes parsing and manipulating URLs easy.
Um exemplo de como ele funciona:
>>> from furl import furl >>> f = furl('<http://www.google.com/?one=1&two=2>') >>> f /= 'path' >>> del f.args['one'] >>> f.args['three'] = '3' >>> f.url '<http://www.google.com/path?two=2&three=3>'
Lassie: extraindo conteúdo de páginas web
Quando envolve extração de algum conteúdo em páginas web, acabamos nos lembrando do BeautilfulSoup como também o Scrapy, e essa lib procura ser mais uma opção a ser considerada quando possui esse tipo de problema. Ele acaba coletando e organizando os tipos de dados que uma página web possui de forma bem intuitiva inclusive. Segue um exemplo:
>>> import lassie >>> lassie.fetch('<http://www.youtube.com/watch?v=dQw4w9WgXcQ>') { 'description': u'Music video by Rick Astley performing Never Gonna Give You Up. YouTube view counts pre-VEVO: 2,573,462 (C) 1987 PWL', 'videos': [{ 'src': u'<http://www.youtube.com/v/dQw4w9WgXcQ?autohide=1&version=3>', 'height': 480, 'type': u'application/x-shockwave-flash', 'width': 640 }, { 'src': u'<https://www.youtube.com/embed/dQw4w9WgXcQ>', 'height': 480, 'width': 640 }], 'title': u'Rick Astley - Never Gonna Give You Up', 'url': u'<http://www.youtube.com/watch?v=dQw4w9WgXcQ>', 'keywords': [u'Rick', u'Astley', u'Sony', u'BMG', u'Music', u'UK', u'Pop'], 'images': [{ 'src': u'<http://i1.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg?feature=og>', 'type': u'og:image' }, { 'src': u'<http://i1.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg>', 'type': u'twitter:image' }, { 'src': u'<http://s.ytimg.com/yts/img/favicon-vfldLzJxy.ico>', 'type': u'favicon' }, { 'src': u'<http://s.ytimg.com/yts/img/favicon_32-vflWoMFGx.png>', 'type': u'favicon' }], 'locale': u'en_US' }
Python Awesome: coletânia de soluções em Python
Sobre o fato de que o Python é conhecido pelas sua baterias incluídas, todos concordamos, mas por ser uma linguagem de uso geral, sua versatilidade não tem limites. Esse site mostra sobre os mais variados projetos e que talvez encaixe como uma luva diante de algum problema no seu sistema.
Dateparser: tratando variados tipos de data na sua raspagem de dados
O Scrapinghub é famosa pela suas variadas soluções em raspagem de dados, como o Scrapy, seu carro chefe. É comum a medida que vai adquirindo experiência nesse tipo de problema, em criar módulos reutilizáveis para situações comuns como por exemplo: tratar variados formatos de data e hora e converter para o tipo datetime do Python, e é exatamente o que esse projeto se propõem. Segue um exemplo:
>>> import dateparser >>> dateparser.parse('Fri, 12 Dec 2014 10:55:50') datetime.datetime(2014, 12, 12, 10, 55, 50) >>> dateparser.parse('1991-05-17') datetime.datetime(1991, 5, 17, 0, 0) >>> dateparser.parse('In two months') # today is 1st Aug 2020 datetime.datetime(2020, 10, 1, 11, 12, 27, 764201) >>> dateparser.parse('1484823450') # timestamp datetime.datetime(2017, 1, 19, 10, 57, 30) >>> dateparser.parse('January 12, 2012 10:00 PM EST') datetime.datetime(2012, 1, 12, 22, 0, tzinfo=<StaticTzInfo 'EST'>)