NASAの公式APIであるNASA OPEN APIから毎日写真を取得するPowerShellを作成してみた筆者。ちょっとした隙間時間にクリックすると、狭い部屋/ワークスペースの片隅から宇宙へと脳内を広げてくれるため、ストレス解消ツールにも最適だ。

クリックしていると、話題になってきた感のある3I/ATLASの写真と解説がとうとう表示された。まるでガチャでの当たりのような感じだ。12月1日に表示されたのは、テキサスから撮影された3I/ATLASを映した1枚。

  • 12月1日のNASA Open APIのAstronomy Picture of the Day(https://apod.nasa.gov/apod/ap251201.html)

    12月1日のNASA Open APIのAstronomy Picture of the Day(https://apod.nasa.gov/apod/ap251201.html)

ネット上ではエイリアン説も根強い3I/ATLAS。説明文には、"Comet 3I/ATLAS is not 'aliens'. Here's the science to prove it"(彗星3I/ATLASは「宇宙人」ではありません。それを証明する科学がここにあります)との記事へのリンクを挟んで、これを諭している。いずれにせよ、太陽系には無い特徴のあるこの3I/ATLASは、12月中に地球に最接近する。

美しい宇宙画像を保存したい

前々回、NASAの今日の天体写真(APOD)をPowerShellで着実に取得できるよう改修してみたが、せっかくの宇宙画像。幼少期は切手を集めて何冊もストックしてたが、最近は"データ"の価値もなんとなく少しずつ学習し始めているところだ。情熱を傾けて物品や情報を広範囲にストックする"蒐集家"を目指して、これをストックしてみたいと思った。

WebページのファイルをダウンロードするにはInvoke-WebRequestコマンドレット。以前、作成したスクリプトには、今日のNASA画像のURL=$imageUrlがすでに設定されているので、これをそのまま使って、nasa.jpgに保存する。以下をそのまま追記するだけだ。

if ($imageUrl) {
    Write-Host "画像をダウンロード中..."
    Invoke-WebRequest -Uri $imageUrl -OutFile "nasa.jpg"
    Write-Host "画像をnasa.jpgとして保存しました。"
}

全体を示すと以下のようになる。

$url = "https://api.nasa.gov/planetary/apod?api_key=●●●●●●●●●●●●●●"
$response = Invoke-RestMethod -Uri $url
$imageUrl = $response.url
$explanation = $response.explanation

#NASAの今日の一枚(APOD)URL作成
$today = Get-Date -Format "yyMMdd"
$pageUrl = "https://apod.nasa.gov/apod/ap$today.html"

# Google翻訳APIキー(環境変数から取得)
$googleApiKey = "●●●●●●●●●●●●●●●●●●●"
$googleUri = "https://translation.googleapis.com/language/translate/v2?key=$googleApiKey"
# 翻訳リクエストのボディ(Basicモデル)
$body = @{
    q = $explanation
    source = "en"
    target = "ja"
    format = "text"
    model = "base"
} | ConvertTo-Json

# 翻訳API呼び出し
$translationResponse = Invoke-RestMethod -Uri $googleUri -Method Post -Body $body -ContentType "application/json"
$translatedText = $translationResponse.data.translations[0].translatedText

if ($imageUrl) {
    Write-Host "画像をダウンロード中..."
    Invoke-WebRequest -Uri $imageUrl -OutFile "nasa.jpg"
    Write-Host "画像をnasa.jpgとして保存しました。"
}

# 結果表示
Write-Host "NASAの今日の一枚(APOD)ページはこちら: $pageUrl"
Write-Host "今日のNASA画像のURLはこちら: $imageUrl"
Write-Host "今日のNASA画像の説明(翻訳):"
Write-Host $translatedText
Read-Host "終了するには、Enterキーを押してね"

これを実行すると、PS1ファイルを実行したフォルダにnasa.jpgが保存される。

  • 保存されたnasa.jpg

    保存されたnasa.jpg

しかし、これだと新しい日のデータが上書きされていくので、ストックではない。ファイル名を日時.jpgにしてやればストックできる。これも好都合なことに$today = Get-Date -Format "yyMMdd"で使っているので、さきほどのInvoke-WebRequestのあとの"nasa.jpg"を"$today.jpg"に変えてやるだけだ。実行すると、

  • 無事作成された、西暦日時.jpg

    無事作成された、西暦日時.jpg

これで、実行時に画像がある場合にはストックされていくということになる。不思議なもので集め出すと忘れかけていた所有の嬉しさが戻ってくる。親戚や海外の父親の知り合いから送られてくるはがきに貼ってある珍しい切手をはがしては、シートブックにストックする。市販の切手大百科を買ってもらって、夜な夜な悦に浸っていた幼少期である。様々なツールを使えば切手収集が宇宙に広げられるのかもしれない。