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).
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).
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.
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
Vamos gastar alguns minutos para ver os dados retornados pela API para construir nosso caso de uso.
O pedido (GET)
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:
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))
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."
O que você fez até agora?
Há outra API que quero apresentar neste exemplo curto, mas útil - Messagebird.
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' } )
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!