2026年7月24日のOpenWether APIデータからの表示

2026年7月24日のOpenWether APIデータからの表示

天気や気温は変わりやすいものだ。昨日より幾分かマシになったと体感する。気象庁は週間天気予報を発しており、これらのデータの一部をJSON等の形式で取得できるようにしている(気象データ高度利用ポータルサイト)。前回、PowerShellのプロンプトにOpenWether APIからの取得データを表示させている筆者だが、ここは気象庁の週間予報データを表示させてみようと思った。

気象庁のJSONを見ると、地域コードがありこれをもとに地域の天気情報を取得できる。東京の場合は、以下になる。

https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json
  • 東京のJSON

    東京のJSON

ここから週間気温予測を取得できる、1:以下の情報をPowerShellで取得する。timeSeries:0の下のtimeDefines:に対象となる予報日(0:数日間/1:週間)、areas:(0:東京/1:八条島/2:父島)、その下にtempsMax(最高気温)がある。

  • 折りたたまれたデータを展開していくと目的のtempsMax(最高気温)

    折りたたまれたデータを展開していくと目的のtempsMax(最高気温)

これを、取得するforcast.ps1を作る。Invoke-RestMethodで取得し、Set-Contentでテキストに保存する。最高気温は7つのデータになるが週間予測では、翌日の予測は空白が設定されているので、6つの日付とデータをそれぞれforループで取得する。

$res = Invoke-RestMethod "https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json"

#$linesにforで取得する気温/日付を格納
$lines = for ($i=1; $i -lt 7; $i++) {
    $date = $res[1].timeSeries[1].timeDefines[$i].ToString("MM-dd")
    $temp = $res[1].timeSeries[1].areas[0].tempsMax[$i]
    "$temp°C($date)/ "
}

# 改行なしの 1 行にする
$oneLine = $lines -join " "
#発表日を入れる
$stamp = $res[1].reportDatetime

# ファイルに 1 行だけ書く
Set-Content -Path "C:\Users\●●●\Desktop\temp.txt" "$oneLine (by $stamp)"

これを実行すると、指定の場所にtemp.txtが作成される。中は以下のように週間気温予想が日付と表示されたデータになる。

  • 実行するとtemp.txtが保存される

    実行するとtemp.txtが保存される

プロンプト関数に週間気温予報を反映させる

目的はPowerShellのプロンプト関数に反映させることなので、前回と同様にPowerShellでプロファイルにGet-Contentで保存したtemp.txtから1行読み込む変数$Forcastを加える。

$Forcast = Get-Content "C:\Users\●●●\Desktop\temp.txt" -Tail 1

同様にPS1ファイルを実行させて最新の状態でデータを表示させるために、&でPS1ファイルを実行させる。プロファイルは上から実行されるため、プロンプト関数の実行を阻害しないように前回は、下に置いたが、今回は最初に実行させる。このあたりは、なかなかハードルが高いので研究が必要である。


& "C:\Users\●●●\Desktop\whether.ps1"
& "C:\Users\●●●\Desktop\forcast.ps1"


function SetPrompt {
    param($Text)
        $global:PromptText = $Text
}

function prompt {

    # リアルタイム取得
    $C = (Get-Location).Path
    $U = $env:USERNAME
    $F = (ls).Count
    $T = (Get-Date -Format "HH:mm")
    $D = (Get-Date -Format "yyyy/MM/dd")
    $Temp = Get-Content "C:\Users\●●●\Desktop\log.txt" -Tail 1
    $Forcast = Get-Content "C:\Users\●●●\Desktop\temp.txt" -Tail 1

    # リアルタイム記号列
    $Realtime = "File:$F / $C / U:$U / T:$T / D:$D / 気温:$Temp / 週間予報:$Forcast"

    # SetPrompt で設定した固定パート
    $Fixed = $global:PromptText

    # 合成して返す
    return "$Fixed $Realtime > "
}



これをnotepad $PROFILE で開いたプロファイルに記述、. $PROFILEで反映して実行すると

  • 無事、週間最高気温予測がプロンプトに表示された。

    無事、週間最高気温予測がプロンプトに表示された。

数日は比較的過ごしやすいようだが月末から、また暑さとの戦いである。時間はあるので、塩分/水分補給の事前準備、冷房や扇風機の配置点検、冷え冷えグッズ購入などで備えよう。