Skip to content

Instantly share code, notes, and snippets.

@maurobaraldi
Last active February 1, 2017 15:29
Show Gist options
  • Save maurobaraldi/6912319f4ba641ca2d8376376e8a6a99 to your computer and use it in GitHub Desktop.
Save maurobaraldi/6912319f4ba641ca2d8376376e8a6a99 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
from io import BytesIO
from os.path import abspath, dirname, join
from zipfile import ZipFile
from lxml.html import parse
from requests import get
baseurl = 'http://www1.caixa.gov.br/loterias/_arquivos/loterias/{product}'
basedir = abspath(dirname(__file__))
prods = {
'quina': {
'url': baseurl.format(product='D_quina.zip'),
'filename': join(basedir, 'D_QUINA.HTM'),
'headers': 'Concurso Data_Sorteio 1ª_Dezena 2ª_Dezena 3ª_Dezena 4ª_Dezena 5ª_Dezena Arrecadacao_Total Ganhadores_Quina Cidade UF Rateio_Quina Ganhadores_Quadra Rateio_Quadra Ganhadores_Terno Rateio_Terno Ganhadores_Duque Rateio_Duque Acumulado Valor_Acumulado Estimativa_Premio Valor_Acumulado_Sorteio_Especial_São_João'.split(),
'columns': range(22),
},
'lotofacil': {
'url': baseurl.format(product='D_lotfac.zip'),
'filename': join(basedir, 'D_LOTFAC.HTM'),
'headers': 'Concurso Data Sorteio ola1 Bola2 Bola3 Bola Bola5 Bola6 Bola7 Boa8 Bola9 Bola10 Bola1 Bola12 Bola13 Bola14 Bla15 Arrecadacao_Total anhadores_15_Números Ciade UF anhadores_14_Números Gahadores_13_Números Gnhadores_12_Númers Ganhadores_11_Números Valor_Rateio_15_Números Valor_Rateio_14_Números Valor_Rateio_13_Números Valor_Rateio_12_Números Valor_Rateio_11_Números Acumulado_15_Números Estimativa_Premio Valor_Acumulado_Especial'.split(),
'columns': range(33)
},
'megasena': {
'url': baseurl.format(product='D_megase.zip'),
'filename': join(basedir, 'D_MEGA.HTM'),
'headers': 'Concurso Data_Sorteio 1ª_Dezena 2ª_Dezena 3ª_Dezena 4ª_Dezena 5ª_Dezena 6ª_Dezena Arrecadacao_Total Ganhadores_Sena Cidade UF Rateio_Sena Ganhadores_Quina Rateio_Quina Ganhadores_Quadra Rateio_Quadra Acumulado Valor_Acumulado Estimativa_Prêmio Acumulado_Mega_da_Virada'.split(),
'columns': range(21),
},
'lotomania': {
'url': baseurl.format(product='D_lotoma.zip'),
'filename': join(basedir, 'D_LOTMAN.HTM'),
'headers': 'Concurso Data Sorteio Bola1 Bola2 Bola3 Bola4 Bola5 Bola6 Bola7 Bola8 Bola9 Bola10 Bola11 Bola12 Bola13 Bola14 Bola15 Bola16 Bola17 Bola18 Bola19 Bola20 Arrecadação_Total Ganhadores_20_Números Cidade UF Ganhadores_19_Números Ganhadores_18_Números Ganhadores_17_Números Ganhadores_16_Números Ganhadores_Nenhum_Número Valor_Rateio_20_Números Valor_Rateio_19_Números Valor_Rateio_18_Números Valor_Rateio_17_Números Valor_Rateio_16_Números Valor_Rateio_Nenhum_Número Acumulado_20_Números Acumulado_19_Números Acumulado_18_Números Acumulado_17_Números Acumulado_16_Números Acumulado_Nenhum_Número Estimativa_Prêmio Valor_Acumulado_Especial'.split(),
'columns': range(45),
},
'timemania': {
'url': baseurl.format(product='D_timema.zip'),
'filename': join(basedir, 'D_TIMEMA.HTM'),
'headers': 'Concurso Data Sorteio Bola1 Bola2 Bola3 Bola4 Bola5 Bola6 Bola7 Time_Coração Valor_Arrecadado Ganhadores_7_Números Cidade UF Ganhadores_6_Números Ganhadores_5_Números Ganhadores_4_Números Ganhadores_3_Números Ganhadores_Time_Coração Valor_Rateio_7_Números Valor_Rateio_6_Números Valor_Rateio_5_Números Valor_Rateio_4_Números Valor_Rateio_3_Números Valor_Time_Coração Valor_Acumulado Estimativa_Premio'.split(),
'columns': range(27),
},
'duplasena': {
'url': baseurl.format(product='d_dplsen.zip'),
'filename': join(basedir, 'D_DPLSEN.HTM'),
'headers': 'Concurso Data_Sorteio 1º_número_Sorteio1 2º_número_Sorteio1 3º_número_Sorteio1 4º_número_Sorteio1 5º_número_Sorteio1 6º_número_Sorteio1 Arrecadação_Total Ganhadores_Sena_Sorteio1 Cidade UF Rateio_Sena_Sorteio1 Acumulado_Sena_Sorteio1 Valor_Acumulado_Sena_Sorteio1 Ganhadores_Quina_Sorteio1 Rateio_Quina_Sorteio1 Ganhadores_Quadra_Sorteio1 Rateio_Quadra_Sorteio1 Ganhadores_Terno_Sorteio1 Rateio_Terno_Sorteio1 1º_número_Sorteio2 2º_número_Sorteio2 3º_número_Sorteio2 4º_número_Sorteio2 5º_número_Sorteio2 6º_número_Sorteio2 Ganhadores_Sena_Sorteio2 Rateio_Sena_Sorteio2 Ganhadores_Quina_Sorteio2 Rateio_Quina_Sorteio2 Ganhadores_Quadra_Sorteio2 Rateio_Quadra_Sorteio2 Ganhadores_Terno_Sorteio2 Rateio_Terno_Sorteio2 Estimativa_Prêmio Acumulado_Especial_de_Páscoa'.split(),
'columns': range(37),
},
'loteriafederal': {
'url': baseurl.format(product='D_federa.zip'),
'filename': join(basedir, 'D_LOTFED.HTM'),
'headers': 'Concurso Data_Sorteio 1º_Prêmio 2º_Prêmio 3º_Prêmio 4º_Prêmio 5º_Prêmio Valor_Primeiro_Prêmio Valor_Segundo_Prêmio Valor_Terceiro_Prêmio Valor_Quarto_Prêmio Valor_Quinto_Prêmio'.split(),
'columns': range(12),
},
'lotogol': {
'url': baseurl.format(product='d_lotogo.zip'),
'filename': join(basedir, 'D_LOTOGO.HTM'),
'headers': 'Concurso Data_Sorteio Cidade UF Ganhadores_5_Acertos Valor_Rateio_5_Acertos Acumulado_5_Acertos Valor_Acumulado_5_Acertos Ganhadores_4_Acertos Valor_Rateio_4_Acertos Acumulado_4_Acertos Valor_Acumulado_4_Acertos Ganhadores_3_Acertos Valor_Rateio_3_Acertos Acumulado_3_Acertos Valor_Acumulado_3_Acertos Jogo_1_Placar_Time_1 Jogo_1_Placar_Time_2 Jogo_2_Placar_Time_1 Jogo_2_Placar_Time_2 Jogo_3_Placar_Time_1 Jogo_3_Placar_Time_2 Jogo_4_Placar_Time_1 Jogo_4_Placar_Time_2 Jogo_5_Placar_Time_1 Jogo_5_Placar_Time_2 Arrecadacao_Total Estimativa_Premio'.split(),
'columns': range(28),
},
'loteca': {
'url': baseurl.format(product='d_loteca.zip'),
'filename': join(basedir, 'D_LOTECA.HTM'),
'headers': 'Concurso Data_Sorteio Ganhadores_14_Acertos Cidade UF Valor_Rateio_14_Acertos Acumulado Valor_Acumulado_14_Acertos Ganhadores_13_Acertos Valor_Rateio_13_Acertos Ganhadores_12_Acertos Valor_Rateio_12_Acertos Jogo_1 Jogo_2 Jogo_3 Jogo_4 Jogo_5 Jogo_6 Jogo_7 Jogo_8 Jogo_9 Jogo_10 Jogo_11 Jogo_12 Jogo_13 Jogo_14 Arrecadacao_Total Estimativa_Prêmio'.split(),
'columns': range(28),
},
}
def get_results(product):
url = prods[product]['url']
download = ZipFile(BytesIO(get(url, stream=True).content))
for _file_ in download.filelist:
if _file_.filename.lower().__contains__('htm'):
download.extract(_file_.filename, basedir)
return join(basedir, _file_.filename)
def meta_parser(product):
get_results(product)
rows = parse(prods[product]['filename'])
rows = rows.xpath("body/table")[0].findall("tr")
columns = prods[product]['columns']
for j, r in enumerate(rows[1::], 1):
data = [i.text for i in r.getchildren()]
if len(data) >= 12:
try:
row = [data[i] for i in columns]
yield dict(zip(prods[product]['headers'], row))
except Exception as e:
print('Erro: %s' % e)
print('Error on registry:{0} \n Resultado:{1}'.format(*[j, data]))
# tests
# print('Megasena:')
# print([i for i in meta_parser('megasena')])
# print('Lotofacil:')
# print([i for i in meta_parser('lotofacil')])
# print('Quina:')
# print([i for i in meta_parser('quina')])
# print('Lotomania:')
# print([i for i in meta_parser('lotomania')])
# print('Timemania:')
# print([i for i in meta_parser('timemania')])
# print('duplasena:')
# print([i for i in meta_parser('duplasena')])
# print('Loteria Federal:')
# print([i for i in meta_parser('loteriafederal')])
# print('Lotogol:')
# print([i for i in meta_parser('lotogol')])
Pygments==2.1.3
decorator==4.0.10
ipdb==0.10.1
ipython==5.1.0
ipython-genutils==0.1.0
lxml==3.7.0
pexpect==4.2.1
pickleshare==0.7.4
prompt-toolkit==1.0.9
ptyprocess==0.5.1
py==1.4.31
pytest==3.0.5
requests==2.12.4
simplegeneric==0.8.1
six==1.10.0
traitlets==4.3.1
wcwidth==0.1.7
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment