私は今朝目が覚め、アルマゲドンと、小惑星が近づいてきた場合に私たちが惑星としてどれほど壊れやすいかを考えていました.また、自分のデスクから利用できるスペースやテクノロジーを探索することにも興味をそそられます。 2 つの API を組み合わせて、小惑星が近くを (相対的に言えば) 通過したときに SMS 経由でアラートを受け取る方法を紹介します。 NASA OpenAPI 最初のリソースは、 です。アイデアにはたくさんの優れたインターフェイスを使用できますが、この場合、私が興味を持っているのは NASA のオープン API ポータル NeoWs (Near Earth Object Web Service) です。 ロック解除 API について読んだら、旅の最初のステップは API キーを取得することです。これは、詳細をフォームに入力し、有効な電子メールを提供することによって行われます。 ほとんどの API には、 の API 制限があることに注意してください。テストや個人的な利益には適していますが、本番環境での使用には適していません 1 時間あたり 1000 リクエスト 探検 数分かけて、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 - ほとんどの場合、地球ですが、必要に応じてさらに多くのオプションを探索できます。 走る そのため、近くを通過するすべてのオブジェクトがあり、最も近いオブジェクトを取得して毎日警告したいと考えています。 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 総集編 これまでに何をしましたか? NASA OpenAPI ポータルの API キーを持っている NeoWs API を調べました 近くを通過する可能性のあるすべてのオブジェクトから、地球に最も近いオブジェクトを抽出しました。 あなたは、この遭遇を警告するメッセージを作成しました。 その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 回トリガーすることができます。 ハッピーハッキング!