質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1935閲覧

PythonにてWEB API(Open-Meteo)を用いて天気を表示したいです。JSONから値を取り出すことができません。

sencho

総合スコア4

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/02/24 10:44

実現したいこと

「緯度」、「経度」、「時刻(1時間ごと)」を指定して
その時刻の「天気」、「風速」、「風向」を取得したいです。

初心者でWEB API、JSONの扱いが初めてなので初歩的な部分で躓いているかもしれません。

前提

・引数で緯度と経度と時刻を受け取り、天気と風向と風速を返す関数
・使用するAPIはOpen-Meteo(https://open-meteo.com/)
・JSONデータを取得するところまではできているようなのですが、JSONデータから指定した時刻の天気と風向と風速を取り出すことができません。

該当のソースコード

Python

1import json 2import requests 3 4#仮で適当な値を変数に代入しています。 5lat = 34.55 6lon = 133.5 7date = "2023-02-25T09:00:00+09:00" 8#URL 9url = f"https://api.open-meteo.com/v1/forecast?latitude={lat}&longitude={lon}&hourly=weathercode,windspeed_10m,winddirection_10m&timezone=Asia%2FTokyo&datetime={date}" 10 11#リクエスト 12response = requests.get(url) 13 14#レスポンス 15data = response.json() 16print(data) 17 18# ↓以降の処理がわからない状態です。

以下のJSONデータが取得されています。

JSON

1{'latitude': 34.55, 'longitude': 133.5, 'generationtime_ms': 0.7610321044921875, 'utc_offset_seconds': 32400, 'timezone': 'Asia/Tokyo', 'timezone_abbreviation': 'JST', 'elevation': 75.0, 'hourly_units': {'time': 'iso8601', 'weathercode': 'wmo code', 'windspeed_10m': 'km/h', 'winddirection_10m': '°'}, 'hourly': {'time': ['2023-02-24T00:00', '2023-02-24T01:00', '2023-02-24T02:00', '2023-02-24T03:00', '2023-02-24T04:00', '2023-02-24T05:00', '2023-02-24T06:00', '2023-02-24T07:00', '2023-02-24T08:00', '2023-02-24T09:00', '2023-02-24T10:00', '2023-02-24T11:00', '2023-02-24T12:00', '2023-02-24T13:00', '2023-02-24T14:00', '2023-02-24T15:00', '2023-02-24T16:00', '2023-02-24T17:00', '2023-02-24T18:00', '2023-02-24T19:00', '2023-02-24T20:00', '2023-02-24T21:00', '2023-02-24T22:00', '2023-02-24T23:00', '2023-02-25T00:00', '2023-02-25T01:00', '2023-02-25T02:00', '2023-02-25T03:00', '2023-02-25T04:00', '2023-02-25T05:00', '2023-02-25T06:00', '2023-02-25T07:00', '2023-02-25T08:00', '2023-02-25T09:00', '2023-02-25T10:00', '2023-02-25T11:00', '2023-02-25T12:00', '2023-02-25T13:00', '2023-02-25T14:00', '2023-02-25T15:00', '2023-02-25T16:00', '2023-02-25T17:00', '2023-02-25T18:00', '2023-02-25T19:00', '2023-02-25T20:00', '2023-02-25T21:00', '2023-02-25T22:00', '2023-02-25T23:00', '2023-02-26T00:00', '2023-02-26T01:00', '2023-02-26T02:00', '2023-02-26T03:00', '2023-02-26T04:00', '2023-02-26T05:00', '2023-02-26T06:00', '2023-02-26T07:00', '2023-02-26T08:00', '2023-02-26T09:00', '2023-02-26T10:00', '2023-02-26T11:00', '2023-02-26T12:00', '2023-02-26T13:00', '2023-02-26T14:00', '2023-02-26T15:00', '2023-02-26T16:00', '2023-02-26T17:00', '2023-02-26T18:00', '2023-02-26T19:00', '2023-02-26T20:00', '2023-02-26T21:00', '2023-02-26T22:00', '2023-02-26T23:00', '2023-02-27T00:00', '2023-02-27T01:00', '2023-02-27T02:00', '2023-02-27T03:00', '2023-02-27T04:00', '2023-02-27T05:00', '2023-02-27T06:00', '2023-02-27T07:00', '2023-02-27T08:00', '2023-02-27T09:00', '2023-02-27T10:00', '2023-02-27T11:00', '2023-02-27T12:00', '2023-02-27T13:00', '2023-02-27T14:00', '2023-02-27T15:00', '2023-02-27T16:00', '2023-02-27T17:00', '2023-02-27T18:00', '2023-02-27T19:00', '2023-02-27T20:00', '2023-02-27T21:00', '2023-02-27T22:00', '2023-02-27T23:00', '2023-02-28T00:00', '2023-02-28T01:00', '2023-02-28T02:00', '2023-02-28T03:00', '2023-02-28T04:00', '2023-02-28T05:00', '2023-02-28T06:00', '2023-02-28T07:00', '2023-02-28T08:00', '2023-02-28T09:00', '2023-02-28T10:00', '2023-02-28T11:00', '2023-02-28T12:00', '2023-02-28T13:00', '2023-02-28T14:00', '2023-02-28T15:00', '2023-02-28T16:00', '2023-02-28T17:00', '2023-02-28T18:00', '2023-02-28T19:00', '2023-02-28T20:00', '2023-02-28T21:00', '2023-02-28T22:00', '2023-02-28T23:00', '2023-03-01T00:00', '2023-03-01T01:00', '2023-03-01T02:00', '2023-03-01T03:00', '2023-03-01T04:00', '2023-03-01T05:00', '2023-03-01T06:00', '2023-03-01T07:00', '2023-03-01T08:00', '2023-03-01T09:00', '2023-03-01T10:00', '2023-03-01T11:00', '2023-03-01T12:00', '2023-03-01T13:00', '2023-03-01T14:00', '2023-03-01T15:00', '2023-03-01T16:00', '2023-03-01T17:00', '2023-03-01T18:00', '2023-03-01T19:00', '2023-03-01T20:00', '2023-03-01T21:00', '2023-03-01T22:00', '2023-03-01T23:00', '2023-03-02T00:00', '2023-03-02T01:00', '2023-03-02T02:00', '2023-03-02T03:00', '2023-03-02T04:00', '2023-03-02T05:00', '2023-03-02T06:00', '2023-03-02T07:00', '2023-03-02T08:00', '2023-03-02T09:00', '2023-03-02T10:00', '2023-03-02T11:00', '2023-03-02T12:00', '2023-03-02T13:00', '2023-03-02T14:00', '2023-03-02T15:00', '2023-03-02T16:00', '2023-03-02T17:00', '2023-03-02T18:00', '2023-03-02T19:00', '2023-03-02T20:00', '2023-03-02T21:00', '2023-03-02T22:00', '2023-03-02T23:00'], 'weathercode': [1, 1, 1, 2, 3, 3, 2, 2, 51, 51, 53, 3, 2, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 3, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 3, 3, 3, 3, 3, 3, 61, 61, 61, 63, 63, 63, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 2, 2, 2, 0, 0], 'windspeed_10m': [7.0, 5.9, 3.4, 5.3, 4.6, 4.6, 4.1, 4.3, 3.1, 2.2, 1.9, 1.3, 3.3, 6.5, 7.3, 8.3, 7.9, 6.1, 4.6, 5.8, 7.3, 6.4, 6.6, 8.1, 8.3, 6.8, 7.5, 8.3, 6.8, 6.8, 6.9, 6.5, 8.0, 10.7, 10.9, 10.9, 10.4, 10.2, 10.7, 10.9, 9.8, 9.9, 9.6, 8.3, 4.7, 5.2, 5.0, 5.4, 5.8, 5.4, 5.6, 5.4, 5.6, 4.6, 4.7, 6.2, 2.0, 3.6, 7.9, 7.9, 8.3, 7.6, 1.4, 5.4, 6.6, 5.9, 3.3, 5.2, 5.7, 5.4, 5.7, 6.1, 5.6, 5.1, 4.3, 5.1, 5.2, 5.2, 5.6, 5.1, 5.1, 2.1, 1.8, 1.9, 4.6, 6.0, 7.0, 7.3, 5.3, 4.7, 2.9, 1.9, 0.8, 2.6, 3.3, 3.7, 4.1, 4.4, 4.4, 4.3, 4.3, 4.3, 4.3, 4.3, 4.7, 3.7, 1.8, 4.1, 8.6, 11.6, 14.6, 16.6, 15.5, 13.0, 9.2, 6.6, 4.0, 2.3, 2.3, 2.7, 3.3, 3.8, 3.9, 4.0, 4.0, 4.2, 3.8, 2.9, 1.9, 1.4, 2.3, 4.7, 7.1, 7.5, 7.0, 6.4, 4.7, 3.8, 2.5, 1.3, 0.8, 3.6, 6.3, 9.7, 12.7, 12.8, 12.3, 11.5, 11.3, 12.1, 12.6, 11.7, 10.3, 9.7, 11.7, 14.8, 18.0, 18.8, 18.4, 17.7, 17.0, 16.0, 14.5, 12.4, 9.8, 6.8, 5.9, 5.4], 'winddirection_10m': [21, 11, 58, 62, 72, 39, 38, 42, 21, 9, 158, 236, 193, 180, 189, 185, 177, 177, 108, 30, 9, 344, 351, 347, 342, 335, 343, 355, 357, 357, 6, 6, 10, 14, 9, 8, 2, 350, 348, 354, 8, 19, 13, 2, 9, 16, 360, 356, 353, 340, 315, 307, 310, 315, 293, 291, 315, 354, 3, 360, 360, 355, 270, 200, 193, 191, 174, 12, 18, 42, 35, 28, 15, 356, 336, 315, 295, 295, 310, 315, 315, 329, 281, 202, 198, 197, 192, 189, 152, 148, 150, 158, 243, 304, 319, 331, 345, 351, 351, 355, 355, 355, 355, 355, 356, 349, 307, 225, 213, 216, 220, 222, 222, 224, 225, 229, 243, 288, 321, 337, 347, 343, 338, 333, 333, 340, 343, 353, 22, 90, 162, 184, 195, 197, 201, 207, 180, 163, 135, 146, 243, 276, 283, 285, 285, 281, 275, 272, 279, 293, 307, 315, 324, 338, 349, 357, 2, 3, 2, 2, 5, 9, 14, 17, 17, 18, 14, 8]}}

補足情報(FW/ツールのバージョンなど)

取得したデータから時刻を指定して、「天気」「風向」「風速」を各々変数に入れたいです。
※天気は天気コードのままで大丈夫です。

以上となります。よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2023/02/24 10:49

> JSONデータを取得するところまではできているようなのですが、JSONデータから指定した時刻の天気と風向と風速を取り出すことができません。 何かエラーが発生しているということでしょうか?
sencho

2023/02/24 10:56

コメントありがとうございます。JSONのデータはエラーなく取得できています。上記「以下のJSONデータが取得されています」の部分です。しかし、その一覧から例えば2023/2/25の10:00の天気コードと風速と風向を取得するような処理の方法が分からない状態です。
guest

回答1

0

ベストアンサー

API で指定した hourly=weathercode,windspeed_10m,winddirection_10m が辞書のキーを示しています。

python

1#レスポンス 2data = response.json() 3weather_data = {t: dict(zip(['天気', '風速', '風向'], d)) for t, *d in zip(*data['hourly'].values())} 4 5print(weather_data.get('2023-02-24T20:00', None)) 6 7# {'天気': 0, '風速': 6.6, '風向': 9}

投稿2023/02/24 10:55

編集2023/02/24 11:20
melian

総合スコア19703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sencho

2023/02/24 11:15

回答ありがとうございます。例えば2025/2/25 10:00の「天気」「風向」「風速」が知りたいという場合は、data['hourly']['time']で該当の時刻がリストの何番目かを調べてそのインデックス番号を指定して「天気」「風向」「風速」を各々リストから取得するということでよいのでしょうか?
melian

2023/02/24 11:21

回答を書き直しましたのでご覧ください。
sencho

2023/02/24 11:33

ありがとうございます!うまく処理ができるようになりました。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問