Skip to content

Instantly share code, notes, and snippets.

@meneguinha
Last active March 21, 2026 19:58
Show Gist options
  • Select an option

  • Save meneguinha/c2c44a8de77b8ae15c845b9e192f3753 to your computer and use it in GitHub Desktop.

Select an option

Save meneguinha/c2c44a8de77b8ae15c845b9e192f3753 to your computer and use it in GitHub Desktop.
import google.generativeai as genai
import pandas as pd
import os
import time
import json
# 1. Configuração do Modelo 2.5 Flash
genai.configure(api_key="")
model = genai.GenerativeModel('gemini-2.5-flash')
arquivo_progresso = "extração_financeira_2.5.csv"
pasta_pdfs = "/content/drive/MyDrive/conteudo.cbf.com.br/2018"
def extrair_dados(caminho_pdf):
# Upload nativo para processamento de documento
file_upload = genai.upload_file(path=caminho_pdf)
prompt = """
Extraia deste Boletim Financeiro: Mandante, Visitante, Público Pagante (int),
Renda Bruta (float), Data, Hora e Ano.
Retorne estritamente em JSON:
{"Mandante": "", "Visitante": "", "Pagante": 0, "Renda": 0.0, "Data": "", "Hora": "", "Ano": 0}
"""
response = model.generate_content([prompt, file_upload])
# Limpa markdown caso a IA retorne
json_text = response.text.replace("```json", "").replace("```", "").strip()
return json.loads(json_text)
# 2. Carregar Progresso
if os.path.exists(arquivo_progresso):
df_history = pd.read_csv(arquivo_progresso)
processados = df_history['Arquivo'].tolist()
dados_acumulados = df_history.to_dict('records')
else:
processados, dados_acumulados = [], []
# 3. Execução com Pausas Estratégicas
arquivos = [f for f in os.listdir(pasta_pdfs) if f.endswith(".pdf")]
contador_sessao = 0
for nome in arquivos:
if nome in processados:
continue
#if contador_sessao >= 250: # Limite diário da Free Tier
#print("!!! Limite de 250 arquivos/dia atingido. Script pausado até amanhã.")
#break
print(f"Processando [{len(processados)+1}/{len(arquivos)}]: {nome}")
try:
resultado = extrair_dados(os.path.join(pasta_pdfs, nome))
resultado['Arquivo'] = nome
dados_acumulados.append(resultado)
processados.append(nome)
contador_sessao += 1
# Salva a cada 5 arquivos para segurança extra
if len(processados) % 5 == 0:
pd.DataFrame(dados_acumulados).to_csv(arquivo_progresso, index=False)
# PAUSA: 7 segundos para respeitar o limite de 10 RPM (Requisições por Minuto)
#time.sleep(7)
except Exception as e:
if "429" in str(e):
print("Cota atingida! Pausando por 60 segundos...")
time.sleep(60)
else:
print(f"Erro em {nome}: {e}")
time.sleep(5)
# Exportação Final
pd.DataFrame(dados_acumulados).to_excel("relatorio_final_2026.xlsx", index=False)
print("Fim da sessão de hoje.")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment