-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdata.py
121 lines (106 loc) · 7.52 KB
/
data.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#Autores: Andre Coradin Gulin e Fernando P. Domingues.
#Arquivo de pegar dados putoes da web, mascar e cuspir em um arquivo
#se meter algo alem disso, sera metido novamente em seu anel de carne
import urllib2
import randomdotorg as rdo
from urllib import urlopen
import re
import zipfile,os.path
from cookielib import CookieJar
import view as v
def get_zipfile():
v.msgs("MSG_DOWN_JOGOS") #Ao inves de baixar pelo shellscript
#optei por fazer o python baixar a parada
url = 'http://www1.caixa.gov.br/loterias/_arquivos/loterias/D_lotfac.zip' #mais a frente tera uma funcao q extrai as paradas
cj = CookieJar() #aqui o esquema eh q ele da uma bolacha(cookie) para um macaquinho
#e consegue pegar o arquivo zip lah do site
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) #abro a url
f = opener.open(url)
data = f.read() #pego o arquivo
with open("D_lotfac.zip", "wb") as code:
code.write(data) #escrevo no diretorio corrente
v.msgs("MSG_DOWN_JOGOS_END")
def unzip(source_filename, dest_dir): #uso biblioteca para tirar as facilidades do zip
v.msgs("MSG_EXTRACT") #e ainda aviso na tela, mtu bom :)
with zipfile.ZipFile(source_filename) as zf: #peguei essa parada das webs e acredito q funciona
for member in zf.infolist(): #na vdd, testei e funciona mesmo, entao eh isso ai
words = member.filename.split('/')
path = dest_dir
for word in words[:-1]:
drive, word = os.path.splitdrive(word)
head, word = os.path.split(word)
if word in (os.curdir, os.pardir, ''):
continue
path = os.path.join(path, word)
zf.extract(member, path)
v.msgs("MSG_EXTRACT_END")
def get_numbers():
mat_jogos = []
v.msgs("MSG_FIND_JOGOS")
# busca = (<td rowspan".*?">[0-9]{2,2}<td>){15,15} #python nao sabe brincar de grupos entao tive que abrir a parada toda:
busca = re.compile('<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>',re.DOTALL)
#busca recebe conjunto de 15 "jogos". jogos= "<td rowspan="###">##</td>"
# <td[^>]*?> -> pega o <td rowspan="###">
try: # \b -> pega qualquer caractere branco no fim de uma "palavra"
text = urlopen('file:D_LOTFAC.HTM').read()
for dado in busca.findall(text): # pega dados validos
line = []
dado = re.sub(r"<td[^>]*?>", "",dado) # remove tags. Numeros sorteados ficam em uma unica linha, separados por espaco.
dado = re.sub(r"</td>\s*", " ",dado)
line = [int(s) for s in dado.split() if s.isdigit()] # http://stackoverflow.com/questions/4289331/python-extract-numbers-from-a-string
if len(line) != 15: # bom garantir que nao estou fazendo cagada... hehehe
print "############################################################"
print "Jogo com "+len(line)+" numeros sorteados...."
print dado
else:
mat_jogos.append( sorted( line ) ) #ordena e coloca linha na matriz
mat_str_for_file = str(mat_jogos) #Gero arquivo de saida apenas para conferencia
mat_str_for_file = mat_str_for_file.replace("[","")
mat_str_for_file = mat_str_for_file.replace(",","")
mat_str_for_file = mat_str_for_file.replace("]","\n")
with open("Results.txt", "w") as saida:
saida.write(mat_str_for_file)
#v.msgs("MSG_FIND_JOGOS_END")
print "Foram lidos "+str(len(mat_jogos))+" jogos"
return mat_jogos
except IOError, e:
v.msgs('MSG_DEU_RUIM')
def getValues():
mat_jogos = []
#busca recebe conjunto de 15 "jogos". jogos= "<td rowspan="###">##</td>"
#busca = (<td rowspan".*?">[0-9]{2,2}<td>){15,15} #python nao sabe brincar de grupos entao tive que abrir a parada toda...
# <td[^>]*?> -> pega o <td rowspan="###">
# \b -> pega qualquer caractere branco no fim de uma "palavra"
busca = re.compile('<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>\s*<td[^>]*?>[0-9]{2,2}</td>',re.DOTALL)
text = urlopen('file:D_LOTFAC.HTM').read()
i = 0
for dado in busca.findall(text): # pega dados validos
line = []
# remove tags. Numeros sorteados ficam em uma unica linha, separados por espaco.
dado = re.sub(r"<td[^>]*?>", "",dado)
dado = re.sub(r"</td>\s*", " ",dado)
#print dado
line = [int(s) for s in dado.split() if s.isdigit()] # http://stackoverflow.com/questions/4289331/python-extract-numbers-from-a-string
# DEBUG
if len(line) != 15: # bom garantir que nao estou fazendo cagada... hehehe
print "############################################################"
print "Jogo com "+len(line)+" numeros sorteados...."
print dado
else:
# /DEBUG
mat_jogos.append( sorted( line ) ) #ordena e coloca linha na matriz
i+=1
def get_lucky(): #funcao para gerar um jogo de 15 numeros
r = rdo.RandomDotOrg('Controller') #baseado no random.org
numbers = list(range(1,26))
selected = [0]*16
v.msgs('MSG_GET_LUCKY')
for count in range(1,16): #escolho um numero e retiro ele das opcoes, ate encolher 15
selected[count]= r.choice(numbers) #choice eh uma das funcoes do randomdotorg
numbers.remove(selected[count])
selected.remove(0)
v.msgs('MSG_GET_LUCKY_END')
return sorted(selected)
def get_random():
r = rdo.RandomDotOrg('Controller') #baseado no random.org
return r.random(amount=1)[0]