ISBN-Finder / app.py
GitHub Actions
Deploy automático via GitHub Actions
db7a116
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()