Tôi thức dậy sáng nay khi nghĩ về Armageddon và chúng ta là một hành tinh mong manh như thế nào nếu một tiểu hành tinh tấn công chúng ta. Tôi cũng bị hấp dẫn bởi việc khám phá không gian và các công nghệ có sẵn trên bàn làm việc của mình. Tôi sẽ chỉ cho bạn cách kết hợp hai API để được cảnh báo qua SMS khi một tiểu hành tinh đi qua gần đó (nói một cách tương đối).
Tài nguyên đầu tiên là cổng API mở của NASA . Bạn có thể sử dụng rất nhiều giao diện tuyệt vời cho ý tưởng của mình, nhưng giao diện mà tôi quan tâm, trong trường hợp này, là NeoWs (Dịch vụ web đối tượng gần Trái đất).
Sau khi đọc về API, bước đầu tiên trong hành trình của bạn là lấy khóa API. Điều này được thực hiện bằng cách điền thông tin chi tiết của bạn vào biểu mẫu và cung cấp e-mail hợp lệ.
Xin lưu ý rằng hầu hết các API đều có giới hạn API là 1000 yêu cầu mỗi giờ . Chúng phù hợp cho các thử nghiệm và lợi ích cá nhân nhưng không phù hợp để sử dụng trong sản xuất
Hãy dành vài phút để xem dữ liệu do API trả về để xây dựng trường hợp sử dụng của chúng ta.
Yêu cầu (NHẬN)
Phản hồi
Nó trả về một đối tượng JSON có dữ liệu có giá trị mà chúng ta phải làm việc với dữ liệu này để có được thứ chúng ta cần. Nhìn vào dữ liệu ở đây .
Chúng tôi có một cấu trúc được gọi là near_earth_objects chứa các chi tiết chúng tôi cần trong một cấu trúc phức tạp:
Vì vậy, chúng tôi có tất cả các đối tượng đi qua gần đó và muốn lấy đối tượng gần nhất và cảnh báo chúng tôi hàng ngày. Hãy sử dụng các kỹ năng Python của bạn để làm điều đó.
#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']
Hàm findClosestEncounter giúp bạn tìm vật thể gần Trái đất nhất từ nhóm chứa tất cả những thứ đi qua gần đó. Có thể có một giải pháp tao nhã hơn, nhưng giải pháp này phù hợp với tôi.
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))
Vì chúng tôi sẽ gửi SMS nên việc định dạng dữ liệu là một ý tưởng hay. Vui lòng sử dụng định dạng khác.
#format the data howclose = round(float(how_close)) diameter = round(dia_meter)
Xây dựng thông điệp bạn muốn gửi qua 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."
Anh đã làm gì cho đến nay?
Có một API khác mà tôi muốn giới thiệu trong ví dụ ngắn nhưng hữu ích này - Messagebird.
Truy cập trang web của họ và đăng ký để nhận khóa API
Sau khi đăng ký, bạn có thể gửi một số tin nhắn SMS miễn phí đến số điện thoại thực của mình. Hãy thêm chức năng này vào mã Python của bạn.
#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' } )
Bạn có thể tìm thấy kịch bản hoàn chỉnh ở đây .
Đặt tất cả các phần lại với nhau và chạy mã của bạn để xem bạn đã làm tốt chưa. Bây giờ bạn có thể ngủ ngon hơn khi biết rằng bạn sẽ được cảnh báo về mọi vật thể lớn đang bay về phía Trái đất. Tất nhiên, NASA cần phát hiện ra nó trước.
Nếu bạn thích kết quả, bạn có thể đưa nó vào một công việc định kỳ và kích hoạt nó mỗi ngày một lần.
Chúc mừng hack!