feat: acervo Brasiliana Fotográfica coletado e mural 3D no ar

Captura integral do acervo da Brasiliana Fotográfica (Biblioteca Nacional)
para s3://brasiliana: 13.060 itens, 12.985 com imagem de preservação, 13.059
com miniatura derivada, 2.137 cópias legadas e 636 posts do blog. 41.444
objetos no ledger.

Os 75 itens sem preservação estão em errors.md: a página do item responde
200, mas a origem serve o bitstream com HTTP 500. Nenhum fica fora do mural,
porque todos têm thumbnail.

Não versionado, por viver no bucket ou ser reconstruível: catálogo,
posts .jsonl, atlas .webp, sqlite de estado e logs. Credenciais ficam de
fora pelo .gitignore.
This commit is contained in:
rodado
2026-09-13 20:17:02 +02:00
commit 290c4cc21d
690 changed files with 81187 additions and 0 deletions
+344
View File
@@ -0,0 +1,344 @@
/* ===================================================================
FALTA v3 -- fecha a trilha 1 (212 itens de preservacao restantes).
POR QUE V3 (2026-09-13): a lista da v2 (73) estava subestimada. Recontagem
direta contra o bucket, com a fila de ~/Downloads ja esvaziada, da 212
itens sem NENHUMA imagem de preservacao -- ver achado 2.23. Inclui os 8 que
o subidor.py antigo apagou por confundir TIFF com licenca (achado 2.19).
Motor identico ao da v2, so a lista muda.
NAO cobre os 30 bitstreams "extra_seqN" apagados junto: o nome deles e
nosso, nao da origem, entao a URL precisa ser enumerada item a item com
pipeline/reparo-multibitstream.js antes.
POR QUE V2 (achado 2.18, 2026-09-12)
A v1 tinha tres defeitos que juntos viraram rate-limit na origem:
1. `iniciar()` nao se protegia contra chamada dupla -- cada
FALTA.iniciar()/retomar() num script ja rodando somava OUTRO loop
sobre o mesmo S. Deu `erros: 101` com `atual: 43/73`, e a pausa
de 3s combinada com a BN virou 1,5s ou menos.
2. Erro nao interrompia nada: o loop moia os 71 com 60s de backoff
cada, martelando a origem por mais de uma hora sem chance de
alguem olhar o resultado.
3. Nao registrava o codigo HTTP separado da mensagem, entao o
diagnostico dependia de ler FALHAS na mao.
Evidencia de que o problema e de origem, nao de URL: 10993 e 10995
baixaram as 22:52 e FALHARAM na passada seguinte, mesma URL. E os 71
tem 71/71 thumbs baixados com sucesso -- o item responde, o bitstream
de preservacao e que nao.
COMO USAR
1. Recarregue a aba antes de colar (mata loops velhos da v1).
2. Cole. Rode FALTA.iniciar().
3. Ele PARA SOZINHO depois de 5 erros seguidos e mostra a tabela
de codigos -- e o sinal de que a origem esta recusando, e insistir
so piora. Espere e rode FALTA.retomar() mais tarde.
FALTA.status() / .parar() / .retomar() / .erros() / .pendentes()
=================================================================== */
(() => {
/* [handle, preservation_url] -- apurados em 2026-09-13 (bucket, depois da fila esvaziar) */
const FALTANTES = [
["20.500.12156.1/101", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/101/1/imagem.jpg"],
["20.500.12156.1/1004", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/1004/1/imagem.jpg"],
["20.500.12156.1/1005", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/1005/1/imagem.jpg"],
["20.500.12156.1/1006", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/1006/1/imagem.jpg"],
["20.500.12156.1/1007", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/1007/1/imagem.jpg"],
["20.500.12156.1/1008", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/1008/1/imagem.jpg"],
["20.500.12156.1/1009", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/1009/1/imagem.jpg"],
["20.500.12156.1/1010", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/1010/1/imagem.jpg"],
["20.500.12156.1/1011", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/1011/1/imagem.jpg"],
["20.500.12156.1/1012", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/1012/1/imagem.jpg"],
["20.500.12156.1/1013", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/1013/1/imagem.jpg"],
["20.500.12156.1/1014", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/1014/1/imagem.jpg"],
["20.500.12156.1/1015", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/1015/1/imagem.jpg"],
["20.500.12156.1/6433", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/6433/1/0072430cx006-05t.jpg"],
["20.500.12156.1/6520", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/6520/1/007_IMG_1008t.jpg"],
["20.500.12156.1/6545", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/6545/1/CC-05-01-015-3.jpg"],
["20.500.12156.1/6555", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/6555/1/BR_RJANRIO_Q0_ADM_CPA_VFE_FOT_0009_m0003de0003.jpg"],
["20.500.12156.1/6568", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/6568/1/BR_RJANRIO_Q0_ADM_CPA_VFE_FOT_0019_m0001de0001.jpg"],
["20.500.12156.1/6570", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/6570/1/BR_RJANRIO_Q0_ADM_CPA_VFE_FOT_0024_m0001de0001.jpg"],
["20.500.12156.1/6656", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/6656/2/imagem.jpg"],
["20.500.12156.1/6669", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/6669/1/BP-06-TP-01-012.jpg"],
["20.500.12156.1/6670", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/6670/1/BP-06-TP-01-015.jpg"],
["20.500.12156.1/6674", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/6674/1/BP-06-TP-01-022.jpg"],
["20.500.12156.1/7034", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7034/1/007A6P3F08-004.jpg"],
["20.500.12156.1/7317", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7317/4/Alb%200294%20069ct.jpg"],
["20.500.12156.1/7326", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7326/4/Alb%200294%20037ct.jpg"],
["20.500.12156.1/7344", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7344/4/Alb%200294%20093ct.jpg"],
["20.500.12156.1/7353", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7353/4/Alb%200294%20097ct.jpg"],
["20.500.12156.1/7355", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7355/4/Alb%200259%20073%20ct.jpg"],
["20.500.12156.1/7358", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7358/1/BR_RJANRIO_OG_0_FOT_0001_021.jpg"],
["20.500.12156.1/7379", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7379/1/BR_RJANRIO_OG_0_FOT_0001_057.jpg"],
["20.500.12156.1/7386", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7386/1/BR_RJANRIO_OG_0_FOT_0001_067.jpg"],
["20.500.12156.1/7393", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7393/1/BR_RJANRIO_OG_0_FOT_0001_089.jpg"],
["20.500.12156.1/7438", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7438/1/BR_RJANRIO_OG_0_FOT_0001_085.jpg"],
["20.500.12156.1/7440", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7440/1/BR_RJANRIO_OG_0_FOT_0001_087.jpg"],
["20.500.12156.1/7457", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7457/4/Alb%200294%20127ct.jpg"],
["20.500.12156.1/7461", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7461/4/Alb%200259%20081ct.jpg"],
["20.500.12156.1/7463", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7463/4/Alb%200294%20106ct.jpg"],
["20.500.12156.1/7475", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7475/4/Alb%200259%20096ct.jpg"],
["20.500.12156.1/7515", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7515/4/Alb%200259%20145ct.jpg"],
["20.500.12156.1/7516", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7516/4/Alb%200259%20139ct.jpg"],
["20.500.12156.1/7517", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7517/3/Album%200035%20297%20CT.jpg"],
["20.500.12156.1/7529", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7529/5/Alb%200259%20130ct.jpg"],
["20.500.12156.1/7743", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7743/1/001ALA011011.jpg"],
["20.500.12156.1/7744", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7744/1/001ALA011012.jpg"],
["20.500.12156.1/7766", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7766/1/001ATK012010.jpg"],
["20.500.12156.1/7802", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7802/1/Alb%200036%20037%20CT%20ok.jpg"],
["20.500.12156.1/7814", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7814/1/Alb%200036%20081%20CT%20ok.jpg"],
["20.500.12156.1/7817", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7817/1/Alb%200036%20087%20CT%20ok.jpg"],
["20.500.12156.1/7848", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7848/1/Alb%200036%20013%20CT%20ok.jpg"],
["20.500.12156.1/7852", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7852/1/Album%200035%20105%20CT.jpg"],
["20.500.12156.1/7861", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7861/1/Album%200035%20088%20CT.jpg"],
["20.500.12156.1/7875", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7875/1/Album%200035%20078%20CT.jpg"],
["20.500.12156.1/7939", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/7939/2/imagem.jpg"],
["20.500.12156.1/8075", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8075/1/Alb%200038%20009%20CT%20ok.jpg"],
["20.500.12156.1/8128", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8128/1/014AM006009.jpg"],
["20.500.12156.1/8133", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8133/1/014AM010003.jpg"],
["20.500.12156.1/8141", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8141/1/014AM010014.jpg"],
["20.500.12156.1/8145", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8145/1/014AM012006.jpg"],
["20.500.12156.1/8161", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8161/1/014AM012058.jpg"],
["20.500.12156.1/8182", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8182/1/014AM019007.jpg"],
["20.500.12156.1/8187", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8187/1/014AM019013.jpg"],
["20.500.12156.1/8249", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8249/1/014AM002012.jpg"],
["20.500.12156.1/8254", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8254/1/014AM002019.jpg"],
["20.500.12156.1/8262", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8262/1/014AM003015.jpg"],
["20.500.12156.1/8267", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8267/1/014AM004003.jpg"],
["20.500.12156.1/8268", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8268/1/014AM005003.jpg"],
["20.500.12156.1/8271", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8271/1/014AM005005.jpg"],
["20.500.12156.1/8275", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8275/1/014AM005014.jpg"],
["20.500.12156.1/8277", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8277/1/014AM005020.jpg"],
["20.500.12156.1/8286", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8286/1/014AM006002.jpg"],
["20.500.12156.1/8313", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8313/1/001AAN005123.jpg"],
["20.500.12156.1/8316", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8316/1/001ACL019004.jpg"],
["20.500.12156.1/8374", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8374/1/002080NUS0309.jpg"],
["20.500.12156.1/8396", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8396/2/imagem.jpg"],
["20.500.12156.1/8739", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8739/1/007ALA102.jpg"],
["20.500.12156.1/8761", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8761/1/007ALA015.jpg"],
["20.500.12156.1/8762", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8762/1/007ALA016.jpg"],
["20.500.12156.1/8774", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8774/1/007ALA027.jpg"],
["20.500.12156.1/8781", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8781/1/007ALA033.jpg"],
["20.500.12156.1/8785", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8785/1/007ALA037.jpg"],
["20.500.12156.1/8796", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8796/1/007ALA047.jpg"],
["20.500.12156.1/8804", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8804/1/007ALA054.jpg"],
["20.500.12156.1/8825", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8825/1/007ALA073.jpg"],
["20.500.12156.1/8872", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8872/1/A05F03P02.jpg"],
["20.500.12156.1/8912", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/8912/1/pixinguinha04.jpg"],
["20.500.12156.1/9148", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/9148/1/007ALA091.jpg"],
["20.500.12156.1/10039", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10039/1/007CX190-01.jpg"],
["20.500.12156.1/10040", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10040/1/007CX190-05.jpg"],
["20.500.12156.1/10041", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10041/1/007CX190-11.jpg"],
["20.500.12156.1/10042", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10042/1/007CX190-14.jpg"],
["20.500.12156.1/10043", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10043/1/007CX190-16.jpg"],
["20.500.12156.1/10044", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10044/1/007CX194-08.jpg"],
["20.500.12156.1/10045", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10045/1/001CC007004.jpg"],
["20.500.12156.1/10046", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10046/1/007CX194-10.jpg"],
["20.500.12156.1/10047", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10047/1/007CX196-02.jpg"],
["20.500.12156.1/10048", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10048/1/007CX196-07.jpg"],
["20.500.12156.1/10049", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10049/1/007CX197-02.jpg"],
["20.500.12156.1/10050", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10050/1/007CX197-05.jpg"],
["20.500.12156.1/10051", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10051/1/007CX197-09.jpg"],
["20.500.12156.1/10052", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10052/1/007CX197-10.jpg"],
["20.500.12156.1/10053", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10053/1/007CX198-03.jpg"],
["20.500.12156.1/10054", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10054/1/007CX199-03.jpg"],
["20.500.12156.1/10055", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10055/1/007CX199-04.jpg"],
["20.500.12156.1/10056", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10056/1/001CC007005.jpg"],
["20.500.12156.1/10057", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10057/1/007CX214-12.JPG"],
["20.500.12156.1/10058", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10058/1/007CX237-01.jpg"],
["20.500.12156.1/10059", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10059/1/007SN-12.jpg"],
["20.500.12156.1/10060", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10060/1/007_IMG_1807.jpg"],
["20.500.12156.1/10061", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10061/1/007_IMG_1811.jpg"],
["20.500.12156.1/10062", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10062/1/007_IMG_1812.jpg"],
["20.500.12156.1/10063", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10063/1/007_IMG_1813.jpg"],
["20.500.12156.1/10064", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10064/1/007_IMG_1855.jpg"],
["20.500.12156.1/10065", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10065/1/007_IMG_1859.jpg"],
["20.500.12156.1/10066", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10066/1/007_IMG_1993.jpg"],
["20.500.12156.1/10067", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10067/1/001CC007007.jpg"],
["20.500.12156.1/10068", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10068/1/007_IMG_2000.jpg"],
["20.500.12156.1/10069", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10069/1/007_IMG_2006.jpg"],
["20.500.12156.1/10070", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10070/1/007_IMG_2007.jpg"],
["20.500.12156.1/10071", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10071/1/007_IMG_2010.jpg"],
["20.500.12156.1/10072", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10072/1/007_IMG_2023.jpg"],
["20.500.12156.1/10073", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10073/1/007_IMG_2493.jpg"],
["20.500.12156.1/10074", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10074/1/007_IMG_2497.jpg"],
["20.500.12156.1/10075", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10075/1/007_IMG_2500.jpg"],
["20.500.12156.1/10076", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10076/1/007_IMG_2502.jpg"],
["20.500.12156.1/10077", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10077/1/007_IMG_2503.jpg"],
["20.500.12156.1/10078", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10078/1/001CC007014.jpg"],
["20.500.12156.1/10079", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10079/1/007_IMG_2509.jpg"],
["20.500.12156.1/10080", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10080/1/007_IMG_2511.jpg"],
["20.500.12156.1/10081", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10081/1/007_IMG_2516.jpg"],
["20.500.12156.1/10082", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10082/1/007_IMG_2519.jpg"],
["20.500.12156.1/10083", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10083/1/007_IMG_2520.jpg"],
["20.500.12156.1/10084", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10084/1/007_IMG_2522.jpg"],
["20.500.12156.1/10085", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10085/1/007_IMG_2525.jpg"],
["20.500.12156.1/10086", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10086/1/007_IMG_2526.jpg"],
["20.500.12156.1/10087", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10087/1/007_IMG_2527.jpg"],
["20.500.12156.1/10088", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10088/1/007_IMG_2531.jpg"],
["20.500.12156.1/10089", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10089/1/001AN02001006.jpg"],
["20.500.12156.1/10090", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10090/1/001CC007015.jpg"],
["20.500.12156.1/10091", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10091/1/007_IMG_2836.jpg"],
["20.500.12156.1/10092", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10092/1/007_IMG_2837.jpg"],
["20.500.12156.1/10093", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10093/1/007_IMG_2838.jpg"],
["20.500.12156.1/10094", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10094/1/007_IMG_2839.jpg"],
["20.500.12156.1/10095", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10095/1/007_IMG_2897.jpg"],
["20.500.12156.1/10096", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10096/1/007_IMG_2904.jpg"],
["20.500.12156.1/10097", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10097/1/007_IMG_2912.jpg"],
["20.500.12156.1/10098", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10098/1/007_IMG_2913.jpg"],
["20.500.12156.1/10099", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10099/1/007_IMG_2914.jpg"],
["20.500.12156.1/10100", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10100/1/007_IMG_2917.jpg"],
["20.500.12156.1/10101", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10101/1/001CC007016.jpg"],
["20.500.12156.1/10102", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10102/1/007_IMG_2934.jpg"],
["20.500.12156.1/10103", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10103/1/007_IMG_2935.jpg"],
["20.500.12156.1/10104", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10104/1/007_IMG_2944.jpg"],
["20.500.12156.1/10105", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10105/1/007_IMG_3108.jpg"],
["20.500.12156.1/10106", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10106/1/007_IMG_3110.jpg"],
["20.500.12156.1/10107", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10107/1/007_IMG_3113.jpg"],
["20.500.12156.1/10108", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10108/1/007_IMG_3114.jpg"],
["20.500.12156.1/10109", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10109/1/007_IMG_3119.jpg"],
["20.500.12156.1/10110", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10110/1/007_IMG_3165.jpg"],
["20.500.12156.1/10111", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10111/1/007_IMG_3259.jpg"],
["20.500.12156.1/10112", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10112/1/001CC007019.jpg"],
["20.500.12156.1/10113", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10113/1/007_IMG_3285.jpg"],
["20.500.12156.1/10114", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10114/1/007_IMG_3299.jpg"],
["20.500.12156.1/10115", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10115/1/007_IMG_3309.jpg"],
["20.500.12156.1/10116", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10116/1/007_IMG_3316.jpg"],
["20.500.12156.1/10117", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10117/1/007_IMG_3330.jpg"],
["20.500.12156.1/10118", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10118/1/007_IMG_3332.jpg"],
["20.500.12156.1/10119", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10119/1/007_IMG_3347.jpg"],
["20.500.12156.1/10120", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10120/1/007_IMG_3350.jpg"],
["20.500.12156.1/10121", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10121/1/007_IMG_3352.jpg"],
["20.500.12156.1/10122", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10122/1/007_IMG_3353.jpg"],
["20.500.12156.1/10123", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10123/1/001CC007020.jpg"],
["20.500.12156.1/10124", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10124/1/007_IMG_3437.jpg"],
["20.500.12156.1/10125", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10125/1/007_IMG_3469.jpg"],
["20.500.12156.1/10126", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10126/1/007_IMG_3527.jpg"],
["20.500.12156.1/10127", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10127/1/007_IMG_3528.jpg"],
["20.500.12156.1/10128", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10128/1/007_IMG_3533.jpg"],
["20.500.12156.1/10129", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10129/1/007_IMG_3534.jpg"],
["20.500.12156.1/10130", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10130/1/007_IMG_3535.jpg"],
["20.500.12156.1/10131", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10131/1/007_IMG_3536.jpg"],
["20.500.12156.1/10132", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10132/1/007_IMG_3539.jpg"],
["20.500.12156.1/10133", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10133/1/007_IMG_3540.jpg"],
["20.500.12156.1/10134", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10134/1/001CC007025.jpg"],
["20.500.12156.1/10135", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10135/1/007_IMG_3547.jpg"],
["20.500.12156.1/10136", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10136/1/007_IMG_3559.jpg"],
["20.500.12156.1/10137", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10137/1/007_IMG_3585.jpg"],
["20.500.12156.1/10138", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10138/1/007_IMG_3588.jpg"],
["20.500.12156.1/10139", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10139/1/007_IMG_3590.jpg"],
["20.500.12156.1/10140", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10140/1/007_IMG_3594.jpg"],
["20.500.12156.1/10141", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10141/1/007_IMG_3596.jpg"],
["20.500.12156.1/10142", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10142/1/007_IMG_3597.jpg"],
["20.500.12156.1/10143", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10143/1/007_IMG_3598.jpg"],
["20.500.12156.1/10144", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10144/1/007_IMG_3601.jpg"],
["20.500.12156.1/10145", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10145/1/001CC008007.jpg"],
["20.500.12156.1/10146", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10146/1/007_IMG_3603.jpg"],
["20.500.12156.1/10147", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10147/1/007_IMG_3607.jpg"],
["20.500.12156.1/10148", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10148/1/007_IMG_3631.jpg"],
["20.500.12156.1/10149", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10149/1/007_IMG_3634.jpg"],
["20.500.12156.1/10150", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10150/1/007_IMG_3636.jpg"],
["20.500.12156.1/10151", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10151/1/007_IMG_3639.jpg"],
["20.500.12156.1/10152", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10152/1/007_IMG_3642.jpg"],
["20.500.12156.1/10153", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10153/1/007_IMG_3739.jpg"],
["20.500.12156.1/10154", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10154/1/007_IMG_3740.jpg"],
["20.500.12156.1/10155", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/10155/1/007_IMG_3742.jpg"],
["20.500.12156.1/14358", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14358/1/Alb%200261%20139.jpg"],
["20.500.12156.1/14359", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14359/1/Alb%200261%20136.jpg"],
["20.500.12156.1/14360", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14360/1/Alb%200261%20141.jpg"],
["20.500.12156.1/14361", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14361/1/Alb%200261%20142.jpg"],
["20.500.12156.1/14362", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14362/1/Alb%200261%20143.jpg"],
["20.500.12156.1/14363", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14363/1/Alb%200261%20144.jpg"],
["20.500.12156.1/14364", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14364/1/Alb%200261%20146.jpg"],
["20.500.12156.1/14368", "https://brasilianafotografica.bn.gov.br/brasiliana/bitstream/20.500.12156.1/14368/1/Alb%200261%20163.jpg"],
];
const PAUSA = 5000; // v1 usava 3000; mais folga depois do rate-limit
const BACKOFF = 30000; // v1 dormia 60s por erro e moia os 71: 71 min
const MAX_SEGUIDOS = 5; // desiste depois disso -- nao martela a origem
const CHAVE = 'bras_faltantes_73';
const sleep = ms => new Promise(r => setTimeout(r, ms));
const jit = () => PAUSA + Math.floor(Math.random() * 1500);
const FEITOS = new Set(JSON.parse(localStorage.getItem(CHAVE) || '[]'));
const marcar = h => { FEITOS.add(h);
localStorage.setItem(CHAVE, JSON.stringify([...FEITOS])); };
const S = {fase: 'ocioso', feito: 0, erros: 0, total: 0, atual: '', parar: false};
const FALHAS = [];
function resumo() {
const c = {};
FALHAS.forEach(f => { c[f.codigo] = (c[f.codigo] || 0) + 1; });
return c;
}
async function baixarUm(handle, url) {
const r = await fetch(url, {credentials: 'same-origin'});
if (!r.ok) { const e = new Error('HTTP ' + r.status); e.codigo = r.status; throw e; }
const b = await r.blob();
if (b.size < 1024) { const e = new Error('blob ' + b.size + 'B'); e.codigo = 'blob-curto'; throw e; }
const orig = decodeURIComponent(url.split('/').pop());
const nome = `BRAS__${handle.replace(/\//g, '_')}__${orig}`.replace(/[\\/:*?"<>|]/g, '_');
const a = document.createElement('a');
a.href = URL.createObjectURL(b); a.download = nome;
document.body.appendChild(a); a.click(); a.remove();
setTimeout(() => URL.revokeObjectURL(a.href), 30000);
return b.size;
}
async function iniciar() {
if (S.fase === 'baixando') { // <-- o defeito nº1 da v1
console.warn('FALTA ja esta rodando (' + S.atual + '). Use FALTA.parar() antes.');
return;
}
S.parar = false; S.fase = 'baixando'; FALHAS.length = 0;
const lista = FALTANTES.filter(([h]) => !FEITOS.has(h));
S.total = lista.length; S.feito = 0; S.erros = 0;
console.log(`FALTA v2: ${lista.length} pendentes, ~${Math.ceil(lista.length * PAUSA / 60000)} min se tudo der certo`);
let seguidos = 0;
for (let i = 0; i < lista.length; i++) {
if (S.parar) { S.fase = 'parado'; console.log('parado em ' + (i + 1)); return; }
const [handle, url] = lista[i];
S.atual = `${i + 1}/${lista.length} ${handle}`;
try {
const bytes = await baixarUm(handle, url);
marcar(handle); S.feito++; seguidos = 0;
console.log(` ok ${handle} ${(bytes / 1048576).toFixed(1)} MB (${i + 1}/${lista.length})`);
} catch (e) {
S.erros++; seguidos++;
FALHAS.push({handle, url, codigo: e.codigo ?? 'rede', erro: e.message});
console.warn(` ERRO ${handle}: ${e.message}`);
if (seguidos >= MAX_SEGUIDOS) { // <-- o defeito nº2 da v1
S.fase = 'abortado';
console.error(`\nFALTA abortou: ${seguidos} erros seguidos. A origem esta recusando -- insistir so piora.`);
console.table(resumo());
console.log('Espere (30+ min) e rode FALTA.retomar(). O que ja baixou esta marcado.');
return;
}
await sleep(BACKOFF);
}
await sleep(jit());
}
S.fase = 'concluido';
console.log(`\nFALTA v2 concluido. ok=${S.feito} erro=${S.erros}`);
if (FALHAS.length) { console.table(resumo()); console.table(FALHAS); }
else console.log('Trilha 1 fechada: 13.059/13.059. O subidor sobe o resto sozinho.');
}
window.FALTA = {
iniciar, status: () => ({...S}), retomar: () => iniciar(),
parar: () => { S.parar = true; },
pendentes: () => FALTANTES.filter(([h]) => !FEITOS.has(h)).map(([h]) => h),
erros: () => [...FALHAS], resumo,
limparMarcas: () => localStorage.removeItem(CHAVE),
};
console.log(`FALTA v2 pronto: ${window.FALTA.pendentes().length} pendentes de ${FALTANTES.length}.`);
console.log('Rode FALTA.iniciar()');
})();