Boa tarde pessoal!
Sou um amante da tecnologia e da programação, embora não domine nem uma e nem outra.. Sou profissional autônomo e trabalho com agenda. Criei um código que exporta os eventos do dia atual do google agenda num arquivo .ics e converte em uma planilha excel. A partir disso a automação envia mensagem no whatsapp com base nos dados da planilha excel. O problema é que os eventos que tem recorrência no google agenda não são exportados no arquivo .ics, apenas os que são criados pro dia específico. Ou seja, se eu criar um evento hoje que tem recorrência diária, irá exportar apenas hoje mas amanhã quando exportar novamente, não constará no arquivo .ics.
Os colegas podem me ajudar em como resolver isso?
Vou colocar o código aqui, peço desculpas se for a área errada. Agradeço muito.
import requests
from ics import Calendar
from datetime import datetime
import pandas as pd
import pytz
from google.oauth2 import service_account
import googleapiclient.discovery
import os
import json
from google.auth.transport.requests import Request
import openpyxl
from urllib.parse import quote
import webbrowser
from time import sleep
import pyautogui
# Substitua o ID do calendário privado desejado
CALENDAR_ID = '*********@gmail.com'
# Substitua o caminho para o arquivo JSON da chave de serviço
CREDENTIALS_JSON_PATH = 'C:\\Users\\******\\Desktop\\projeto 1\\credencial.json'
# Configuração da autenticação usando credenciais JSON
credentials = service_account.Credentials.from_service_account_file(
CREDENTIALS_JSON_PATH,
scopes'https://www.googleapis.com/auth/calendar.readonly']
)
# Conectar ao serviço do Google Calendar
service = googleapiclient.discovery.build('calendar', 'v3', credentials=credentials)
# Substitua o endereço secreto do calendário privado em formato .ics
CALENDAR_URL = 'https://calendar.google.com/calendar/ical/**********/basic.ics'
# Obter dados do calendário em formato .ics
response = requests.get(CALENDAR_URL)
if response.status_code == 200:
calendar_data = response.text
# Parse dos dados .ics usando a biblioteca ics
calendar = Calendar(calendar_data)
# Exportar eventos para um arquivo .ics
output_file_path = 'todososeventos.ics'
with open(output_file_path, 'w') as file:
file.writelines(calendar)
print(f"Eventos exportados para {output_file_path}")
# Extrair eventos do dia atual para um DataFrame
today = datetime.now().date()
events_data = []
for event in calendar.events:
start_time = event.begin
# Verificar se o evento ocorre no dia atual
if start_time.date() == today:
start_time = start_time.astimezone(pytz.timezone('America/Sao_Paulo'))
event_data = {
'Nome do Evento': event.name,
'Dia': start_time.strftime('%d/%m/%Y'),
'Hora de Início': start_time.strftime('%H:%M'),
'Descrição': event.description,
}
events_data.append(event_data)
# Criar DataFrame
df = pd.DataFrame(events_data)
# Exportar DataFrame para um arquivo Excel (.xlsx)
excel_output_path = 'eventos_do_dia_atual.xlsx'
df.to_excel(excel_output_path, index=False, engine='openpyxl')
print(f"Eventos do dia atual exportados para {excel_output_path}")
else:
print(f"Erro ao obter dados do calendário. Código de status: {response.status_code}")
# Pausa de 20 segundos
sleep(3)
# Ler planilha e enviar mensagens para cada cliente
workbook = openpyxl.load_workbook('eventos_do_dia_atual.xlsx')
pagina_clientes = workbook['Sheet1']
def new_func():
seta = pyautogui.locateCenterOnScreen('seta.png')
return seta
for linha in pagina_clientes.iter_rows(min_row=2):
nome = linha[0].value
telefone = linha[3].value
dia = linha[1].value
hora = linha[2].value
mensagem = f'Olá, {nome}! Tudo bem? Você tem uma consulta agendada hoje, {dia}, às {hora}. Digite CONFIRMAR ou REMARCAR:'
try:
link_mensagem_whatsapp = f'https://web.whatsapp.com/send?phone={telefone}&text={quote(mensagem)}'
webbrowser.open(link_mensagem_whatsapp)
sleep(25)
seta = new_func()
sleep(2)
pyautogui.click(seta[0],seta[1])
sleep(2)
pyautogui.hotkey('ctrl','w')
sleep(5)
except:
print(f'Não foi possível enviar mensagem para {nome}')
with open('erros-agendamento.csv','a',newline='',encoding='utf-8') as arquivo:
arquivo.write(f'{nome},{telefone}{os.linesep}')
pyautogui.hotkey('ctrl','w')
else:
print(f"Erro ao obter dados do calendário. Código de status: {response.status_code}")
# Remover arquivos após o término da execução
try:
os.remove(output_file_path)
os.remove(excel_output_path)
print(f"Arquivos removidos: {output_file_path}, {excel_output_path}")
except FileNotFoundError:
print("Arquivos não encontrados. Nada foi removido.")
except Exception as e:
print(f"Erro ao remover arquivos: {e}")
Grato!