Requirements:
hamvoip tts_audio.sh
python geopy
python3.5
Example Usage: python3 weather.py 97103
extensions.conf
[zip]
exten => _xxxx.,1,System(python3 /tmp/json/zip2.py ${EXTEN})
exten => _xxx.,n,Hangup()
import os
import sys
import argparse
import requests
import json
from datetime import datetime, timedelta
from geopy.geocoders import Nominatim
def zip_to_lat_long(zipcode):
geolocator = Nominatim(user_agent="my_app") # initialize geolocator
location = geolocator.geocode(zipcode, timeout=10)
if location is None: # if geocoding fails, return None
return None
else:
return (location.latitude, location.longitude) # return latitude and longitude as a tuple
if __name__ == "__main__":
# Define and parse command line arguments
parser = argparse.ArgumentParser()
parser.add_argument("zip", help="Zip code to retrieve weather forecast")
args = parser.parse_args()
# Convert zip code to latitude and longitude
lat_long = zip_to_lat_long(args.zip)
# Get weather forecast from weather.gov
if lat_long is None:
print("Error: Could not convert zip code to latitude and longitude.")
else:
lat_long_str = "{:.3f},{:.3f}".format(lat_long[0], lat_long[1])
url = 'https://forecast.weather.gov/MapClick.php?lat={}&lon={}&FcstType=json&TextType=2'.format(lat_long_str.split(',')[0], lat_long_str.split(',')[1])
response = requests.get(url)
if response.status_code == 200:
data = json.loads(response.content.decode('utf-8'))
tomorrow = (datetime.now() + timedelta(days=0)).strftime('%Y-%m-%d')
with open('/tmp/json/tomorrow.txt', 'w') as f:
for i in range(len(data['time']['startValidTime'])):
start_valid_time = data['time']['startValidTime'][i]
start_period_name = data['time']['startPeriodName'][i]
temperature = data['data']['temperature'][i]
weather = data['data']['weather'][i] #Shortened Forecast.
text = data['data']['text'][i] #Full forecast not added in Print.
if start_valid_time.startswith(tomorrow):
print("{}: {} degrees, {}".format(start_period_name, temperature, weather), file=f)
else:
print("Error retrieving data from weather.gov. Status code: {response.status_code}")
os.system("/bin/bash /usr/local/bin/tts_audio.sh /tmp/json/tomorrow.txt")
os.system("asterisk -rx \"rpt localplay NODE# /tmp/json/tomorrow\"")