-
Notifications
You must be signed in to change notification settings - Fork 118
/
Copy pathzznerdcast.sh
115 lines (109 loc) · 2.9 KB
/
zznerdcast.sh
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
# ----------------------------------------------------------------------------
# Lista os episódios do podcast NerdCast.
#
# Opções para a listagem:
# -n <número> - Quantidade de resultados retornados (padrão = 15)
# -d <data> - Filtra por uma data específica.
# -m <mês> - Filtra por um mês específico. Sem o ano seleciona atual.
# -a <ano> - Filtra por um ano em específico.
#
# Obs.: No lugar de -d, -m, -a pode usar --data, --mês ou --mes, --ano.
# Na opção -d, <data> pode ser "hoje", "ontem" e "anteontem".
# Na opção -n, <número> se for igual a 0, não limita a quantidade.
#
# Opções adicionais são consideradas termos a serem filtrados na consulta.
#
# Uso: zznerdcast [-n <número>| -d <data> | -m <mês>| -a <ano>] [texto]
# Ex.: zznerdcast
# zznerdcast -n 30
# zznerdcast -d 28.10.16
# zznerdcast -m 5/2014
# zznerdcast -a 2014 Empreendedor
# zznerdcast Terra
#
# Autor: Diogo Alexsander Cavilha <diogocavilha (a) gmail com>
# Desde: 2016-09-19
# Versão: 2
# Requisitos: zzzz zztool zzdatafmt zzunescape zzxml
# Tags: internet, consulta
# ----------------------------------------------------------------------------
zznerdcast ()
{
zzzz -h nerdcast "$1" && return
local cache=$(zztool cache nerdcast)
local limite='15'
local filtro='.'
local data
# Opções de linha de comando
while test "${1#-}" != "$1"
do
case "$1" in
-n)
if zztool testa_numero "$2"
then
limite="$2"
test "$limite" -eq 0 && limite='$'
shift
fi
shift
;;
-d | --data)
data=$(zzdatafmt --en -f "DD MMM AAAA" "$2" 2>/dev/null)
if test -n "$data"
then
unset limite
shift
fi
shift
;;
-m | --m[eê]s)
data=$(zzdatafmt --en -f "MMM AAAA" "1/$2" 2>/dev/null)
if test -n "$data"
then
unset limite
shift
fi
shift
;;
-a | --ano)
data=$(zzdatafmt --en -f "AAAA" "1/1/$2" 2>/dev/null)
if test -n "$data"
then
unset limite
shift
fi
shift
;;
--) shift; break ;;
-*) zztool -e uso nerdcast; return 1 ;;
esac
done
# Grepando os resultados
test $# -gt 0 && filtro="$*"
filtro=$(zztool endereco_sed "$filtro")
# Usa o cache se existir e estiver atualizado, senão baixa um novo.
if ! test -s "$cache" || test $(head -n 1 "$cache") != $(zzdatafmt --iso hoje)
then
zzdatafmt --iso hoje > "$cache"
zztool source "https://jovemnerd.com.br/feed-nerdcast/" |
zzxml --tag title --tag enclosure --tag pubDate |
awk '
/<title>/{ getline; if ($0 ~ /[0-9a-z] - /) printf $0 " | "}
/\.mp3"/{ printf $2 " | " }
/<pubDate>/{ getline; print $2,$3,$4 }
' |
sed '/url="/ { s///;s/"//; }' |
zzunescape --html >> "$cache"
fi
# Filtra pelo assunto
# Filtra por data ou quantidade
# E formata saída
sed -n "1d;${filtro}p" "$cache" |
if test -n "$data"
then
grep "${data}$"
else
sed "${limite}q"
fi |
awk -F ' [|] ' '/[|]/ { print $1,"|",$3; print $2; print "" }'
}