OpenWeather API を使ってGUIにくっつけてみた
前回OpenWeatherのAPIを用いて、叩いた時の天気をjson形式で得られるようになりました。
こちらのAPIです。
次に、これを画面に表示させてみたいと思ったので、ちょっと調べて試してみました。
早速Tkinterを使ってみます。GUIにするときはTkinterを使うようなのですが、
こちらのページを参考にしました。
こちらに簡単にGUIを作る方法が書かれていたので、そちらのコードをお借りしました。
そこから、前回APIで気温や湿度などのデータをjson形式で読み込めたので、そのデータを使って表示させることにしました。
json形式のデータをコードに引用するには、今回の場合
data = response.json()
temp = data["main"]["temp"]
humi = data["main"]["humidity"]
こちらがjsonデータを引用するコードです。
dataで定義して、["main"]["temp"]とすればjson内のtempデータが引用できます。湿度など他の条件も同様です。
また、このAPIの気温はケルビン表記だったので、
ctemp = temp - 273.15
このように気温をctempと再定義して、273.15度分引いておいて℃(セルシウス度)表記に戻しました。
あとは、TkinterのGUI表記にあるものを少しいじればAPIが表記できます。
label1 = ttk.Label(frame1, text='今日の気温は' + str(int(ctemp)) + '°Cです')
実際いじったのはここらへんです。
str(int(ctemp))にすれば温度をテキスト表記できますし、時間によってリアルタイムで変わっていきます。
とりあえず表示できるところまでなので、まだ必要ないコードもありますが結果はこれです。
import requests
import json
from tkinter import *
from tkinter import ttk
city = "Tokyo"
API_KEY = "自分のコード"
url = 'http://api.openweathermap.org/data/2.5/weather?q=Tokyo&APPID=自分のコード'
response = requests.get(url)
data = response.json()
jsontext = json.dumps(data,indent=4)
#print(jsontext)
data = response.json()
temp = data["main"]["temp"]
humi = data["main"]["humidity"]
ctemp = temp - 273.15
root = Tk()
root.title('天気速報')
# ウィジェットの作成
frame1 = ttk.Frame(root, padding=16)
label1 = ttk.Label(frame1, text='今日の気温は' + str(int(ctemp)) + '°Cです')
t = StringVar()
entry1 = ttk.Entry(frame1, textvariable=t)
button1 = ttk.Button(
frame1,
text='OK',
command=lambda: print('Hello, %s.' % t.get()))
# レイアウト
frame1.pack()
label1.pack(side=LEFT)
entry1.pack(side=LEFT)
button1.pack(side=LEFT)
# ウィンドウの表示開始
root.mainloop()
このコードを動かすと、このような画面が現れます。
画面になりました!大きな一歩です。ただあまりにも見た目があれなのでここから直していきます。
空欄とOKのところは現状意味がないので、今日の気分など入れて、夕飯の選択肢を返すようにしようかと思っています。
import randomを入れてたくさん夕飯候補を入れていこうと思います。
これで思ったのですが
確率をいじりたい場合は何かそういう関数があるのかもしれませんが、単純に
今日の夕飯 = ['ラーメン', 'ラーメン', 'ラーメン', 'ラーメン', 'ラーメン', 'ラーメン', 'ラーメン', 'ラーメン', 'ご飯', 'パン']
のようにすればほぼ毎日ラーメンが楽しめますね(?)
これでもう迷わずにすみます(?)
最初は天気予報を見るアプリのつもりで作ろうと思っていました、作っていくうちに朝これを見ればなんとかなるアプリにしようと思っています。
チェック項目を作って「洗濯はしたか」「掃除は」「ご飯」「買い物」など、済ませるものを用意しておいて、チェックしたら「えらい」と表記されるような仕組みにしようかと思います。