import pandas as pd
import re
from datetime import datetime
import os
def extrair_id_gid(link):
"""
Valida o link do Google Sheets e extrai ID e GID.
Retorna (id, gid) ou (None, None) se inválido.
"""
match = re.search(r'https://docs\.google\.com/spreadsheets/d/([^/]+)/.*[?&]gid=(\d+)', link)
if match:
return match.group(1), match.group(2)
print('Link inválido.')
return None, None
def montar_url_exportacao(id_sheet, gid):
"""
Monta a URL para exportar a aba do Google Sheets em CSV.
"""
return f'https://docs.google.com/spreadsheets/d/{id_sheet}/export?format=csv&gid={gid}'
def baixar_planilha(url):
"""
Tenta baixar a planilha CSV a partir da URL.
Retorna o DataFrame ou lança exceção.
"""
return pd.read_csv(url)
def salvar_com_limite(df, pasta, prefixo='dados_google_sheets', limite=3):
"""
Salva o DataFrame como CSV na pasta, com timestamp no nome.
Mantém no máximo 'limite' arquivos na pasta, deletando os mais antigos.
"""
os.makedirs(pasta, exist_ok=True)
agora = datetime.now().strftime('%Y%m%d_%H%M%S')
nome_arquivo = f'{prefixo}_{agora}.csv'
caminho_completo = os.path.join(pasta, nome_arquivo)
df.to_csv(caminho_completo, index=False)
print(f'Arquivo salvo em: {caminho_completo}')
# Listar arquivos existentes do prefixo
arquivos = [f for f in os.listdir(pasta) if f.startswith(prefixo) and f.endswith('.csv')]
# Ordenar pela data de modificação (mais antigos primeiro)
arquivos_completos = [os.path.join(pasta, f) for f in arquivos]
arquivos_completos.sort(key=os.path.getmtime)
# Deletar os arquivos antigos para manter o limite
while len(arquivos_completos) > limite:
arquivo_para_deletar = arquivos_completos.pop(0)
os.remove(arquivo_para_deletar)
print(f'Arquivo antigo removido: {arquivo_para_deletar}')
def main():
link_do_google_sheets = 'https://docs.google.com/spreadsheets/d/1pvBoLyX8kP0TjtUbadVMGdTl4yzm6bHMThhPiqCVtpw/edit?gid=1214654498'
pasta_destino = './dados_google_sheets'
limite_versoes = 3
id_sheet, gid = extrair_id_gid(link_do_google_sheets)
if not id_sheet or not gid:
print('Operação cancelada devido a erro no link.')
return
url = montar_url_exportacao(id_sheet, gid)
try:
df_dados = baixar_planilha(url)
salvar_com_limite(df_dados, pasta_destino, limite=limite_versoes)
except Exception as e:
print('Erro ao carregar ou salvar a planilha:')
print(e)
if __name__ == '__main__':
main()