O Bolha Clima é um robozinho escrito em Python para Mastodon que responde com o clima atual para a cidade informada. Uma vez instalado, basta você citar o bot mencionando somente o nome da cidade e receberá como resposta:
Os dados são fornecidos pelo serviço VisualCrossinng.
O link que mostra no mapa a localização da cidade consultada não se refere a sua posição precisa, apenas um ponto vago dentro do município informado. Primeiro que não é coletada sua geolocalização, nem qualquer dado é armazenado na Bolha.one. Mesmo os toots com as respostas são apagados depois de 1 semana.
Experimente o bot em funcionamento aqui: https://bolha.one/@clima
Clone o repositório e instale as dependências:
git clone https://github.com/cadusilva/bolha-clima.git
pip3 install lxml mastodon.py python-dotenv spacy
python3 -m spacy download pt_core_news_md
Crie uma conta em qualquer instância do Mastodon para o bot usar, renomeie .env.example
para .env
e edite o arquivo. Veja o que cada linha significa:
WTH_API
: informe aqui sua chave de API do serviço VisualCrossing.WTH_LANG
: defina aqui o idioma das mensagens retornadas pelo VisualCrossing, como "céu limpo" ou "nublado". Por padrão, vem o idioma português (pt
).MASTODON_TOKEN
: define o token de acesso da conta que será usada pelo robô. Após logar na instância com a conta do bot, você pode gerar um token aqui, preenchendo os campos 1 e 3.MASTODON_BASE_URL
: define o URL da instância onde fica a conta que será usada pelo robozinho incluindo https://
no início, mas sem barra no final. Exemplo: https://bolha.one
.MASTODON_BIO_ONLINE
: define o texto que vai aparecer na bio do bot quando o robozinho estiver em funcionamento.MASTODON_BIO_OFFLINE
: define o texto que vai aparecer na bio do bot quando o robozinho não estiver sendo executado.UTW_NER_MODEL
: define o nome do modelo de NER usado pela biblioteca spacy. Não altere, a menos que saiba o que está fazendo.MAINTENANCE_STATUS
: ativa e define a mensagem do modo de manutenção, a qual o bot irá usar para responder interações com ele. Para ativar o modo de manutenção, remova o jogo-da-velha (#
) no início da linha. Use {}
na mensagem como referência ao usuário interlocutor.API_TIMEOUT
: define o tempo em segundos que o bot deve esperar por uma resposta da API. Caso ele expire, é retornado o erro 429
e o usuário é informado que o bot está sobrecarregado.Lembre-se de editar as linhas a partir da 99 para definir os perfis que serão notificados em caso de erros.
Depois de definir os parâmetros acima no arquivo .env
, execute o bot digitando:
python3 under_the_weather.py
Agora basta falar com ele através de alguma plataforma do fediverso (Mastodon, Firefish, GoToSocial, etc). Exemplo:
@climabot@instancia.xyz como está o clima no Recife?
A resposta será algo assim:
O clima em Recife, PE, Brasil às 23h é:
- Temperatura: 29 °C
- Sensação térmica: 33 °C
- Índice UV: 0 de 11
- Céu agora: parcialmente nublado, 88% encoberto, 0% de chances de chuva
- Umidade do ar: 70%
📅 Para amanhã, a temperatura pode alcançar 28 °C com sensação térmica de até 32 °C e 52% de chances de chover.
📍 Ver cidade no mapa: https://www.openstreetmap.org/?mlat=-8.05603&mlon=-34.8704
ℹ️ Com informações de VisualCrossing
⌚ O horário mencionado é o da cidade pesquisada.
Você pode rodar seu robozinho do clima dentro de um contêiner Docker facilmente. Não precisa editar o arquivo .env
pois você vai editar o arquivo docker-compose.yml
e definir nele os parâmetros das variáveis de ambiente conforme explicado acima. Depois execute:
docker-compose up -d
Você também pode consultar o clima atual de qualquer cidade sem precisar instalar o bot em uma instância. Basta usar o seguinte comando:
python3 openweathermap.py "Nome da Cidade"
Se o nome for simples, como Recife
, não precisa de aspas. Mas se for composto, como Rio de Janeiro
, use as aspas. O script então retornará as informações do jeito que ele postaria no perfil do robô, conforme exemplo acima.
systemd
Para rodar o bot como um serviço do sistema Linux, use o seguinte exemplo:
[Unit]
Description=Bot Bolha Clima
After=network-online.target
[Service]
Type=simple
DynamicUser=yes
Restart=on-failure
RestartSec=1
WorkingDirectory=/opt/clima
ExecStart=/usr/bin/python3 /opt/clima/under_the_weather.py
KillSignal=SIGINT
Environment="PYTHONUNBUFFERED=1"
[Install]
WantedBy=multi-user.target
Lembre-se de alterar o caminho /opt/clima
caso tenha clonado os arquivos em outro lugar e o nome do seu bot na linha Description
. Para iniciar o serviço e fazer ele carregar junto com o sistema, execute:
systemctl daemon-reload
systemctl enable --now clima
Em caso de problemas, execute um dos dois comandos abaixo para ler os logs de funcionamento:
systemctl status clima
journalctl -u clima [--follow]
Neste modo o robô não consulta a API e simplesmente responde o usuário dizendo que está indisponível no momento. Para ativar, descomente a linha MAINTENANCE_STATUS
no arquivo .env
(ou no docker-compose.yml
, caso esteja usando Docker) e personalize a mensagem que será enviada ao usuário.
Onde você colocar {}
será onde irá aparecer o @ da pessoa a quem se está respondendo. Para desativar o modo manutenção, comente a linha que começa com MAINTENANCE_STATUS
e reinicie o bot.
O Bolha Clima é baseado no UnderTheWeather, abandonado desde 2018, mas ressuscitado e atualizado por Fernanda Queiroz. O autor original não planeja dar continuidade ao projeto, mas ele seguirá vivo neste repositório.
O bot está licenciado sob a AGPL. Vide arquivo LICENSE
para conhecer o conteúdo da licença na íntegra.