solution_063a.py

#!/usr/bin/python3
# ===================================================================
# access NWS weather forecast data
# ===================================================================
# thanks to: https://benborgers.com/posts/weather-gov
#            How to use the weather.gov API
# note: This is where I finally figured out how to access the
#       weather data
# ===================================================================

from datetime import datetime
import requests
import json


# ---- weather forcase location (lat/lon)

lat = '34.149551'              # Pasadena, CA
lon = '-118.141449'            # Pasadena, CA


# ---- get weather data for lat/lon (JSON object)

url = f'https://api.weather.gov/points/{lat},{lon}'
r = requests.get(url)
j_obj = r.json()


# ---- get forecast data for lat/lon

url = j_obj['properties']['forecast']
r = requests.get(url)
j_obj = r.json()
f = j_obj['properties']['periods']


# ---- display 7 day forecast

now = datetime.now()
dt = now.strftime('%d/%m/%Y %H:%M:%S')

title = f'# 7 day forecast on {dt}'
print()
print(title)
print()

for i in range(len(f)):
    p = f[i]
    str = f'[{p["number"]:2}] ' + \
          f'{p["name"]:16} '    + \
          f'{p["temperature"]:3} deg-{p["temperatureUnit"]}'
    print(str)

# ---- write forecaste as CSV file
# ---- --------------------------------------------------------------
# ---- Note: print(str,file=file) and file.write(str + '\n')
# ----       are basicaly the same; pick one; (see example below)
# -------------------------------------------------------------------

outfile = 'forecast.csv'

with open(outfile,'w') as file:
    print(title,file=file)

    for i in range(len(f)):
        p = f[i]
        str = f'{p["number"]},' + \
              f'{p["name"]},'   + \
              f'{p["temperature"]},{p["temperatureUnit"]}'
        file.write(str + '\n')

print()