paint-brush
Cree una aplicación de pyton para alertarlo sobre asteroides cerca de la Tierra.por@bogomil
13,337 lecturas
13,337 lecturas

Cree una aplicación de pyton para alertarlo sobre asteroides cerca de la Tierra.

Demasiado Largo; Para Leer

Combine dos API para recibir alertas diarias sobre los asteroides más cercanos que pasan cerca. Manténgase seguro y diviértase al mismo tiempo explorando diferentes API
featured image - Cree una aplicación de pyton para alertarlo sobre asteroides cerca de la Tierra.
Bogomil Shopov - Бого HackerNoon profile picture
0-item
1-item
2-item

Me desperté esta mañana pensando en Armagedón y en lo frágiles que somos como planeta si un asteroide se cruza en nuestro camino. También me intriga explorar el espacio y las tecnologías disponibles en mi escritorio. Le mostraré cómo combinar dos API para recibir alertas por SMS cuando un asteroide pasa cerca (en términos relativos).

API abierta de la NASA

El primer recurso es el portal API abierto de la NASA . Podrías usar toneladas de excelentes interfaces para tus ideas, pero la que me interesa, en este caso, es NeoWs (Near Earth Object Web Service).

desbloquear

Después de leer sobre la API, el primer paso en su viaje es obtener una clave de API. Esto se hace completando sus datos en un formulario y proporcionando un correo electrónico válido.


Una pantalla que muestra el formulario de registro API de la NASA


Tenga en cuenta que la mayoría de las API tienen un límite de API de 1000 solicitudes por hora . Son adecuados para pruebas y beneficio personal, pero no para uso en producción.

Explorar

Dediquemos unos minutos a ver los datos devueltos por la API para construir nuestro caso de uso.


La solicitud (GET)

  • start_date (YYYY-MM-DD) - Fecha de inicio para la búsqueda de asteroides
  • end_date (AAAA-MM-DD) - Fecha de finalización de la búsqueda de asteroides
  • api_key: la clave que recibió por correo electrónico después del paso anterior.


La respuesta

Devuelve un objeto JSON con datos valiosos, con los que debemos trabajar para obtener lo que necesitamos. Mira los datos aquí .

Tenemos una estructura llamada near_earth_objects que contiene los detalles que necesitamos en una estructura compleja:


  • estimado_diámetro: el diámetro del asteroide en metros, kilómetros, millas y pies.
  • relative_velocity - la velocidad relativa del objeto
  • miss_distance - la distancia desde el orbiting_body
  • orbiting_body: en la mayoría de los casos, es la Tierra, pero puede explorar más opciones si lo desea.


Una pantalla que muestra el objeto JSon recibido como respuesta a la solicitud anterior.

Correr

Entonces tenemos todos los objetos que pasan cerca y queremos obtener el más cercano y alertarnos diariamente. Usemos tus habilidades de Python para hacer eso.


 #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']


La función findClosestEncounter te ayuda a encontrar el objeto más cercano a la Tierra del conjunto de todas las cosas que pasan cerca. Tal vez haya una solución más elegante, pero esta funciona bien para mí.


 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))

Hazlo legible por humanos.

Dado que enviaremos un SMS, formatear los datos es una buena idea. Siéntase libre de usar otro formato también.


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


Cree el mensaje que desea enviar por 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."

Resumen de NeoW

¿Que has hecho hasta ahora?

  1. Tienes una clave API para el portal OpenAPI de la NASA
  2. Exploraste la API de NeoWs
  3. Extrajiste el objeto más cercano a la Tierra de todos los objetos que podrían pasar cerca.
  4. Redactaste un mensaje para alertarte sobre este encuentro.

Enviemos ese SMS.

Hay otra API que quiero presentar en este breve pero útil ejemplo: Messagebird.

suelta el pájaro

Visite su sitio web y regístrese para obtener una clave API


Después del registro, puede enviar algunos mensajes SMS gratuitos a su número de teléfono real. Agreguemos esta funcionalidad a su 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' } )

Recibe la Alerta de Armagedón

Puede encontrar el guión completo aquí .


Junte todas las piezas y ejecute su código para ver si lo hizo bien. Ahora puedes dormir mejor, sabiendo que recibirás alertas sobre cada objeto grande que vuele hacia la Tierra. Por supuesto, la NASA necesita detectarlo primero.


Si le gusta el resultado, puede ponerlo en un trabajo cron y activarlo una vez al día.


¡Feliz hackeo!