それにしても暑い。昨年作った天気・気温PS1を久しぶりに稼働するとこの有り様である。


昨年の暑さは尋常ではなく、迂闊に水分/塩分補給を怠り、冷房装置を切って眠った日の翌日の朝は、フラフラである。労働安全衛生規則の改正により熱中症対策の一部を罰則付きで義務化するなど、対策も進められている昨今である。今年は、比較的穏やかであると事前情報を得て安心していたところだが、ここ最近の状況は話と違うぞと警戒を強めたところである。

前回、プロンプトをPowerShellの機能だけでカスタマイズすることを覚えた筆者。PowerShellプロファイルには(Get-Location).Pathでの現在ディレクトリの位置情報、(ls).Countでの総ファイル数やユーザー情報、日時を取得表示。function SetPrompt関数でのメモ機能を残してマージさせている。

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")
# リアルタイム記号列
$Realtime = "File:$F / $C / U:$U / T:$T / D:$D /"

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

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

○気象情報を追加する

この猛暑警戒シーズンである。ここに気象情報を追加したいところだ。さしあたり過去のOpenWhether APIから取得する.ps1は稼働中なので改めて、構造を見ると

while ($true) {
$apiKey = $env:OPENWEATHER_API_KEY

# 文京区(おおよその緯度経度)
$lat = 35.717
$lon = 139.753

$uri = "https://api.openweathermap.org/data/2.5/weather?lat=$lat&lon=$lon&appid=$apiKey&units=metric&lang=ja"
$res = Invoke-RestMethod -Uri $uri -Method Get

$date = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
$temp = [double]$res.main.temp
$iconCode = $res.weather[0].icon

$iconMap = @{
"01d" = "☀"
"01n" = ""
"02d" = ""
"02n" = ""
"03d" = "☁"
"03n" = "☁"
"04d" = "☁"
"04n" = "☁"
"09d" = ""
"09n" = ""
"10d" = ""
"10n" = ""
"11d" = ""
"11n" = ""
"13d" = "❄"
"13n" = "❄"
"50d" = ""
"50n" = ""
}
$emoji = $iconMap[$iconCode]
$color = switch ($temp) {
{ $_ -ge 38 } { 'Red'; break }
{ $_ -ge 33 } { 'Yellow'; break }
{ $_ -le 32 } { 'Blue'; break }
default { 'White' }
}

$msg = "東京都文京区の現在の気温: {0:N1}°C({1} )" -f $temp, $emoji
Write-Host "$date $msg" -ForegroundColor $color

$log = "$date $msg"
Out-File -FilePath "log.txt" -Append -InputObject $log

for ($i = 300; $i -gt 0; $i--) {
Write-Host "`r次の更新まで: $i 秒 " -NoNewline
Start-Sleep -Seconds 1
}

Write-Host "`r更新中... "
}

log.txtに情報を書き出している。

.
編集部おすすめ