私は今朝目が覚め、アルマゲドンと、小惑星が近づいてきた場合に私たちが惑星としてどれほど壊れやすいかを考えていました.また、自分のデスクから利用できるスペースやテクノロジーを探索することにも興味をそそられます。 2 つの API を組み合わせて、小惑星が近くを (相対的に言えば) 通過したときに SMS 経由でアラートを受け取る方法を紹介します。
最初のリソースは、 NASA のオープン API ポータルです。アイデアにはたくさんの優れたインターフェイスを使用できますが、この場合、私が興味を持っているのはNeoWs (Near Earth Object Web Service) です。
API について読んだら、旅の最初のステップは API キーを取得することです。これは、詳細をフォームに入力し、有効な電子メールを提供することによって行われます。
ほとんどの API には、 1 時間あたり 1000 リクエストの API 制限があることに注意してください。テストや個人的な利益には適していますが、本番環境での使用には適していません
数分かけて、API によって返されるデータを確認し、ユース ケースを構築してみましょう。
リクエスト (GET)
応答
これは、必要なものを取得するために使用する必要がある貴重なデータを含む JSON オブジェクトを返します。 ここのデータを見てください。
複雑な構造に必要な詳細を含む、 near_earth_objectsという構造があります。
そのため、近くを通過するすべてのオブジェクトがあり、最も近いオブジェクトを取得して毎日警告したいと考えています。 Python のスキルを使ってそれを行いましょう。
#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 関数は、近くを通過するすべてのもののバケツから地球に最も近いオブジェクトを見つけるのに役立ちます。もっとエレガントな解決策があるかもしれませんが、これは私にとってはうまくいきます。
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 を送信するので、データをフォーマットすることをお勧めします。別のフォーマットも自由に使用してください。
#format the data howclose = round(float(how_close)) diameter = round(dia_meter)
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."
これまでに何をしましたか?
この短いが役立つ例で紹介したい API がもう 1 つあります。Messagebird です。
Web サイトにアクセスして登録し、API キーを取得します
登録後、実際の電話番号に配信されるいくつかの無料のSMS メッセージを送信できます。この機能を 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' } )
完全なスクリプトはここにあります。
すべてのピースをまとめてコードを実行し、うまくいったかどうかを確認してください。地球に向かって飛んでいるすべての大きな物体について警告されることを知っているので、よりよく眠ることができます。もちろん、NASA はまずそれを検出する必要があります。
結果が気に入ったら、それを cron ジョブに入れて、1 日 1 回トリガーすることができます。
ハッピーハッキング!