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.
İ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).
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.
Ç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.
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)
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:
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))
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."
Şimdiye kadar ne yaptın?
Bu kısa ama yararlı örnekte tanıtmak istediğim başka bir API daha var: Mesaj Kuşu.
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' } )
Komut dosyasının tamamını burada bulabilirsiniz.
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!