text: #!/usr/bin/python2
  
  # Kindle Weather Display
  # Matthew Petroff (http://mpetroff.net/)
  # September 2012
  
  from xml.dom import minidom
  import datetime
  import codecs
  try:
      # Python 3
      from urllib.request import urlopen
  except ImportError:
      # Python 2
      from urllib2 import urlopen
  
  #
  # Geographic location
  #
  
  latitude = 39.7337
  longitude = -104.9799
  
  
  
  #
  # Download and parse weather data
  #
  
  # Fetch data (change lat and lon to desired location)
  weather_xml = urlopen('http://graphical.weather.gov/xml/SOAP_server/ndfdSOAPclientByDay.php?whichClient=NDFDgenByDay&lat=' + str(latitude) + '&lon=' + str(longitude) + '&format=24+hourly&numDays=4&Unit=e').read()
  dom = minidom.parseString(weather_xml)
  
  # Parse temperatures
  xml_temperatures = dom.getElementsByTagName('temperature')
  highs = [None]*4
  lows = [None]*4
  for item in xml_temperatures:
      if item.getAttribute('type') == 'maximum':
          values = item.getElementsByTagName('value')
          for i in range(len(values)):
              highs[i] = int(values[i].firstChild.nodeValue)
      if item.getAttribute('type') == 'minimum':
          values = item.getElementsByTagName('value')
          for i in range(len(values)):
              lows[i] = int(values[i].firstChild.nodeValue)
  
  # Parse icons
  xml_icons = dom.getElementsByTagName('icon-link')
  icons = [None]*4
  for i in range(len(xml_icons)):
      icons[i] = xml_icons[i].firstChild.nodeValue.split('/')[-1].split('.')[0].rstrip('0123456789')
  
  # Parse dates
  xml_day_one = dom.getElementsByTagName('start-valid-time')[0].firstChild.nodeValue[0:10]
  day_one = datetime.datetime.strptime(xml_day_one, '%Y-%m-%d')
  
  
  
  #
  # Preprocess SVG
  #
  
  # Open SVG to process
  output = codecs.open('/app/weather-script-preprocess.svg', 'r', encoding='utf-8').read()
  
  # Insert icons and temperatures
  output = output.replace('ICON_ONE',icons[0]).replace('ICON_TWO',icons[1]).replace('ICON_THREE',icons[2]).replace('ICON_FOUR',icons[3])
  output = output.replace('HIGH_ONE',str(highs[0])).replace('HIGH_TWO',str(highs[1])).replace('HIGH_THREE',str(highs[2])).replace('HIGH_FOUR',str(highs[3]))
  output = output.replace('LOW_ONE',str(lows[0])).replace('LOW_TWO',str(lows[1])).replace('LOW_THREE',str(lows[2])).replace('LOW_FOUR',str(lows[3]))
  
  # Insert days of week
  one_day = datetime.timedelta(days=1)
  days_of_week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
  output = output.replace('DAY_ONE', days_of_week[day_one.weekday()]).replace('DAY_TWO',days_of_week[(day_one+one_day).weekday()]).replace('DAY_THREE',days_of_week[(day_one + 2*one_day).weekday()]).replace('DAY_FOUR',days_of_week[(day_one + 3*one_day).weekday()])
  
  # Insert time
  now = datetime.datetime.now()
  current_time = now.strftime("%I:%M %p")
  output = output.replace('CURRENT_TIME', current_time)
  
  
  # Write output
  codecs.open('/app/weather-script-output.svg', 'w', encoding='utf-8').write(output)
  