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
# ----------------------------------------------------------------------------
# http://weather.noaa.gov/
# Mostra as condições do tempo (clima) em um determinado local.
# Se nenhum parâmetro for passado, são listados os países disponíveis.
# Se só o país for especificado, são listadas as suas localidades.
# As siglas também podem ser usadas, por exemplo SBPA = Porto Alegre.
# Uso: zztempo <país> <localidade>
# Ex.: zztempo 'United Kingdom' 'London City Airport'
# zztempo brazil 'Curitiba Aeroporto'
# zztempo brazil SBPA
#
# Autor: Thobias Salazar Trevisan, www.thobias.org
# Desde: 2004-02-19
# Licença: GPL
# ----------------------------------------------------------------------------
zztempo ()
{
zzzz -h tempo "$1" && return

local codigo_pais codigo_localidade localidades
local pais="$1"
local localidade="$2"
local cache_paises="$ZZTMP.tempo"
local cache_localidades="$ZZTMP.tempo"
local url='http://weather.noaa.gov'

# Se o cache de países está vazio, baixa listagem da Internet
if ! test -s "$cache_paises"
then
$ZZWWWHTML "$url" | sed -n '
/="country"/,/\/select/ {
s/.*="\([a-zA-Z]*\)">\(.*\) <.*/\1 \2/p
}' > "$cache_paises"
fi

# Se nenhum parâmetro for passado, são listados os países disponíveis
if ! [ "$pais" ]
then
sed 's/^[^ ]* *//' "$cache_paises"
return
fi

# Grava o código deste país (BR Brazil -> BR)
codigo_pais=$(grep -i "$1" "$cache_paises" | sed 's/ .*//' | sed 1q)

# O país existe?
if ! [ "$codigo_pais" ]
then
echo "País \"$pais\" não encontrado"
return 1
fi

# Se o cache de locais está vazio, baixa listagem da Internet
cache_localidades=$cache_localidades.$codigo_pais
if ! test -s "$cache_localidades"
then
$ZZWWWHTML "$url/weather/${codigo_pais}_cc.html" | sed -n '
/="cccc"/,/\/select/ {
//d
s/.*="\([a-zA-Z]*\)">/\1 /p
}' > "$cache_localidades"
fi

# Se só o país for especificado, são listadas as localidades deste país
if ! [ "$localidade" ]
then
cat "$cache_localidades"
return
fi

# Pesquisa nas localidades
localidades=$(grep -i "$localidade" "$cache_localidades")

# A localidade existe?
if ! [ "$localidades" ]
then
echo "Localidade \"$localidade\" não encontrada"
return 1
fi

# Se mais de uma localidade for encontrada, mostre-as
if test $(echo "$localidades" | sed -n '$=') != 1
then
echo "$localidades"
return 0
fi

# Grava o código do local (SBCO Porto Alegre -> SBCO)
codigo_localidade=$(echo "$localidades" | sed 's/ .*//')

# Faz a consulta e filtra o resultado
echo
$ZZWWWDUMP "$url/weather/current/${codigo_localidade}.html" | sed -n '
/Current Weather/,/24 Hour/ {
//d
/____*/d
p
}'
}

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

r669 by aureliojargas on Mar 28, 2012   Diff
lint: removendo espaços inúteis. Parte
2.
r540 by aureliojargas on May 24, 2011   Diff
COMBO: Removidos espaços e tabs
inúteis do fim das linhas, verificados
por utils/alinhamento
r477 by aureliojargas on May 20, 2011   Diff
COMBO:
Arrumado o return de várias funções.
Agora usando return 1 quando algum
erro ocorre e return 0 quando é uma
saída OK. Outros casos onde pode haver
...
All revisions of this file

File info

Size: 2700 bytes, 99 lines
Powered by Google Project Hosting