東京の文京区は、時折雨も降るジメジメした天気。気温はそこまで高くないものの亜熱帯のような湿度がある日だが、インターネットを通じて世界の情報を知ることができる。国際的な文字コード規格ユニコードを策定するThe Unicode Consortiumbの最新版となる「Unicode 17.0」の正式リリースを知った。
世界中の文字に一意の番号を割り当てるユニコード。異なるプラットフォームでの互換性を担保し、コンピューターの世界では欠かせない仕様を提供している。いまやコミュニケーションの世界でも欠かせない共通仕様のemoji(絵文字)の数々も発表されている。今後、各プラットフォームの対応により新しく加わるであろう絵文字はこちら(Unicode Emoji Subcommittee 委員長 Jennifer Daniel氏ブログ)で紹介されているが、各ブラウザやソフトウェアも対応してくれば、😃(U+1F603)のようにコピペでも表示できるようになる。最新版の「Unicode 17.0」では1918個だ。
APIからの気象状況をPowerShellと絵文字で表示
灼熱極まる今夏の状況にAPIからPowerShellに気温を取得し、カスタマイズする日々を送る筆者であったが、このニュースを目にし、ふと
気象状況を絵文字で表示できないか?
そう考えた。OpenWeatherでは気象情報に対応するアイコンコードが細かく指定されており、レスポンスで返るJSONには以下のように気象状況と連動するiconやidが入っている。
"weather": [
{
"id": 500,
"main": "Rain",
"description": "小雨",
"icon": "10d"
}
ので、これに対応する$iconCodeを加えて、10dに該当する部分を$res.weather[0].iconで取得し、対応する絵文字を連想配列でカバーできそうな範囲で用意しておく。さきほど紹介したUnicodeのフルリストのsky & weatherのBrowserからテキストへコピペで絵文字は作れる。
$iconMap = @{
"01d" = "☀"
"01n" = "🌙"
"02d" = "🌤"
"02n" = "🌥"
"03d" = "☁"
"03n" = "☁"
"04d" = "☁"
"04n" = "☁"
"09d" = "🌧"
"09n" = "🌧"
"10d" = "🌦"
"10n" = "🌦"
"11d" = "🌩"
"11n" = "🌩"
"13d" = "❄"
"13n" = "❄"
"50d" = "🌫"
"50n" = "🌫"
}
連想配列から$emoji = $iconMap[$iconCode]で絵文字を取得し、表示文字列を格納している$msgに以下のように加える。$emojiを温度の後の( )のなかで表示させる。
$msg = "東京都文京区の現在の気温: {0:N1}°C({1} )" -f $temp, $emoji
コードを実行すると、曇天の気象状況を表す☁マークがPowerShell上で表示されている。
カスタマイズしたコードは以下のようになる。
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更新中... "
}
絵文字を搭載するといっそうカスタマイズ感がでるし、やはり「絵」は瞬時で把握できるので少々手間がかかるが、やりがいがある。NTTドコモの「iモード」に端を発するコンピューター上での絵文字(emoji)文化は、2009年にUnicode 6.0で採用され世界に広がり続けている。

