#!/bin/bash # Baixa por curl, em serie e com timeout longo, os itens de errors.md. # Descoberta de 13/09: a origem serve esses bitstreams a ~11 KB/s; o que # parecia "erro de rede" no navegador era estouro de tempo. Alguns voltam 403 # (bloqueio Cloudflare a cliente sem sessao) -- esses ficam para a aba. UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36" B=https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1 ok=0; b403=0; b500=0; outro=0 while IFS='|' read -r id seq arq; do [ -z "$id" ] && continue nome="BRAS__20.500.12156.1_${id}__$(python3 -c "import urllib.parse,sys;print(urllib.parse.unquote(sys.argv[1]))" "$arq")" [ -f "$HOME/Downloads/$nome" ] && continue code=$(curl -sL --max-time 600 -o "$HOME/Downloads/.parcial" -w "%{http_code}" \ -H "User-Agent: $UA" -H "Accept: image/*,*/*;q=0.8" \ -H "Referer: https://brasilianafotografica.bn.gov.br/" --compressed "$B/$id/$seq/$arq") sz=$(stat -f %z "$HOME/Downloads/.parcial" 2>/dev/null || echo 0) if [ "$code" = "200" ] && [ "$sz" -gt 1024 ]; then mv "$HOME/Downloads/.parcial" "$HOME/Downloads/$nome"; ok=$((ok+1)); echo "ok $id $((sz/1024)) KB" else rm -f "$HOME/Downloads/.parcial" case "$code" in 403) b403=$((b403+1));; 500) b500=$((b500+1));; *) outro=$((outro+1));; esac echo "erro $id http=$code ${sz}B" fi sleep 2 done < faltantes-v3.compacto.curl echo "FIM: ok=$ok 403=$b403 500=$b500 outros=$outro"