Há um bom tempo uso o Facebook somente como uma ferramenta para lembrar das datas de aniversário dos meus amigos. Para deixar de depender da plataforma para isso, decidi que iria exportar a lista dos aniversariantes e a adicioná-la ao meu Google Calendar.

Infelizmente no meio de 2019 o Facebook removeu a funcionalidade de exportação dos aniversariantes, tornando essa tarefa um pouco mais chata. Para a minha sorte, no artigo desta notícia o autor citou uma solução criada pelo programador Mohammad Ghasembeigi para exportar esta lista. O processo envolve a execução de um código criado em Python, que infelizmente, não foi tão simples de executar e tinha um bug relacionado ao nosso idioma. Decidi então compartilhar como consegui contornar essas problemas.

Importante: Para executar este programa é necessário que você tenha um pouco de familiaridade com o terminal e o guia abaixo deve ajudar a facilitar o processo. Estou utilizando o Ubuntu Linux 19.04.

Instalando o fb2cal

Um dos requisitos é ter o Python 3.6+, mas por padrão o meu sistema estava utilizando a versão 2, mesmo tendo a 3 instalada. Por conta disso, troquei momentaneamente a versão utilizada no terminal com:

$ alias python=python3

Depois tive que instalar o PIP do Python 3:

$ sudo apt install python3-pip

Assim pude instalar os requisitos do projetos com:

$ pip3 install -r requirements.txt

Depois fiz a configuração da minha conta do Facebook, renomeando o arquivo config/config-template.ini para config/config.ini e adicionando nele o meu usuário e senha da rede social. Não fiz mais nenhuma alteração, pois queria que o script gerasse um arquivo ICS para que depois eu pudesse importar manualmente para o Google Calendar.

Se você quiser, é possível enviar esse arquivo automaticamente para o Google Drive, mas iso exige a ativação da API e algumas configurações adicionais.

Agora que tudo foi configurado, é só rodar o script com:

$ python3 src/fb2cal.py

Infelizmente o script não funcionou de primeira para mim, pois haviam alguns erros relacionados ao modo como estavam sendo tratados os dias da semana, mas consegui corrigi-los e enviei o bugfix para o autor. Talvez no momento em que você esteja lendo este texto, elas já tenham sido implementadas. Caso não, documentei a solução mais abaixo.

Importando o calendário no Google Calendar

Antes de fazer a nova importação, recomendo criar uma nova agenda para separar estes eventos. Para fazer isso, clique no ícone + ao lado de Outras agendas e vá em Criar nova agenda. Criei uma com o nome muito criativo de Aniversários do Facebook. Depois repeti o mesmo processo, mas cliquei em Importar para selecionar o arquivo ICS criado pelo script (gerado em src/birthdays.ics) e em Adicionar à agenda escolhi a que tinha acabado de criar. Pronto!

Para quem quiser fazer uma limpeza na lista de aniversariantes, recomendo primeiro importá-la para depois fazer essa limpa. Como está tudo em uma agenda separada, fica bem fácil de manipular os eventos.

Problemas encontrados

SyntaxError: invalid syntax

Este erro aconteceu pois o Ubuntu estava utilizando versão 2 do Python. Foi só mudar para a versão 3 (que expliquei no começo do post) e o problema foi resolvido.

Erro de timeout

Às vezes precisei executar o script mais de uma vez até funcionar.

Em outro caso, enquanto estava tentando resolver os erros, tive que voltar ao valor padrão de logging (level = INFO) para resolver este problema.

fb2cal ERROR (parse_birthday_day_month) Failed to parse birthday day/month

Para ajeitar este problema alterei o código do arquivo src/fb2cal.py e adicionei o código abaixo logo depois da linha 624 (day_name = BeautifulSoup(birthday_date_str, 'lxml').get_text().lower()):

        # Deal with Brazilian Portuguese inconsistent day names
        if locale == 'pt_BR':
            if day_name != 'domingo' and day_name != 'sábado' and day_name.find('feira') == -1:
                day_name = day_name + '-feira'Code language: PHP (php)

O problema era que alguns dias da semana retornados pelo Facebook não estavam com o sufixo ‘-feira’, exigidos pelo dicionário do idioma que foi carregado. Então criei um código que verifica se é preciso adicionar ou não esse complemento no nome do dia da semana.



Comments

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *