My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
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
122
123
# ----------------------------------------------------------------------------
# http://www1.caixa.gov.br/loterias
# Consulta os resultados da quina, megasena, duplasena, lotomania e lotofácil.
# Obs.: Se nenhum argumento for passado, todas as loterias são mostradas.
# Uso: zzloteria [quina | megasena | duplasena | lotomania | lotofacil]
# Ex.: zzloteria
# zzloteria quina megasena
#
# Autor: Aurelio Marinho Jargas, www.aurelio.net
# Desde: 2004-05-18
# Licença: GPL
# ----------------------------------------------------------------------------
zzloteria ()
{
zzzz -h loteria "$1" && return

local dump numero_concurso data resultado acumulado tipo sufixo
local url='http://www1.caixa.gov.br/loterias/loterias'
local tipos='quina megasena duplasena lotomania lotofacil'

# O padrão é mostrar todos os tipos, mas o usuário pode informar alguns
[ "$1" ] && tipos=$*

# Para cada tipo de loteria...
for tipo in $tipos
do
zztool eco $tipo:

# Há várias pegadinhas neste código. Alguns detalhes:
# - A variável $dump é um cache local do resultado
# - É usado ZZWWWDUMP+filtros (e não ZZWWWHTML) para forçar a saída em UTF-8
# - O resultado é deixado como uma única longa linha
# - O resultado são vários campos separados por pipe |
# - Cada tipo de loteria traz os dados em posições (e formatos) diferentes :/

if test "$tipo" = 'duplasena'
then
sufixo='_pesquisa_new.asp'
else
sufixo='_pesquisa.asp'
fi

dump=$($ZZWWWDUMP "$url/$tipo/$tipo$sufixo" |
tr -d \\n |
sed 's/ */ /g ; s/^ //')

# O número do concurso é sempre o primeiro campo
numero_concurso=$(echo "$dump" | cut -d '|' -f 1)

case "$tipo" in
lotomania)
# O resultado vem separado em campos distintos. Exemplo:
# |01|04|06|12|21|25|27|36|42|44|50|51|53|59|68|69|74|78|87|91|91|

data=$( echo "$dump" | cut -d '|' -f 42)
acumulado=$(echo "$dump" | cut -d '|' -f 70,71)
resultado=$(echo "$dump" | cut -d '|' -f 7-26 |
sed 's/|/@/10 ; s/|/ - /g' |
tr @ '\n'
)
;;
lotofacil)
# O resultado vem separado em campos distintos. Exemplo:
# |01|04|07|08|09|10|12|14|15|16|21|22|23|24|25|

data=$( echo "$dump" | cut -d '|' -f 39)
acumulado=$(echo "$dump" | cut -d '|' -f 58,59)
resultado=$(echo "$dump" | cut -d '|' -f 4-18 |
sed 's/|/@/10 ; s/|/@/5 ; s/|/ - /g' |
tr @ '\n'
)
;;
megasena)
# O resultado vem separado por asteriscos. Exemplo:
# | * 16 * 58 * 43 * 37 * 52 * 59 |

data=$( echo "$dump" | cut -d '|' -f 12)
acumulado=$(echo "$dump" | cut -d '|' -f 22,23)
resultado=$(echo "$dump" | cut -d '|' -f 21 |
tr '*' '-' |
tr '|' '\n' |
sed 's/^ - //'
)
;;
duplasena)
# O resultado vem separado por asteriscos, tendo dois grupos
# numéricos: o primeiro e segundo resultado. Exemplo:
# | * 05 * 07 * 09 * 21 * 38 * 40 | * 05 * 17 * 20 * 22 * 31 * 45 |

data=$( echo "$dump" | cut -d '|' -f 18)
acumulado=$(echo "$dump" | cut -d '|' -f 23,24)
resultado=$(echo "$dump" | cut -d '|' -f 4,5 |
tr '*' '-' |
tr '|' '\n' |
sed 's/^ - //'
)
;;
quina)
# O resultado vem duplicado em um único campo, sendo a segunda
# parte o resultado ordenado numericamente. Exemplo:
# | * 69 * 42 * 13 * 56 * 07 * 07 * 13 * 42 * 56 * 69 |

data=$( echo "$dump" | cut -d '|' -f 17)
acumulado=$(echo "$dump" | cut -d '|' -f 18,19)
resultado=$(echo "$dump" | cut -d '|' -f 15 |
sed 's/\* /|/6' |
tr '*' '-' |
tr '|' '\n' |
sed 's/^ - // ; 1d'
)
;;
esac

# Mostra o resultado na tela (caso encontrado algo)
if [ "$resultado" ]
then
echo "$resultado" | sed 's/^/ /'
echo " Concurso $numero_concurso ($data)"
[ "$acumulado" ] && echo " Acumulado em R$ $acumulado" | sed 's/|/ para /'
echo
fi
done
}

Change log

r710 by aureliojargas on Mar 29, 2012   Diff
SEGURANÇA: $1 colocado entre aspas na
chamada padrão zzzz -h de todas as
funções.
Go to: 
Sign in to write a code review

Older revisions

r668 by aureliojargas on Mar 28, 2012   Diff
lint: removendo espaços inúteis.
r655 by aureliojargas on Mar 23, 2012   Diff
s/Aurélio/Aurelio/ *
r486 by aureliojargas on May 20, 2011   Diff
COMBO: Arrumadas inconsistências de
espaços em branco na indentação de
várias funções. Foi usado o script
'alinhamento' para encontrar os
problemas. Estas alterações não mudam
...
All revisions of this file

File info

Size: 3884 bytes, 123 lines
Powered by Google Project Hosting