O Twitter Space Rover Bot 🚀✨ é um bot automatizado que compartilha imagens astronômicas da NASA no Twitter. O Bot utiliza a API da Nasa 🔭 para obter diariamente a Foto Astronômica do Dia (APOD - Astronomy Picture of the Day) e compartilha no Twitter.
Além publicar a imagem do dia, o bot também realiza uma publicação da explicação da imagem já traduzido em Português.
Este projeto foi desenvolvido para entusiastas da astronomia que desejam explorar diariamente imagens e informações sobre o universo 🪐.
Antes de começar, certifique-se de ter os seguintes acessos:
- Conta no Twitter para construção do Bot
- Chave de acesso a API do Twitter e ao Twitter Developer Portal
- Chave de acesso a API da Nasa
Após obter os acessos é necessário criar o arquivo .env
e configurar as variáveis de ambiente de acordo com o descrito no arquivo .env.example
para a correta execução da aplicação.
A aplicação pode ser executada de duas maneiras, que são explicadas abaixo.
O Docker é uma plataforma projetada para facilitar a criação, implantação e execução de aplicativos, garantindo consistência entre diferentes ambientes, desde o desenvolvimento até a produção. Com o Docker é possível encapsular um aplicativo e suas dependências em um contêiner, que inclui tudo o que é necessário para a execução do aplicativo.
Com o docker apenas é necessário rodar o seguinte comando para executar a aplicação:
docker-compose up
Uma Virtual Environment (Python venv
) permite isolar as dependências do projeto, o que permite que diferentes projetos tenham suas próprias versões específicas de bibliotecas e evitando conflitos entre eles.
A venv utilizada neste projeto foi baseada no Python na versão 3.10.
Caso vocês não possua o Python na versão 3.10 instalado você pode rodar os seguintes comandos para instalar:
sudo add-apt-repository universe
sudo apt-get update
sudo apt install python3.10 python3.10-dev python3.10-venv
Rode o seguinte comando na pasta principal do projeto para criar a venv com o Python 3.10:
virtualenv venv --python=python3.10
Após criar a venv apenas é necessário ativa-lá:
source venv/bin/activate
Em seguida instale as dependências do projeto na venv e a venv estará pronta para uso:
pip install -r requirements.txt
Lembresse que sempre que um novo terminal for aberto para executar o projeto é necessário ativar a venv com o seguinte comando:
source venv/bin/activate
Para salvar uma nova dependências do projeto utilize o sequinte comando e o requirements.txt
será atualizado:
pip freeze > requirements.txt
Algumas bibliotecas instaladas para construção do projeto.
O texto é traduzido utilizando a biblioteca python deep-translator.
As imagens da explicação são geradas utilizando a biblioteca python html2image.
Exemplo de request GET para consulta do APOD (Astronomy Picture of the Day) do dia de hoje:
Exemplo de request GET para consulta do APOD (Astronomy Picture of the Day) dos dias de 01 de Janeiro de 2024 até 12 de Janeiro de 2024:
https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&start_date=2024-01-01&end_date=2024-01-12
A aplicação está rodando em produção com uma máquina t2.micro da EC2 (Amazon Elastic Compute Cloud) AWS (Amazon Web Services), utilizando como base os arquivos docker-compose.prod.yml
e Dockerfile.prod
.
O principal motivo para escolha do serviço EC2 foi para aprender a utilizar uma poderosa ferramenta disponibilizada pela AWS.
No Dockerfile foi configurado uma Cron job para execução do script create_apod_tweet.py
, no qual será executada todo dia às 9 horas da manhã e, com isso, será criado dois posts no Twitter, um post da imagem do dia e outro post com a explicação da imagem.
Cron é um serviço de agendamento de tarefas em sistemas operacionais baseados em Unix.
Cron job é uma tarefa definida para ser executada em um intervalo ou período específico.
Cron tab é o arquivo que contém a lista de tarefas a serem executadas.
Este projeto está sob a licença MIT, que pode ser encontrada no arquivo LICENSE.
Contribuições são bem-vindas! Se você quiser contribuir para este projeto, por favor, abra uma issue ou envie uma solicitação de pull request.