paint-brush
Erstellen Sie eine Python-App, die Sie warnt, wenn sich Asteroiden der Erde nähernvon@bogomil
13,337 Lesungen
13,337 Lesungen

Erstellen Sie eine Python-App, die Sie warnt, wenn sich Asteroiden der Erde nähern

Zu lang; Lesen

Kombinieren Sie zwei APIs, um täglich über die nächsten vorbeiziehenden Asteroiden benachrichtigt zu werden. Bleiben Sie sicher und haben Sie gleichzeitig Spaß, indem Sie verschiedene APIs erkunden
featured image - Erstellen Sie eine Python-App, die Sie warnt, wenn sich Asteroiden der Erde nähern
Bogomil Shopov - Бого HackerNoon profile picture
0-item
1-item
2-item

Ich bin heute Morgen aufgewacht und habe an Armageddon gedacht und daran, wie zerbrechlich wir als Planet sind, wenn ein Asteroid auf uns zukommt. Außerdem fasziniert mich die Erkundung des Weltraums und der von meinem Schreibtisch aus verfügbaren Technologien. Ich zeige Ihnen, wie Sie zwei APIs kombinieren, um per SMS benachrichtigt zu werden, wenn ein Asteroid (relativ gesehen) in der Nähe vorbeizieht.

NASA OpenAPI

Die erste Ressource ist das offene API-Portal der NASA . Sie könnten für Ihre Ideen jede Menge tolle Schnittstellen nutzen, aber diejenige, die mich in diesem Fall interessiert, ist NeoWs (Near Earth Object Web Service).

Freischalten

Nachdem Sie sich über die API informiert haben, besteht der erste Schritt auf Ihrer Reise darin, einen API-Schlüssel zu erhalten. Dazu geben Sie Ihre Daten in ein Formular ein und geben eine gültige E-Mail-Adresse an.


Ein Bildschirm mit dem NASA-API-Registrierungsformular


Bitte beachten Sie, dass die meisten APIs ein API-Limit von 1000 Anfragen pro Stunde haben. Sie sind für Tests und den persönlichen Nutzen geeignet, jedoch nicht für den produktionsreifen Einsatz

Erkunden

Lassen Sie uns ein paar Minuten damit verbringen, die von der API zurückgegebenen Daten zu sehen, um unseren Anwendungsfall zu erstellen.


Die Anfrage (GET)

  • start_date (JJJJ-MM-TT) – Startdatum für die Asteroidensuche
  • end_date (JJJJ-MM-TT) – Enddatum für die Asteroidensuche
  • api_key – der Schlüssel, den Sie nach dem vorherigen Schritt per E-Mail erhalten haben.


Die Antwort

Es gibt ein JSON-Objekt mit wertvollen Daten zurück, mit denen wir arbeiten müssen, um das zu bekommen, was wir brauchen. Schauen Sie sich die Daten hier an.

Wir haben eine Struktur namens near_earth_objects , die die Details enthält, die wir in einer komplexen Struktur benötigen:


  • geschätzter_Durchmesser – der Durchmesser des Asteroiden in Metern, Kilometern, Meilen und Fuß.
  • relative_velocity – die relative Geschwindigkeit des Objekts
  • miss_distance – die Entfernung vom umlaufenden_Körper
  • orbiting_body – in den meisten Fällen handelt es sich um die Erde, aber Sie können bei Bedarf weitere Optionen erkunden.


Ein Bildschirm mit dem JSon-Objekt, das als Antwort auf die obige Anfrage empfangen wurde.

Laufen

Wir haben also alle vorbeiziehenden Objekte in der Nähe und möchten das nächstgelegene Objekt finden und uns täglich benachrichtigen. Nutzen wir dazu Ihre Python-Kenntnisse.


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


Mit der Funktion „findClosestEncounter“ können Sie aus der Liste aller Dinge, die in der Nähe vorbeikommen, das erdnächste Objekt finden. Vielleicht gibt es eine elegantere Lösung, aber diese funktioniert für mich gut.


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

Machen Sie es für Menschen lesbar.

Da wir eine SMS versenden, empfiehlt es sich, die Daten zu formatieren. Gerne können Sie auch eine andere Formatierung verwenden.


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


Erstellen Sie die Nachricht, die Sie per SMS senden möchten.


 #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."

NeoWs Zusammenfassung

Was hast du bis jetzt gemacht?

  1. Sie haben einen API-Schlüssel für das NASA OpenAPI-Portal
  2. Sie haben die NeoWs-API erkundet
  3. Sie haben aus allen Objekten, die in der Nähe vorbeikommen könnten, das erdnächste Objekt extrahiert.
  4. Sie haben eine Nachricht verfasst, um Sie auf diese Begegnung aufmerksam zu machen.

Lassen Sie uns diese SMS senden.

Es gibt eine weitere API, die ich in diesem kurzen, aber hilfreichen Beispiel vorstellen möchte – Messagebird.

Lass den Vogel frei

Besuchen Sie deren Website und registrieren Sie sich, um einen API-Schlüssel zu erhalten


Nach der Registrierung können Sie ein paar kostenlose SMS-Nachrichten an Ihre tatsächliche Telefonnummer senden. Fügen wir diese Funktionalität Ihrem Python-Code hinzu.


 #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' } )

Holen Sie sich den Armageddon-Alarm


Fügen Sie alle Teile zusammen und führen Sie Ihren Code aus, um zu sehen, ob Sie es gut gemacht haben. Jetzt können Sie besser schlafen, da Sie wissen, dass Sie vor jedem großen Objekt gewarnt werden, das auf die Erde zufliegt. Natürlich muss die NASA es zuerst entdecken.


Wenn Ihnen das Ergebnis gefällt, können Sie es in einen Cronjob einfügen und ihn einmal am Tag auslösen.


Viel Spaß beim Hacken!