Last active
March 21, 2026 19:58
-
-
Save meneguinha/c2c44a8de77b8ae15c845b9e192f3753 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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