いつまで続くか不安であった灼熱の夏。9月初旬の週末は台風の影響もあって日中も24.1℃。
数値に対する感覚とは曖昧なものだ。欲していた青色表示がこれほどまでに寒く感じるとは。昼夜問わず30℃以上にならされてきた自分の体がうまく対応していない。3月というとみんな暖かいイメージを持つが実際は年間で考えると寒い方に区分されるという話をラジオで聞いたことがある。イメージと異なりぜんぜん寒いという話だ。過去のイメージや曖昧なイメージが現実と乖離してくると、思わぬ痛手を負う。思い込みと実際のデータが乖離しているというエピソードだ。
時間の感覚も実に曖昧だ。
○API情報の更新にカウントダウン機能を追加する
いつ気温が更新されるのか?と曖昧な時間を過ごすうちにカウントダウンタイマーを追加したい。ふとそう思った。デスクトップの一角に表示させている気温情報。次の表示がいつかを知らせるにはこれがいい。ループを使うのはわかるが、画面が下に広がってしまう・・・・
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 -ErrorAction Stop
$date = Get-Date
$temp = [double]$res.main.temp
$color = if ($temp -ge 38) { 'Red' }
elseif ($temp -ge 33) { 'Yellow' }
elseif ($temp -le 32) { 'Blue' }
else { 'White' }
$msg = ('東京都文京区の現在の気温: {0:N1}°C' -f $temp)
Write-Host $date $msg -ForegroundColor $color
$log = "$msg $date"
Out-File -FilePath "log.txt" -Append -InputObject $log
for ($i = 300; $i -gt 0; $i--) {
Write-Host "次の更新まで: $i 秒"
Start-Sleep -Seconds 1
}
}
これでは逆に気が散ってしまうので駄目である。何か他の方法は無いのか?Copilotに聞いてみたところその答えがWrite-Host "`r" -NoNewlineだ。
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
$color = switch ($temp) {
{ $_ -ge 38 } { 'Red'; break }
{ $_ -ge 33 } { 'Yellow'; break }
{ $_ -le 32 } { 'Blue'; break }
default { 'White' }
}
$msg = "東京都文京区の現在の気温: {0:N1}°C" -f $temp
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更新中... "
}
.