雷鳴轟く午後、文京区のパーソナルスペースを離れ千代田区のワークエリアに陣取った筆者。ここ最近カスタマイズを重ねてきたAPI(OpenWhether API)による気象情報取得のためのPowershellスクリプトであるが、ワークスペースでもWindows主体である。
しかし、Poweshellは標準で入っているため動作するのではないか?と思った。PowerShellスクリプトであれば、メールにコードを貼り付けて受信し、テキストエディターで●●.ps1としてUTF-8で保存すれば実行できるはず。前回までのコードである。
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更新中... "
}
ワークエリアでの実行してみたところ、
赤いエラーは嫌なものだ。しかし、とても簡単なエラー。"Invalid API key."とある。AIの力を借りるまでもなく、即座に気が付いた。
$apiKey = $env:OPENWEATHER_API_KEY
の部分だ。APIのキーがWindowsの環境変数(設定→システム→システムの詳細設定→環境変数)→システム環境変数に設定して読み込む仕様だが、ワークエリアでは、環境変数は使えない仕様だ。大切なキーの場合はできるだけ、テキスト保存したりしないほうが良かろうが、気象情報を取得するだけなので、ここを
$apiKey = "●●●●●●●●●●"
と直接キーを読み取る形にする。OpenWhetherにログインし、APIを再度表示させ、コピーしてここに入れる。
しかし、ここは文京区ではない。千代田区を表示させるべきである。そう持ち運び可能であるなら、その場所の天気情報である必要があるのだ。それはそうだ。エリアの指定は、以下の部分だ。
# 文京区(おおよその緯度経度)
$lat = 35.717
$lon = 139.753
これをユーザー入力させれば、$uriに入るレスポンスが自動的に変わるのであるから
$lat = Read-Host "緯度を入力してください"
$lon = Read-Host "経度を入力してください"
に変更する。ただし、全体のwhileループの外におかないといけない。そうでないと、毎回経度緯度を求められる。
あとは、"東京都文京区の現在"の部分を"入力された緯度・経度地域の現在の気温"に変えるだけだ。完成したスクリプトは以下のようになる。
.