paint-brush
Crie um aplicativo pyton para alertá-lo sobre asteroides próximos à Terra.por@bogomil
13,337 leituras
13,337 leituras

Crie um aplicativo pyton para alertá-lo sobre asteroides próximos à Terra.

Muito longo; Para ler

Combine duas APIs para ser alertado diariamente sobre os asteróides mais próximos que passam nas proximidades. Fique seguro e divirta-se ao mesmo tempo explorando diferentes APIs
featured image - Crie um aplicativo pyton para alertá-lo sobre asteroides próximos à Terra.
Bogomil Shopov - Бого HackerNoon profile picture
0-item
1-item
2-item

Acordei esta manhã pensando no Armagedom e em como somos frágeis como planeta se um asteróide vier em nossa direção. Também estou intrigado em explorar o espaço e as tecnologias disponíveis em minha mesa. Mostrarei como combinar duas APIs para ser alertado via SMS quando um asteróide estiver passando por perto (relativamente falando).

NASA Open API

O primeiro recurso é o portal API aberto da NASA . Você poderia usar toneladas de ótimas interfaces para suas ideias, mas a que me interessa, neste caso, é NeoWs (Near Earth Object Web Service).

desbloquear

Depois de ler sobre a API, a primeira etapa de sua jornada é obter uma chave de API. Isso é feito preenchendo seus dados em um formulário e fornecendo um e-mail válido.


Uma tela mostrando o formulário de registro da API da NASA


Observe que a maioria das APIs tem um limite de API de 1.000 solicitações por hora . Eles são adequados para testes e benefícios pessoais, mas não para uso pronto para produção

Explorar

Vamos gastar alguns minutos para ver os dados retornados pela API para construir nosso caso de uso.


O pedido (GET)

  • start_date (AAAA-MM-DD) - Data de início da busca de asteroides
  • end_date (AAAA-MM-DD) - Data final para busca de asteroides
  • api_key - a chave que você recebeu por e-mail após a etapa anterior.


A resposta

Ele retorna um objeto JSON com dados valiosos, com os quais devemos trabalhar para obter o que precisamos. Veja os dados aqui .

Temos uma estrutura chamada near_earth_objects que contém os detalhes que precisamos em uma estrutura complexa:


  • estimado_diâmetro - o diâmetro do asteroide em metros, quilômetros, milhas e pés.
  • relativo_velocity - a velocidade relativa do objeto
  • miss_distance - a distância longe do orbiting_body
  • orbiting_body - na maioria dos casos, é a Terra, mas você pode explorar mais opções se quiser.


Uma tela mostrando o objeto JSon recebido como resposta à solicitação acima.

Correr

Então, temos todos os objetos passando por perto e queremos chegar ao mais próximo e nos alertar diariamente. Vamos usar suas habilidades em Python para fazer isso.


 #Settings and URL to conect to NASA API #Get your free API key from here: https://api.nasa.gov/ ad_today = date.today().strftime("%Y-%m-%d") url = "https://api.nasa.gov/neo/rest/v1/feed?start_date="+ad_today+"&end_date="+ad_today+"&api_key=[your keu]" #Hadle the responce json response = requests.request("GET", url) response.encoding = 'utf-8' jsn = response.json() if "near_earth_objects" in jsn: base = jsn['near_earth_objects'][ad_today] i = findClosestEncounter(base) #extract the data we need to create the alert name = base[i]['name'] to_appear = base[i]['close_approach_data'][0]['close_approach_date_full'] how_close = base[i]['close_approach_data'][0]['miss_distance']['kilometers'] dia_meter = base[i]['estimated_diameter']['meters']['estimated_diameter_max']


A função findClosestEncounter ajuda você a encontrar o objeto mais próximo da Terra no balde de todas as coisas que passam por perto. Talvez haja uma solução mais elegante, mas esta funciona bem para mim.


 def findClosestEncounter(jd): # a simple function for discovering the nearest object for the day from all registered objects asteroids = [] for i in range(0, len(jd)): asteroids.insert(i,jd[i]['close_approach_data'][0]['miss_distance']['kilometers']) return asteroids.index(min(asteroids))

Torne-o legível por humanos.

Como enviaremos um SMS, formatar os dados é uma boa ideia. Sinta-se à vontade para usar outra formatação também.


 #format the data howclose = round(float(how_close)) diameter = round(dia_meter)


Construa a mensagem que deseja enviar via SMS.


 #build the message alert ="The nearest asteroid for today is "+ name+". It will be "+str(howclose)+" km away with a diameter of "+str(diameter)+" meters."

Recapitulação do NeoWs

O que você fez até agora?

  1. Você tem uma chave de API para o portal NASA OpenAPI
  2. Você explorou a API do NeoWs
  3. Você extraiu o objeto mais próximo da Terra de todos os objetos que poderiam passar por perto.
  4. Você elaborou uma mensagem para se alertar sobre este encontro.

Vamos enviar aquele SMS.

Há outra API que quero apresentar neste exemplo curto, mas útil - Messagebird.

Solte o pássaro

Visite o site e registre-se para obter uma chave de API


Após o registro, você pode enviar algumas mensagens SMS gratuitas para o seu número de telefone real. Vamos adicionar essa funcionalidade ao seu código Python.


 #SMS client #Get your free API key from here: https://developers.messagebird.com/api/#api-endpoint sms = messagebird.Client("your API key here") #Prepare and send the message to a phone number of your choice. # Change the name "Asteroid" to something you want. It will appear as a sender message = sms.message_create( 'Asteroid', '+yourphonenumner', alert, { 'reference' : 'Asteroid' } )

Receba o Alerta do Armagedom

Você pode encontrar o roteiro completo aqui .


Junte todas as peças e execute seu código para ver se você se saiu bem. Agora você pode dormir melhor, sabendo que será alertado sobre cada grande objeto voando em direção à Terra. Claro, a NASA precisa detectá-lo primeiro.


Se você gostar do resultado, pode colocá-lo em um cron job e acioná-lo uma vez por dia.


Hacking feliz!