paint-brush
地球に近い小惑星について警告する pyton アプリを作成します。@bogomil
13,333 測定値
13,333 測定値

地球に近い小惑星について警告する pyton アプリを作成します。

長すぎる; 読むには

2 つの API を組み合わせて、近くを通過する最も近い小惑星について毎日アラートを受け取ります。さまざまな API を探索して、安全を確保しながら同時に楽しみましょう
featured image - 地球に近い小惑星について警告する pyton アプリを作成します。
Bogomil Shopov - Бого HackerNoon profile picture
0-item
1-item
2-item

私は今朝目が覚め、アルマゲドンと、小惑星が近づいてきた場合に私たちが惑星としてどれほど壊れやすいかを考えていました.また、自分のデスクから利用できるスペースやテクノロジーを探索することにも興味をそそられます。 2 つの API を組み合わせて、小惑星が近くを (相対的に言えば) 通過したときに SMS 経由でアラートを受け取る方法を紹介します。

NASA OpenAPI

最初のリソースは、 NASA のオープン API ポータルです。アイデアにはたくさんの優れたインターフェイスを使用できますが、この場合、私が興味を持っているのはNeoWs (Near Earth Object Web Service) です。

ロック解除

API について読んだら、旅の最初のステップは API キーを取得することです。これは、詳細をフォームに入力し、有効な電子メールを提供することによって行われます。


NASA API登録フォームの画面


ほとんどの API には、 1 時間あたり 1000 リクエストの API 制限があることに注意してください。テストや個人的な利益には適していますが、本番環境での使用には適していません

探検

数分かけて、API によって返されるデータを確認し、ユース ケースを構築してみましょう。


リクエスト (GET)

  • start_date (YYYY-MM-DD) - 小惑星検索の開始日
  • end_date (YYYY-MM-DD) - 小惑星検索の終了日
  • api_key - 前のステップの後に電子メールで受け取ったキー。


応答

これは、必要なものを取得するために使用する必要がある貴重なデータを含む JSON オブジェクトを返します。 ここのデータを見てください。

複雑な構造に必要な詳細を含む、 near_earth_objectsという構造があります。


  • 推定直径 - 小惑星の直径 (メートル、キロメートル、マイル、フィート)。
  • relative_velocity - オブジェクトの相対速度
  • miss_distance - orbiting_bodyからの距離
  • orbiting_body - ほとんどの場合、地球ですが、必要に応じてさらに多くのオプションを探索できます。


上記のリクエストに対するレスポンスとして受け取った JSON オブジェクトを示す画面。

走る

そのため、近くを通過するすべてのオブジェクトがあり、最も近いオブジェクトを取得して毎日警告したいと考えています。 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."

NeoWs 総集編

これまでに何をしましたか?

  1. NASA OpenAPI ポータルの API キーを持っている
  2. NeoWs API を調べました
  3. 近くを通過する可能性のあるすべてのオブジェクトから、地球に最も近いオブジェクトを抽出しました。
  4. あなたは、この遭遇を警告するメッセージを作成しました。

そのSMSを送りましょう。

この短いが役立つ例で紹介したい 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 回トリガーすることができます。


ハッピーハッキング!