shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Script para baixar Diário Oficial do GDF


From: Jose Edson Moreno Jr
Subject: Re: [shell-script] Script para baixar Diário Oficial do GDF
Date: Sun, 13 Mar 2011 23:27:09 -0300

Alexandre,

   Sempre neste casos, é bom olhar com carinho de onde vem a informação e o
que deseja, bom neste caso, olhando a pagina principal onde se pega os
diarios ( http://www.buriti.df.gov.br/ftp/ ) , temos o frame que traz o ano
http://www.buriti.df.gov.br/ftp/ , com um pouco de código shell , tiramos a
listagem de anos (olhe o codigo fonte da página e verá detalhes sobre o post
para usar o ano e trazer o mes)  :

lynx --dump --source http://www.buriti.df.gov.br/ftp/default_ctd.cfm | grep
value=\" | awk -F'="' '{print $2}' | grep -v "Escolha o" | awk -F'"' '{print
$1}'

Novamente olhando o código fonte da página , podemos pegar o mês pois o ano
ou sua listagem já temos, é só especificar o ano :

echo "ano=2011" | lynx --dump -source --post_data
http://www.buriti.df.gov.br/ftp/default_ctd.cfm | grep "name=\"mes"\" -A 50
| grep value=\" | awk -F'="' '{print $2}' | grep -v "Escolha o" | awk -F'"'
'{print $1}'

Novamente olhando o código fonte da página, podemos pegar o próximo item, o
dia  ...

echo "ano=2011&mes=02_Fevereiro" | lynx --dump -source --post_data
http://www.buriti.df.gov.br/ftp/default_ctd.cfm  | grep "name=\"dia"\" -A
100 | grep value=\" | awk -F'="' '{print $2}' | grep -v "Escolha o" | awk
-F'"' '{print $1}'

Novamente olhando o código fonte da página, podemos pegar o próximo item, o
arquivo que deseja  ...

echo "ano=2011&mes=02_Fevereiro&dia=DODF+N%c2%ba+41+28-02-2011" | lynx
--dump -source --post_data http://www.buriti.df.gov.br/ftp/default_ctd.cfm |
grep href=\"ftp | awk -F'"' '{print $2}'

Veja , existe um detalhe crucial para tudo funcionar ... você tem que se
utilizar de um encoder para url .. pois existira dados que não pode ser
passado direto para o post como o "DODF Nº 41 28-02-2011" ... poderia se
utilizar de perl , php ou python que seria uma simples linha de comando, mas
como é shell e já mastiguei bastante coisa , segue um url encoder baseado em
awk

INICIO
------------------------------------------------------------------------------------------
#!/bin/bash
echo "$@" | awk '
    BEGIN {
        EOL = "%0A"             # "end of line" string (encoded)
        split ("1 2 3 4 5 6 7 8 9 A B C D E F", hextab, " ")
        hextab [0] = 0
        for ( i=1; i<=255; ++i ) ord [ sprintf ("%c", i) "" ] = i + 0
        if ("'"$EncodeEOL"'" == "yes") EncodeEOL = 1; else EncodeEOL = 0
    }
    {
        encoded = ""
        for ( i=1; i<=length ($0); ++i ) {
            c = substr ($0, i, 1)
            if ( c ~ /[a-zA-Z0-9.-]/ ) {
                encoded = encoded c             # safe character
            } else if ( c == " " ) {
                encoded = encoded "+"   # special handling
            } else {
                # unsafe character, encode it as a two-digit hex-number
                lo = ord [c] % 16
                hi = int (ord [c] / 16);
                encoded = encoded "%" hextab [hi] hextab [lo]
            }
        }
        if ( EncodeEOL ) {
            printf ("%s", encoded EOL)
        } else {
            print encoded
        }
    }
    END {
        #if ( EncodeEOL ) print ""
    }
'
FIM
------------------------------------------------------------------------------------------

Bom, como disse já mastiguei bastante , agora é só construir um script
juntando tudo e alcançar o seu objetivo final !

Boa Sorte !

Edson Moreno


Em 13 de março de 2011 15:22, Alexandre <address@hidden>escreveu:

>
>
> Companheiros,
>
> Apesar de já estar algum tempo na lista, sou inciante (em shellscript,
> programação, lógica de programação...), agora que comecei a estudar
> mesmo. Esse script será útil para mim, no entanto, o intuito maior é a
> aprendizagem.
>
> Estou tentando fazer um script para baixar o diário oficial do Governo
> do Distrito Federal disponíveis no endereço
> http://www.buriti.df.gov.br/ftp/default_ctd.cfm
>
> Um exemplo do endereço completo para o arquivo (sim, isso mesmo, cheio
> de espaços, cedilha, til..):
>
> http://www.buriti.df.gov.br/ftp/diariooficial/2011/03_Março/DODF Nº 47
> 10-03-2011/Seção01- 047.pdf
>
> Todavia, primeiramente fiz o seguinte:
>
> #!/bin/bash
>
> DIA=$(date +%d)
> MES=$(date +%B)
> MESN=$(date +%m)
> ANO=$(date +%Y)
>
> for P in 1 2 3 ; do
> #São 3 seções.
>
> wget "http://www.buriti.df.gov.br/ftp/diariooficial/
> "$ANO"/"$MESN"_"$MES"/DODF
> Nº 47 "$DIA"-"$MESN"-"$ANO"/Seção0"$P"- 047.pdf"
>
> exit 0
>
> -----
>
> Isso funciona. Só que tem o problema, o número 47 que aparece no link
> é o número do diário oficial do dia, e com exceção dos finais de
> semana e feriados, esse número muda. _Então, sem saber o que fazer,
> fiz o seguinte_:
>
> #!/bin/bash
>
> DIA=$(date +%d)
> MES=$(date +%B)
> MESN=$(date +%m)
> ANO=$(date +%Y)
>
> for P in 1 2 3 ; do
>
> for N in 47 48 49 50 51 53 52 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 124 125 126
> 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
> 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
> 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
> 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
> 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211
> 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228
> 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245
> 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262
> 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279
> 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296
> 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313
> 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330
> 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347
> 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364
> 365 ; do
> #Poderia calcular os dias uteis também, não fiz porque está em fase de
> criação.
>
> wget "http://www.buriti.df.gov.br/ftp/diariooficial/2011/03_Março/DODF
> Nº "$N" 11-03-2011/Seção0"$P"- 0"$N".pdf"
>
> done
>
> done
>
> exit 0
>
> ---
>
> É bem tosco e feio, mas funciona. No entanto, demora e no mínimo o
> administrador da rede [do GDF] vai pensar que estou querendo invadir
> ou derrubar o servidor com 365 requisições um atrás da outra todos os
> dias no mesmo horário. Também poderia todo mês calcular quantos
> diários serão lançados e colocar q quantidade no "for" para agilizar.
>
> Mas alguém saberia como fazer isso de uma outra forma?
>
> http://www.buriti.df.gov.br/ftp/diariooficial/2011/03_Março/DODF Nº 47
> 10-03-2011/Seção01- 047.pdf
>
> Ou seja, no link acima como gerar o número depois de Nº e depois de
> Seção01- que muda todo dia útil?
>
> Obrigado.
>
> Alexandre
>  
>



-- 
Jose Edson Moreno Jr.


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]