paint-brush
Asteroitler Dünya'ya Yaklaştığında Sizi Uyarıcak Bir Python Uygulaması Oluşturunile@bogomil
13,337 okumalar
13,337 okumalar

Asteroitler Dünya'ya Yaklaştığında Sizi Uyarıcak Bir Python Uygulaması Oluşturun

Çok uzun; Okumak

Yakınlardan geçen en yakın asteroitler hakkında günlük olarak uyarı almak için iki API'yi birleştirin. Farklı API'leri keşfederek hem güvende kalın hem de eğlenin
featured image - Asteroitler Dünya'ya Yaklaştığında Sizi Uyarıcak Bir Python Uygulaması Oluşturun
Bogomil Shopov - Бого HackerNoon profile picture
0-item
1-item
2-item

Bu sabah Armageddon'u ve önümüze bir asteroit gelirse gezegen olarak ne kadar kırılgan olacağımızı düşünerek uyandım. Ayrıca alanı ve masamdaki teknolojileri keşfetmek de ilgimi çekiyor. Yakından bir asteroit geçtiğinde (göreceli olarak konuşursak) SMS yoluyla uyarılmak için iki API'yi nasıl birleştireceğinizi göstereceğim.

NASA OpenAPI'si

İlk kaynak NASA'nın açık API portalıdır . Fikirleriniz için tonlarca harika arayüz kullanabilirsiniz, ancak bu durumda beni ilgilendiren NeoW'lardır (Dünyaya Yakın Nesne Web Hizmeti).

Kilidini aç

API hakkında bilgi sahibi olduktan sonra yolculuğunuzun ilk adımı bir API anahtarı edinmektir. Bu, bilgilerinizi bir forma doldurup geçerli bir e-posta sağlayarak yapılır.


NASA API kayıt formunu gösteren bir ekran


Çoğu API'nin saatte 1000 isteklik API sınırına sahip olduğunu lütfen unutmayın. Testler ve kişisel fayda için uygundur ancak üretime hazır kullanıma uygun değildir.

Keşfetmek

Kullanım örneğimizi oluşturmak için API'nin döndürdüğü verileri görmek için birkaç dakikamızı ayıralım.


İstek (GET)

  • start_date (YYYY-AA-GG) - Asteroit aramasının başlangıç tarihi
  • end_date (YYYY-AA-GG) - Asteroit aramasının bitiş tarihi
  • api_key - önceki adımdan sonra e-posta yoluyla aldığınız anahtar.


Yanıt

İhtiyacımız olanı elde etmek için üzerinde çalışmamız gereken, değerli veriler içeren bir JSON nesnesi döndürür. Buradaki verilere bakın.

Karmaşık bir yapı içerisinde ihtiyacımız olan detayları içeren near_earth_objects adında bir yapımız var:


  • tahmini_çap - asteroitin metre, kilometre, mil ve fit cinsinden çapı.
  • göreceli_velocity - nesnenin göreceli hızı
  • miss_distance - yörüngedeki_cisimden uzaklık
  • Orbiting_body - çoğu durumda Dünya'dır, ancak isterseniz daha fazla seçeneği keşfedebilirsiniz.


Yukarıdaki isteğe yanıt olarak alınan JSon nesnesini gösteren bir ekran.

Koşmak

Yani yakınımızdan geçen tüm nesneler var ve en yakın olanı alıp bizi her gün uyarmak istiyoruz. Bunu yapmak için Python becerilerinizi kullanalım.


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


FindClosestEncounter işlevi, yakınlarınızdan geçen her şeyin arasından Dünya'ya en yakın nesneyi bulmanıza yardımcı olur. Belki daha zarif bir çözüm vardır, ancak bu benim için iyi çalışıyor.


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

İnsanların okuyabileceği hale getirin.

SMS göndereceğimiz için verileri biçimlendirmek iyi bir fikirdir. Başka bir biçimlendirme kullanmaktan da çekinmeyin.


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


SMS ile göndermek istediğiniz mesajı oluşturun.


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

NeoW'un özeti

Şimdiye kadar ne yaptın?

  1. NASA OpenAPI portalı için bir API anahtarınız var
  2. NeoWs API'sini keşfettiniz
  3. Yakınınızdan geçebilecek tüm nesnelerden Dünya'ya en yakın nesneyi çıkardınız.
  4. Kendinizi bu karşılaşma konusunda uyarmak için bir mesaj hazırladınız.

O SMS'i gönderelim.

Bu kısa ama yararlı örnekte tanıtmak istediğim başka bir API daha var: Mesaj Kuşu.

Kuşu serbest bırak

Bir API anahtarı almak için web sitelerini ziyaret edin ve kaydolun


Kayıt olduktan sonra gerçek telefon numaranıza birkaç ücretsiz SMS mesajı gönderebilirsiniz. Bu işlevselliği Python kodunuza ekleyelim.


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

Kıyamet Uyarısını Alın


Tüm parçaları bir araya getirin ve iyi iş çıkarıp çıkarmadığınızı görmek için kodunuzu çalıştırın. Artık Dünya'ya doğru uçan her büyük nesne hakkında uyarılacağınızı bilerek daha iyi uyuyabilirsiniz. Elbette önce NASA'nın bunu tespit etmesi gerekiyor.


Sonucu beğenirseniz, onu bir cron işine koyabilir ve günde bir kez tetikleyebilirsiniz.


Mutlu Hackingler!