0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonで天気予報(明後日まで・週間)JSONファイルを読んでみる

Last updated at Posted at 2021-05-30

目的

天気概況(週間)天気概況(明後日まで)の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で辞書のキーや値を取得する方法を現役エンジニアが解説【初心者向け】

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?