APIを使って天気予報を実装してみた

以前からAPIなるものがずっと気になっていたものの、プログラミング以外にも気になるものがあって、気にかけたままになっていましたが、ようやく手をつけました。

基本的にはどなたかのYouTubeを参考にして楽天のAPIサービスを利用させていただきました。
https://api.rakuten.net

今回はWeatherAPIという無料のAPIに登録して、福井の天気予報をpythonを使って実装してみました。

画像1

使い方はいたって簡単で、上に画面の真ん中下ほどに必須パラメータである都市名を入れて、右上のプルダウンから言語、ライブラリを選択すると、コードが表記されます。基本的にはこのコードをコピペすればjson形式でデータを取得できます。
テストをクリックすれば実際に画面上でその結果も取得できます。
(WeatherAPIに登録しないとテストはできません)

画像2

先程のコードスニペットをコピペして、必要な情報を取得。3日分表示させたので、簡単な関数にしてみました。ちなみにstreamlitというそれほど知識がなくともそれっぽいページを作ってくれる便利なフレームワークを使っているので、見慣れないコードがあるかもしれません。

import streamlit as st
import requests
import urllib.request
import io

url = "https://weatherapi-com.p.rapidapi.com/forecast.json"
querystring = {"q":"fukui","days":"3"}
headers = {
   'x-rapidapi-key': "xxxxxxxxxxxxxx", 
   'x-rapidapi-host': "weatherapi-com.p.rapidapi.com"
   }
response = requests.request("GET", url, headers=headers, params=querystring)
weather = json.loads(response.text)

def forcast(n):
   st.sidebar.write("予想最高気温", weather["forecast"]["forecastday"][n]["day"]["maxtemp_c"], '度')
   st.sidebar.write("予想最低気温", weather["forecast"]["forecastday"][n]["day"]["mintemp_c"], "度")
   st.sidebar.write("日の出", weather["forecast"]["forecastday"][n]["astro"]["sunrise"])
   st.sidebar.write("日の入", weather["forecast"]["forecastday"][n]["astro"]["sunset"])
   st.sidebar.write("天気", weather["forecast"]["forecastday"][n]["day"]["condition"]["text"])


意外と苦労したのがお天気アイコンの表示。指定したアドレスを表示させるだけのことなのですが、いろんなアイコンをデータとして持たせるわけにもいかないので、どうしたものかと思ったのですが、BytesIOを使うとメモリ上に保持させることができるとのことで解決。
あとSSL(Secure Sockets Layer)で暗号化されていると読み取れないことがあるらしく、これをsslというライブラリで解決しています。

import ssl
ssl._create_default_https_context = ssl._create_unverified_context #SSL認証に関するエラー返ってきたときの対処法

def weather_icon(i):
   icon_url = "https:" + weather["forecast"]["forecastday"][i]["day"]["condition"]["icon"]
   img_read = urllib.request.urlopen(icon_url).read() 
   img_bin = io.BytesIO(img_read) 
   st.sidebar.image(img_bin)

以上の関数を適当に実行させるとこうなります。

画像3

ただ残念なことは、この天気予報があまり当たらないこと。予想最高気温はかなり怪しいものです。目的はそこではないのでべつに構わないのですけど。
それはそうとAPIはいろんなものがあってなかなか面白そうなので、ほかにも試してみようと思います。

実際に実装したサイトはこちらになります。
https://share.streamlit.io/pukumon/covid19-fukui/covid.py








この記事が気に入ったらサポートをしてみませんか?