As estrelas acima de nós sempre foram uma fonte de maravilha e conhecimento. Desde criança, aprendi sobre o programa Apollo que colocou humanos na lua e conseguiu trazer o Apollo 13 de volta à Terra com segurança.
O espaço é lindo, cheio de nebulosas, estrelas, planetas e outros objetos astronômicos, e felizmente para nós, a NASA tem um recurso gratuito que podemos usar para ver imagens diárias tiradas de radiotelescópios, observatórios e satélites. Neste tutorial, aprenderemos como usar o serviço gratuito da NASA para mudar o papel de parede do Windows 10 e 11 para a imagem astronômica mais recente.
Obtendo uma Chave API da NASA
A NASA facilita muito o uso de seus recursos, mas para aproveitar ao máximo, precisamos de uma chave API. API (Application Programming Interface) é um meio para aplicativos usarem os recursos fornecidos por uma empresa (ou, no nosso caso, pela NASA). A interface permite que duas ou mais máquinas conversem entre si e façam solicitações. Neste projeto, usaremos a API da NASA para obter a Imagem Astronômica do Dia (APOD).
1. Em um navegador, acesse a página da API da NASA e inscreva-se para obter uma chave API. É gratuito e permite acesso a milhares de recursos da NASA.
2. Verifique seu e-mail para a chave API, mantenha-a à mão, mas não a compartilhe com ninguém.
Configurando o Ambiente Python
Precisamos instalar duas bibliotecas Python extras (módulos) para fornecer recursos adicionais ao nosso código de projeto. A primeira é Win11Toast, uma ferramenta de notificação pop-up para Windows 10 e 11 que estamos usando para mostrar mensagens de sucesso/falha quando o aplicativo é executado. A segunda biblioteca é pyinstaller, uma ferramenta excepcionalmente útil que empacota projetos Python e suas dependências em um único arquivo executável. Anteriormente, usamos Auto Py to Exe, uma GUI para este aplicativo para criar arquivos executáveis, mas neste tutorial, precisamos apenas de um executável simples.
Antes de começar este tutorial, certifique-se de ter o Python instalado em seu computador com Windows 10/11. Temos um tutorial sobre isso.
1. Abra um Prompt de Comando. Pressione a tecla Windows, digite CMD e pressione Enter.
2. Use pip, a ferramenta de empacotamento do Python, para instalar as duas bibliotecas.
pip install win11toast
pip install pyinstaller
Escrevendo o Código do Projeto
Com a chave API e o ambiente Python configurados, agora podemos começar a escrever o código do projeto. Estamos usando o editor de Python Thonny, mas você pode usar qualquer editor. Notepad++ e o VS Code da Microsoft são ótimas alternativas.
1. Em uma página de projeto em branco, comece importando três bibliotecas. Requests é usado para solicitar dados da API da NASA. Ctypes permite que nosso código faça alterações nos DLLs do Windows. Win11toast, que importa apenas “toast”, é usado para criar notificações pop-up no Windows.
import requests
import ctypes
from win11toast import toast
2. Crie um objeto chamado “url” e armazene nele a URL de solicitação da API junto com sua chave API. Sua chave deve ir após o = na URL.
url = "https://api.nasa.gov/planetary/apod?api_key=YOUR_API_KEY_HERE”
3. Crie um objeto, “r”, e use-o para armazenar os dados retornados ao fazer uma solicitação à API da NASA.
r = requests.get(url)
4. Crie o primeiro teste condicional para verificar se há dados no objeto “r”. Se isso for verdade, uma série de tarefas são realizadas.
if r:
5. Crie um objeto chamado “APOD” e use-o para armazenar os dados JSON do APOD. Essencialmente, isso nos dará a URL da imagem APOD do dia, que é armazenada como um valor no objeto JSON.
APOD = r.json()['url']
6. Crie um objeto chamado “pic” e, usando o objeto APOD, solicite a imagem da API da NASA. Isso baixa o arquivo na memória, ele ainda não é gravado como um arquivo no disco.
pic = requests.get(APOD, allow_redirects=True)
7. Adicione um teste condicional adicional para verificar se a atualização do APOD é uma imagem JPEG e não um vídeo. Se não houver imagem para aquele dia, uma notificação aparece no Windows para informar o usuário. A NASA atualiza o APOD todos os dias, mas alguns dias a atualização é um vídeo do YouTube. Sem esse teste de tratamento de erros, o código falhará quando uma atualização de vídeo for fornecida.
if "jpg" not in APOD:
toast("Nenhuma imagem para hoje, deve ser um vídeo do YouTube 📺")
8. Usando uma condição else, abra um arquivo chamado APOD.jpg no diretório Imagens da sua conta de usuário e, em seguida, grave a imagem armazenada na memória no arquivo. Altere o nome da conta de usuário para corresponder ao seu, o nosso é lespo. Lembre-se de incluir barras duplas (\\) no caminho do arquivo, caso contrário, o Python pensará que queremos usar caracteres de escape.
else:
open("C:\\Users\\lespo\\Pictures\\APOD.jpg", "wb").write(pic.content)
9. Usando ctypes, atualize o DLL para definir o papel de parede para o arquivo APOD.jpg. Lembre-se de usar o caminho completo do arquivo.
ctypes.windll.user32.SystemParametersInfoW(20, 0, "C:\\Users\\lespo\\Pictures\\APOD.jpg", 3)
10. Usando toast, crie uma mensagem pop-up para informar ao usuário que a imagem foi alterada. Podemos usar emojis em nossas notificações, os nossos foram obtidos de Emojipedia.
toast("Aproveite a última imagem da NASA 🚀")
11. Retornando à declaração condicional if..else original (que lida com se o APOD é uma imagem ou vídeo), adicione uma condição else e use-a para imprimir “Erro” no REPL do Python.
else:
print("Erro")
12. Salve o código como apod.py e depois teste se funciona no editor. No Thonny, clicamos em Executar e vimos as notificações aparecerem, junto com a imagem sendo alterada.
Não consigo ver as notificações!
Ao executar o código, o REPL do Python produziu um erro, “win11toast (,)”, que não significava muito. Verificando os Problemas do Win11Toast no Github, descobrimos que esse erro foi produzido quando escolhemos suprimir notificações pop-up. A correção foi fácil.
1. Vá para Configurações e selecione Sistema.
2. Selecione Notificações e ações e ative as notificações. A granularidade das notificações que você recebe pode ser ajustada usando as caixas de seleção.
3. Feche a janela do aplicativo e tente novamente seu código para garantir que as notificações apareçam.
Criando um Arquivo Executável
Com o código do projeto testado e funcionando, nossa atenção se volta para a criação de um arquivo executável. Fazendo isso, podemos soltar o arquivo em qualquer computador com Windows e ele funcionará. Como isso funciona é usando o pyinstaller, que tira um instantâneo do ambiente Python no qual o aplicativo será executado. Ele então cria seu próprio ambiente dentro do arquivo executável. Portanto, todas as bibliotecas que usamos (requests, ctypes, win11toast etc) são empacotadas no arquivo, o que significa que não precisamos instalá-las no sistema alvo. Também significa que podemos soltar o executável no diretório de inicialização, mas falaremos mais sobre isso depois.
1. Abra um Prompt de Comando. Pressione a tecla Windows, digite CMD e pressione Enter.
2. Navegue até o diretório onde o código do projeto está.
3. Execute o pyinstaller com o argumento -F e passe o nome do arquivo do projeto. Usar -F compactará todo o ambiente Python em um único arquivo.
pyinstaller -F apod.py
4. Aguarde o processo terminar e feche o Prompt de Comando.
5. Abra o diretório onde o código do projeto foi salvo e procure e abra o diretório “dist”. Dentro dele está o arquivo executável.
6. Clique duas vezes no arquivo para testar. A notificação aparecerá para informar que a imagem foi alterada / é um vídeo do YouTube. Isso prova que o arquivo funciona.
Mudando Automaticamente o Papel de Parede
Não é muito difícil clicar duas vezes no executável para mudar nosso papel de parede, mas e se o Windows pudesse fazer isso por nós? Vamos mover o arquivo executável para o diretório de inicialização, onde ele será executado toda vez que o Windows iniciar.
1. Pressione Windows e R para abrir o diálogo Executar e digite shell:startup.
2. Copie o arquivo apod.exe da pasta dist para a pasta de Inicialização. Isso configurará o aplicativo para ser executado quando o Windows iniciar.
3. Feche a janela e reinicie o Windows e observe a notificação no painel.

