#!/usr/bin/env python3 ###################################################### # Takes a location, e.g. "New York" as an argument # # and returns the current weather conditions. Uses # # the weather data API courtesy of metaweather.com # ###################################################### ###################################################### # Written by ~xaphania 2022-04-22 # # For use on tilde.town with the 'our' IRC bot # # Please send comments or suggestions via town mail # # to xaphania@tilde.town # # v0.1 # # TO DO - customise weather strings, add emoji? # # TO DO - more features: detailed reports, future # # and past weather conditions, etc # ###################################################### import sys import json import urllib.request # get argument, replace spaces with %20 search = sys.argv[1].replace(" ","%20") # Get Where on Earth ID for specified location searchUrl = "https://www.metaweather.com/api/location/search/?query=" + search try: locationData = json.loads(urllib.request.urlopen(searchUrl).read()) except: print("Couldn't contact metaweather. Service may be down, please try later.") exit() try: locationID = locationData[0]["woeid"] except: search = search.replace("%20"," ") print(f"Sorry, I couldn't find location {search}") exit() # Get weather data for that woeid weatherUrl = "https://www.metaweather.com/api/location/"+str(locationID)+"/" try: weatherData = json.loads(urllib.request.urlopen(weatherUrl).read()) except: print("Couldn't contact metaweather. Service may be down, please try later.") exit() try: state = weatherData["consolidated_weather"][0]["weather_state_name"] temp = round(weatherData["consolidated_weather"][0]["the_temp"]) location = weatherData["title"] parent = weatherData["parent"]["title"] print(f"In {location}, {parent} it's {temp}°c and {state}" \ +" (Weather Data from www.metaweather.com)") except: print("Sorry, there was an error retreiving weather data. Please try later.")