前回、作成した翻訳API活用のNASAの本日の1枚PowerShellスクリプト。日本時間11月18日のデータでは翻訳された説明文は出るのだが、画像が表示されない現象が起こる。まだ、完全復活していないのか?

とGitHubのリポジトリのドキュメントを調べると、$response.urlで取得するコンテンツのmedia_typeがotherという特殊なタイプになると取得できない。どうやら休止中も画像は更新されており、これが原因で日によって取得できていない日があったようだ。その連綿とした日々の写真はアーカイブから閲覧できる。

日によって表示できないと困るので、今日の一枚のWebページそのまま表示させようと考えた。NASAの今日の天体写真(APOD)のURLは、

https://apod.nasa.gov/apod/ap251118.html

とap+25年11月18日.htmlの形でURLを形成している。プログラミングでよく見る"yyMMdd"の形。PowerShellでは、Get-Date -Format "yyMMdd"で取得できる。これを変数に入れて繋くとそのままURLを作成できる。これは簡単だ。

$today = Get-Date -Format "yyMMdd"
$pageUrl = "https://apod.nasa.gov/apod/ap$today.html"

これを追加して最後に以下の1行を追加してやるだけだ。

Write-Host "NASAの今日の一枚(APOD)ページはこちら: $pageUrl"

修正したスクリプトは以下のようになる。

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

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

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

$translationResponse = Invoke-RestMethod -Uri $googleUri -Method Post -Body $body -ContentType "application/json"
$translatedText = $translationResponse.data.translations[0].translatedText

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

コンソール上に表示される"NASAの今日の天体写真(APOD)ページはこちら"のURLをCtrl+クリックするとブラウザにAstronomy Picture of the Day(APOD)ページが表示される。

  • 実行画面。日本語にGoogle翻訳APIで解説文が表示され、直接その日のURLが作成される。リンクをクリックすると

    実行画面。日本語にGoogle翻訳APIで解説文が表示され、直接その日のURLが作成される。リンクをクリックすると

  • ブラウザでAstronomy Picture of the Dayが表示される

    ブラウザでAstronomy Picture of the Dayが表示される

近々公開されるとも言われるNASAの3I/ATLASの高解像度写真がこのスクリプトで補足できるとは限らないが、この小さなスクリプトとNASA APIの間にも、広大な宇宙と好奇心をもとにそれを捕捉しようとする小さな関係があると感じたのであった。。