光陰矢の如し。灼熱の猛暑が嘘のように冷え込みはじめた毎日だが、なかなか渓流釣りに足を進められない。熊用の装備だけが増えている。秋はアウトドアばかりではないということで、休止中だったNASAのWebサイトを閲覧すると、かなりの部分が稼働している。

NASAの今日の一枚(APOD)は取得できるのか?

早速、以前に作成したNASAコンテンツ"今日の画像"スクリプトをPowerShellで呼び出してみると、

$url = "https://api.nasa.gov/planetary/apod?api_key=●●●●●●●●●●●●"
$response = Invoke-RestMethod -Uri $url
$imageUrl = $response.url
Write-Host "今日のNASA画像のURLはこちら: $imageUrl"
Read-Host "終了するには、Enterキーを押してね"
  • ソースコードをPowerShell用の.ps1ファイルで保存し、ダブルクリック。表示されるURLをPowerShell上でクリック

    ソースコードをPowerShell用の.ps1ファイルで保存し、ダブルクリック。表示されるURLをPowerShell上でクリック

表示されるのは、とても美しい御覧のような画像。おお、APIで呼び出せるようになっている。休止中だったNASAの活動が徐々に復活しているようだ。

  • 11月17日表示のNASAコンテンツ"今日の画像"

    11月17日表示のNASAコンテンツ"今日の画像"

これは何の写真だろうか?画像(.url)同様にプロパティに.title、日付(.date)や説明文(.explanation)などプロパティを追加するとデータが返る仕様だ。説明分を表示させてみよう。

$url = "https://api.nasa.gov/planetary/apod?api_key=●●●●●●●●●●●●"
$response = Invoke-RestMethod -Uri $url
$imageUrl = $response.url
$explainUrl = $response.explanation
Write-Host "今日のNASA画像のURLはこちら: $imageUrl"
Write-Host "説明分: $explainUrl"
Read-Host "終了するには、Enterキーを押してね"
  • 画像の説明文が英語表示される。

    画像の説明文が英語表示される。

スペインで撮影されたレモン彗星の写真のようだが、やはり英語表示では瞬時に理解するのが難しい。コンソールに表示されるこの説明文を翻訳したい・・・

課金してでも表示したくなった日本語説明文

普通にコピー&ペーストで翻訳でいいじゃないか?という声もあるだろう。しかし、せっかく動いたスクリプト。不思議なもので、黒い背景にテキストだけが表示されるコンソールから呼び出される美しい写真を見ていると、どうしても日本語の説明文を表示させたい衝動に駆られる。

無料のOSS仕様のものから本格的な翻訳APIを提供するクラウドまで様々な方法が考えれるが、ここでは以前使ったことのあるGoogle Cloudの翻訳(Tranlation)APIを使ってみよう。高精度なモデルもあるが、もちろん趣味用途だ。且つ、一瞬の日本語での概要を把握する程度の目的で使うもの。一番コストの抑えられそうなBasic Translationで試みる。APIをアクティブにし、作成したAPIキーを環境変数に設定しこれをサンプルやドキュメント仕様に沿って呼び出す。

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

# 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

Write-Host "今日のNASA画像のURLはこちら: $imageUrl"
Write-Host "今日のNASA画像の説明(翻訳):"
Write-Host $translatedText
Read-Host "終了するには、Enterキーを押してね"

エンドポイントにPCの環境変数から読み込んだAPIキーを設定し、PowerShellの便利なJSON変換コマンドレットConvertTo-Jsonでハッシュテーブルで指定する値をJSON形式に変換、変数bodyで送信し、レスポンスからqに設定した説明文($explanation)の翻訳結果を$translatedTextで取得している。

  • レモン彗星(C/2005 A6)の写真は、長時間合成のものとのこと。最近不安定な太陽風の影響が複雑な青いイオン尾に独特の動きを与えているそうだ

    レモン彗星(C/2005 A6)の写真は、長時間合成のものとのこと。最近不安定な太陽風の影響が複雑な青いイオン尾に独特の動きを与えているそうだ

インターネット上の情報では、そろそろ公開されるのではないかと話題の3I/ATLAS高解像度写真。毎日スクリプトを実行しておけば、ここに日本語解説文とともに現れる日も来るのでは無いか?と期待する。ただし、久しぶりに起動させた翻訳APIなのでコストは常にウォッチしておかなければならないのであった。なんども呼び出しているうちに、すでに数十円を消費したようだが、満足感はあるものだ。