Je me suis réveillé ce matin en pensant à Armageddon et à la fragilité de notre planète si un astéroïde venait à nous. Je suis également intrigué par l'exploration de l'espace et les technologies disponibles depuis mon bureau. Je vais vous montrer comment combiner deux API pour être alerté par SMS lorsqu'un astéroïde passe à proximité (relativement parlant).
La première ressource est le portail API ouvert de la NASA . Vous pourriez utiliser des tonnes d'interfaces géniales pour vos idées, mais celle qui m'intéresse, dans ce cas, est NeoWs (Near Earth Object Web Service).
Après avoir pris connaissance de l'API, la première étape de votre parcours consiste à obtenir une clé API. Cela se fait en remplissant vos coordonnées dans un formulaire et en fournissant un e-mail valide.
Veuillez noter que la plupart des API ont une limite d'API de 1 000 requêtes par heure . Ils conviennent aux tests et aux avantages personnels, mais pas à une utilisation prête pour la production
Passons quelques minutes à voir les données renvoyées par l'API pour construire notre cas d'utilisation.
La requête (GET)
La réponse
Il renvoie un objet JSON avec des données précieuses, avec lesquelles nous devons travailler pour obtenir ce dont nous avons besoin. Regardez les données ici .
Nous avons une structure appelée near_earth_objects qui contient les détails dont nous avons besoin dans une structure complexe :
Nous avons donc tous les objets qui passent à proximité et nous souhaitons obtenir le plus proche et nous alerter quotidiennement. Utilisons vos compétences Python pour le faire.
#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 fonction findClosestEncounter vous aide à trouver l'objet le plus proche de la Terre à partir du seau de toutes les choses passant à proximité. Il existe peut-être une solution plus élégante, mais celle-ci fonctionne bien pour moi.
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))
Puisque nous allons envoyer un SMS, le formatage des données est une bonne idée. N'hésitez pas à utiliser également un autre formatage.
#format the data howclose = round(float(how_close)) diameter = round(dia_meter)
Construisez le message que vous souhaitez envoyer par 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."
Qu'avez-vous fait jusqu'à présent?
Il y a une autre API que je veux introduire dans cet exemple court mais utile - Messagebird.
Visitez leur site Web et inscrivez-vous pour obtenir une clé API
Après l'inscription, vous pouvez envoyer quelques SMS gratuits livrés à votre numéro de téléphone actuel. Ajoutons cette fonctionnalité à votre code 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' } )
Vous pouvez trouver le script complet ici .
Rassemblez toutes les pièces et exécutez votre code pour voir si vous avez bien fait. Maintenant, vous pouvez mieux dormir, sachant que vous serez alerté de chaque gros objet volant vers la Terre. Bien sûr, la NASA doit d'abord le détecter.
Si vous aimez le résultat, vous pouvez le mettre dans une tâche cron et le déclencher une fois par jour.
Bon piratage !