Spaces:
Build error
Build error
| import gradio as gr | |
| import pandas as pd | |
| from functions import processar_arquivo_xlsx_para_csv, search, process_response | |
| from datetime import datetime | |
| def data_e_hora_atual(): | |
| agora = datetime.now() | |
| return agora.strftime("%Y-%m-%d %H:%M:%S") | |
| def processar_arquivo(uploaded_file, progress=gr.Progress(track_tqdm=True)): | |
| # Detecta tipo de arquivo | |
| if uploaded_file.name.endswith('.csv'): | |
| df = pd.read_csv(uploaded_file.name) | |
| elif uploaded_file.name.endswith('.xlsx'): | |
| path_csv_temporario = "temp_saida.csv" | |
| processar_arquivo_xlsx_para_csv(uploaded_file.name, path_csv_temporario) | |
| df = pd.read_csv(path_csv_temporario) | |
| else: | |
| raise ValueError("❌ Arquivo inválido. Apenas .csv ou .xlsx são aceitos.") | |
| # Inicializa colunas novas | |
| df.loc[:, 'ISBN-13'] = None | |
| df.loc[:, 'ISBN-10'] = None | |
| df.loc[:, 'REFERÊNCIA'] = None | |
| df.loc[:, 'CONFIABILIDADE TOTAL'] = None | |
| total_linhas = len(df) | |
| # Usa progress manualmente | |
| for idx, row in enumerate(df.itertuples(index=False)): | |
| titulo = row._asdict()['TÍTULO'] | |
| autor = row._asdict()['AUTOR'] | |
| editora = row._asdict()['EDITORA'] | |
| # Buscar info | |
| response = search(titulo, autor, editora) | |
| finds = process_response(response) | |
| df.at[idx, 'ISBN-13'] = finds.get('ISBN-13') | |
| df.at[idx, 'ISBN-10'] = finds.get('ISBN-10') | |
| df.at[idx, 'REFERÊNCIA'] = finds.get('REFERÊNCIA') | |
| df.at[idx, 'CONFIABILIDADE TOTAL'] = finds.get('CONFIABILIDADE TOTAL') | |
| # Atualiza progresso manualmente | |
| progress((idx + 1) / total_linhas) | |
| # Salvar CSV final | |
| output_path = f"Results/resultado_final_{id}.csv" | |
| df.to_csv(output_path, index=False, encoding='utf-8-sig') | |
| return df, output_path | |
| id = data_e_hora_atual() | |
| # Interface Gradio | |
| with gr.Blocks() as iface: | |
| gr.Markdown("# 📚 Processador de Livros com ISBN e Confiabilidade") | |
| gr.Markdown("Faça upload de um arquivo CSV ou XLSX de livros. Vamos buscar automaticamente os ISBNs e referências.") | |
| with gr.Row(): | |
| arquivo_input = gr.File(label="Selecione um arquivo CSV ou XLSX") | |
| botao_processar = gr.Button("🔍 Processar arquivo") | |
| with gr.Row(): | |
| preview_df = gr.DataFrame(label="🔎 Preview do resultado") | |
| arquivo_saida = gr.File(label=f"⬇️ Baixar CSV ({id}) Final") | |
| botao_processar.click( | |
| fn=processar_arquivo, | |
| inputs=[arquivo_input], | |
| outputs=[preview_df, arquivo_saida] | |
| ) | |
| if __name__ == "__main__": | |
| iface.launch() | |