0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python Tkinterとラズパイで自分専用のダッシュボードアプリを作ってみる #2 天気予報を取得して整形する

Posted at

概要

デジタルダッシュボード作成 第二弾。

の続きです。
今回は天気予報の取得と成型をやってみます。

この記事はそのメモやまとめです。
すでに設定済みの項目がいくつかある。
試行錯誤しながらやったので、手順として不要かもしれない。あくまでメモ用。

実装したい内容とか整理

ここでは
・12時間分の天気予報を表示
・7日分の週間天気予報を表示
のデータを作成できるようにします。

12時間分の天気については以下の要素があればいいなと個人的に思います。

  • 天気マーク
  • 気温
  • 降水確率
  • 風速

7日分の天気についてはいかが必要だと思います。

  • 天気マーク
  • 最高気温/最低気温
  • 降水確率

作ってみる

の記事を主に参考にしつつ、自分で必要な情報へと少し変更を加えます。
以下のようになりました。

12時間

weather_12hours.py
import time
import ujson
import requests
import datetime

weathercode = {
0 : "",
1 : "☀/☁",
2 : "☀/☁",
3 : "☀/☁",
45 : "🌫️",
48 : "🌫️",
51 : "",
53 : "",
55 : "",
56 : "",
57 : "",
61 : "",
63 : "",
65 : "",
66 : "",
67 : "",
71 : "",
73 : "",
75 : "",
77 : "",
80 : "",
81 : "",
82 : "",
85 : "",
86 : "",
95 : "",
96 : "",
99 : "",
}

#緯度と経度(xx県xx市)
lat = 'xx.xxxx'
lon = 'xx.xxxx'

# 現在の時間を取得しTZをTokyoとする
tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
dt = datetime.datetime.now(tokyo_tz)

#daily url
daily_url = "https://api.open-meteo.com/v1/forecast?latitude=" + lat + "&longitude=" + lon + "&hourly=weathercode,temperature_2m,precipitation_probability,wind_speed_10m&timezone=Asia%2FTokyo"

json_data = requests.get(daily_url)
#print(json_data.json())

i = int(dt.hour)
Hour = []
Weather = []
Temp = []
Pops = []
Wind = []
for i in range(i,i+12,1):
    #日付
    hour = [str(json_data.json().get('hourly').get('time')[i])]
    Hour = Hour+ hour
    #天気
    weather = [weathercode[int(json_data.json().get('hourly').get('weathercode')[i])]]
    Weather = Weather + weather
    #気温
    temp = [str(json_data.json().get('hourly').get('temperature_2m')[i])]
    Temp = Temp + temp
    #最大降水確率
    pops = [str(json_data.json().get('hourly').get('precipitation_probability')[i])]
    Pops = Pops + pops
    #風速
    wind = [str(json_data.json().get('hourly').get('wind_speed_10m')[i])]
    Wind = Wind + wind

#出力
j = 0
for j in range(12):
    print("[" + Hour[j] + "]")
    print(" 天気: " + Weather[j])
    print(" 温度(C): " + Temp[j] )
    print(" 降水確率(%): " + Pops[j])
    print(" 風速(m): " + Wind[j])

こちらを実行すると以下のような結果を得られます

at 21:02:36 ⬢ [Docker] ❯ python weather_12hours.py

[2024-01-14T21:00]
 天気: ☀
 温度(C): 5.8
 降水確率(%): 0
 風速(m): 9.0
[2024-01-14T22:00]
 天気: ☀
 温度(C): 4.0
 降水確率(%): 0
 風速(m): 6.0
... ...
[2024-01-15T07:00]
 天気: ☀
 温度(C): 2.5
 降水確率(%): 0
 風速(m): 9.2
[2024-01-15T08:00]
 天気: ☀
 温度(C): 3.3
 降水確率(%): 0
 風速(m): 8.5

週間天気

import time
import ujson
import requests
import datetime

weathercode = {
0 : "",
1 : "☀/☁",
2 : "☀/☁",
3 : "☀/☁",
45 : "🌫️",
48 : "🌫️",
51 : "",
53 : "",
55 : "",
56 : "",
57 : "",
61 : "",
63 : "",
65 : "",
66 : "",
67 : "",
71 : "",
73 : "",
75 : "",
77 : "",
80 : "",
81 : "",
82 : "",
85 : "",
86 : "",
95 : "",
96 : "",
99 : "",
}

#緯度と経度(zzz県zzzz市)
lat = 'zz.zzzz'
lon = 'zz.zzzz'

# 現在の時間を取得しTZをTokyoとする
tokyo_tz = datetime.timezone(datetime.timedelta(hours=9))
dt = datetime.datetime.now(tokyo_tz)

#daily url
daily_url = "https://api.open-meteo.com/v1/forecast?latitude=" + lat + "&longitude=" + lon + "&daily=weather_code,temperature_2m_max,temperature_2m_min,precipitation_probability_max&timezone=Asia%2FTokyo"

json_data = requests.get(daily_url)
#print(json_data.json())

i = 0
Date = []
Weather = []
Temp_max = []
Temp_min = []
Pops_max = []
for i in range(7):
    #日付
    date = [str(json_data.json().get('daily').get('time')[i])]
    Date = Date + date
    #天気
    weather = [weathercode[int(json_data.json().get('daily').get('weather_code')[i])]]
    Weather = Weather + weather
    #最高気温
    temp_max = [str(json_data.json().get('daily').get('temperature_2m_max')[i])]
    Temp_max = Temp_max + temp_max
    #最低気温
    temp_min = [str(json_data.json().get('daily').get('temperature_2m_min')[i])]
    Temp_min = Temp_min + temp_min
    #最大降水確率
    pops_max = [str(json_data.json().get('daily').get('precipitation_probability_max')[i])]
    Pops_max = Pops_max + pops_max

#出力
j = 0
for j in range(7):
    print("[" + Date[j] + "]")
    print(" " + Weather[j])
    print(" 温度(C): " + Temp_max[j] + "/" + Temp_min[j] )
    print(" 最大降水確率(%): " + Pops_max[j])

こちらを実行すると以下のような結果を得られます

at 21:02:50 ⬢ [Docker] ❯ python weather_7days.py  

[2024-01-14]
 ☀
 温度(C): 8.6/-2.8
 最大降水確率(%): 0
[2024-01-15]
 ☀
 温度(C): 8.7/1.1
 最大降水確率(%): 0
[2024-01-16]
 ☀
 温度(C): 5.0/-2.5
 最大降水確率(%): 0
[2024-01-17]
 ☀/☁
 温度(C): 10.1/-2.3
 最大降水確率(%): 0
[2024-01-18]
 ☀/☁
 温度(C): 12.6/-0.6
 最大降水確率(%): 0
[2024-01-19]
 ☔
 温度(C): 9.5/5.7
 最大降水確率(%): 26
[2024-01-20]
 ☔
 温度(C): 8.3/2.7
 最大降水確率(%): 16

とりあえず完成!
ファイルをどうやって連携するかとか、データをどうやって取り出すかはあとから考えます。
修正することになっても基本的な部分はできているのでそこまで時間はかからないと思います。

次やりたいこと

  • カレンダーと時計を作成
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?