目的
天気概況(週間)や天気概況(明後日まで)の2つは単純な構造だから
C#で天気予報JSONファイルを読んでみるのようにクラスを定義してDeserializeができた
天気予報(明後日まで・週間)はめんどくさそうな構造なのでまずはPythonで試してみた
※C#で綺麗に書けるんだろうか?(いやPythonでもそうなんだけど)
##現時点での構造
lst[0]['timeSeries'][0]['areas']
lst[0]['timeSeries'][1]['areas']
lst[0]['timeSeries'][2]['areas']
lst[1]['timeSeries'][0]['areas']
lst[1]['timeSeries'][1]['areas']
lst[1]['tempAverage']['areas']
lst[1]['precipAverage']['areas']
の様に大きく7個のセクションがある
※それ以下は実際のコード見たほうが分かりやすい気がする
lst[0]['timeSeries'][0|1]['areas']、lst[1]['timeSeries'][0|1|2]['areas']はDeserialize可能なクラスは定義できるのか?(今の自分では不明)
サンプルコード
PS C:\> python -V
Python 3.9.5
以下上記で述べた7個を順次ばらしていく
※めんどくさそうなJsonのファイルはどうやってばらしていくのが良いのだろうか・・・
# Windows Add env PYTHONIOENCODING = UTF-8 & restart vscode
# coding:utf-8
import urllib.request
import json
# 天気予報(明後日まで・週間)
url = 'https://www.jma.go.jp/bosai/forecast/data/forecast/130000.json'
req = urllib.request.Request(url)
with urllib.request.urlopen(req) as res:
lst = json.load(res)
# print(lst[0]['timeSeries'][0])
print(' ')
for item in lst[0]['timeSeries'][0]['areas']:
print(item['area']['name'])
print(item['area']['code'])
print(' ')
index = 0
while index < len(item['weatherCodes']):
print(lst[0]['timeSeries'][0]['timeDefines'][index])
print(item['weatherCodes'][index]+':'+item['weathers'][index]+':'+item['winds'][index]+':'+item['waves'][index] )
print(' ')
index += 1
# print(lst[0]['timeSeries'][1])
print(' ')
for item in lst[0]['timeSeries'][1]['areas']:
print(item['area']['name'])
print(item['area']['code'])
print(lst[0]['timeSeries'][1]['timeDefines'])
print(item['pops'])
print(' ')
index = 0
while index < len(item['pops']):
print(lst[0]['timeSeries'][1]['timeDefines'][index])
print(item['pops'][index])
print(' ')
index += 1
# print(lst[0]['timeSeries'][2])
print(' ')
for item in lst[0]['timeSeries'][2]['areas']:
print(item['area']['name'])
print(item['area']['code'])
print(' ')
index = 0
print(len(item['temps']))
while index < len(item['temps']):
print(lst[0]['timeSeries'][2]['timeDefines'][index])
print(item['temps'][index])
index += 1
print(' ')
# print(lst[1]['timeSeries'][0]['areas'])
print(' ')
for item in lst[1]['timeSeries'][0]['areas']:
print(item['area']['name'])
print(item['area']['code'])
print(' ')
index = 0
print(item['weatherCodes'])
print(item['pops'])
print(item['reliabilities'])
while index < len(item['weatherCodes']):
print(item['weatherCodes'][index])
print(item['pops'][index])
print(item['reliabilities'][index])
index += 1
print(' ')
# print(lst[1]['timeSeries'][1]['areas'])
print(' ')
for item in lst[1]['timeSeries'][1]['areas']:
print(item['area']['name'])
print(item['area']['code'])
print(' ')
index = 0
while index < len(item['tempsMin']):
print(lst[1]['timeSeries'][1]['timeDefines'][index])
print(item['tempsMin'][index])
print(item['tempsMinUpper'][index])
print(item['tempsMinLower'][index])
print(item['tempsMax'][index])
print(item['tempsMaxUpper'][index])
print(item['tempsMaxLower'][index])
index += 1
print(' ')
# print(lst[1]['tempAverage']['areas'])
print(' ')
for item in lst[1]['tempAverage']['areas']:
print(item['area']['name'])
print(item['area']['code'])
print(item['min'])
print(item['max'])
print(' ')
# print(lst[1]['precipAverage']['areas'])
print(' ')
for item in lst[1]['precipAverage']['areas']:
print(item['area']['name'])
print(item['area']['code'])
print(item['min'])
print(item['max'])
print(' ')
参考にしたのは以下のサイト
【Python入門】JSON形式データの扱い方
Python の HTTP クライアントは urllib.request で十分
[Python入門]リストの基本
Pythonで辞書のキーや値を取得する方法を現役エンジニアが解説【初心者向け】