最近のWeb開発やデータ分析では、APIを活用してリアルタイムな情報を取得する機会が増えている。今回は、無料で使える Open-Meteo API を利用して、三重県津市の現在の天気情報を GitHub Codespaces上のJupyter Notebook で取得する方法をご紹介しよう。
APIとは?
API (Application Programming Interface) とは、システム間やアプリケーション間で機能やデータを連携・共有するための定義やプロトコルであり、異なるソフトウェアを接続する「橋渡し」の役割を果たす。
Open-Meteo APIとは?
Open-Meteo APIは、緯度・経度を指定することで、世界中の任意の地点の天気情報を取得できる無料のAPIである。今回は津市(緯度: 34.7303, 経度: 136.5086)の現在の天気を取得する。
GitHubアカウントをすでに持っている方は、以下の手順で簡単にJupyter Notebook環境を構築できる。
1. 新しいリポジトリを作成
- GitHubにログインして、Dashboard画面左上の「Top repositories」の横の「New」をクリックしよう。
- 「Create a new repository」から新しいリポジトリを作成する。(例:weather-tsu)
2. Codespacesを起動
- 作成したリポジトリのページに移動しよう。
- 「<> Code」ボタン → 「Codespaces」タブ → 「+(Create codespace on main)」をクリックしよう。
3. Jupyter拡張機能をインストール
- VS Codeの左側にある拡張機能アイコン(四角が3つ並んだアイコン)をクリックしよう。
- 検索バーに「Jupyter」と入力しよう。
- Jupyter拡張機能を探し、「Install」ボタンをクリックしてインストールしよう。
この拡張機能が、ノートブックの表示・編集・実行を可能にする。
4. Jupyter Notebookファイルを作成し、コードを実行する
- VS CODEが起動したら、左上の「ファイル」メニューから「新しいファイル…」 を選択する。
- ファイル名を weather.ipynb にして保存しよう。
- 自動的にJupyter Notebook形式で開かれる。
以下のコードをセルに貼り付けて実行しよう。
import requests
# 津市の緯度・経度とタイムゾーンを指定
url = "https://api.open-meteo.com/v1/forecast?latitude=34.7303&longitude=136.5086¤t_weather=true&timezone=Asia/Tokyo"
# APIにアクセス
response = requests.get(url)
data = response.json()
# 現在の天気情報を取得
weather = data["current_weather"]
# 結果を表示
print("津市の今日の天気:")
print(f"気温: {weather['temperature']}°C")
print(f"風速: {weather['windspeed']} km/h") # ← 単位が km/h なので修正
print(f"天気コード: {weather['weathercode']}")
実行結果
津市の今日の天気:
気温: 23.2°C
風速: 13.2 km/h
天気コード: 1
このコードを実行すると、津市の現在の気温、風速、天気コードが表示される。
ただし、天気コードは数値で表されているのでわかりずらい。
そこで、簡易版ながら天気コードを天気表示にするコードをご紹介しよう。
import requests
# 津市の緯度・経度とタイムゾーンを指定
url = "https://api.open-meteo.com/v1/forecast?latitude=34.7303&longitude=136.5086¤t_weather=true&timezone=Asia/Tokyo"
# APIにアクセス
response = requests.get(url)
data = response.json()
# 現在の天気情報を取得
weather = data["current_weather"]
# weathercode の対応表(簡易版)
weather_code_map = {
0: "快晴",
1: "晴れ",
2: "一部曇り",
3: "曇り",
45: "霧",
48: "霧(濃い霧)",
51: "霧雨(弱い)",
53: "霧雨(中程度)",
55: "霧雨(強い)",
61: "雨(弱い)",
63: "雨(中程度)",
65: "雨(強い)",
71: "雪(弱い)",
73: "雪(中程度)",
75: "雪(強い)",
80: "にわか雨(弱い)",
81: "にわか雨(中程度)",
82: "にわか雨(激しい)",
95: "雷雨",
96: "雷雨(ひょうを伴う・弱い)",
99: "雷雨(ひょうを伴う・強い)",
}
# コードを日本語に変換(存在しない場合はそのまま数値表示)
weather_jp = weather_code_map.get(weather["weathercode"], f"不明(コード: {weather['weathercode']})")
# 結果を表示
print("津市の今日の天気:")
print(f"気温: {weather['temperature']}°C")
print(f"風速: {weather['windspeed']} km/h")
print(f"天気: {weather_jp}")
実行結果
津市の今日の天気:
気温: 23.2°C
風速: 13.2 km/h
天気: 晴れ
なお、Open-Meteo の windspeed
は km/h である。
一方、気象庁(アメダス)は m/s を使うので、そのまま比べると「数字が大きい」と感じる。
13.2 km/h ÷ 3.6 ≒ 3.7 m/s
(参考)気象庁・アメダス

これでもまだOpen-Meteo の風速が高いようではあるが、今回はあくまでも天気を表示できるサンプルとしてご紹介している。これ以上のデータの検証は控えておくことにしよう。
コメント