code: def main(arguments):
      
      formatter_class = argparse.ArgumentDefaultsHelpFormatter
      parser = argparse.ArgumentParser(description=__doc__,
                                       formatter_class=formatter_class)
      parser.add_argument('infile', help="Input file",
                          type=argparse.FileType('r'))
      parser.add_argument('-o', '--outfile', help="Output file",
                          default=sys.stdout, type=argparse.FileType('w'))
      args = parser.parse_args(arguments)
  
      urls = args.infile.read().splitlines()
  
      api_token = keyring.get_password('pushover', 'api_token')
      pushover_user = keyring.get_password('pushover', 'user')
      pushover = Pushover(api_token, pushover_user)
  
      for url in urls:
          domain = urlparse(url).netloc
          urlpath = urlparse(url).path
          url_dashes = re.sub(r'/', '-', urlpath)
  
          cache = os.path.expanduser("~/.urlmon-cache")
          if not os.path.isdir(cache):
              os.mkdir(cache, mode=0o755)
          filename = domain + url_dashes + '.html'
          filepath = os.path.join(cache, filename)
  
          html = requests.get(url).text
  
          if os.path.isfile(filepath):
              with open(filepath) as r:
                  before = r.read()
              if html == before:
                  logger.info("{} is unchanged".format(url))
              else:
                  msg = "{} changed".format(url)
                  logger.info(msg)
                  logger.debug(diff(before, html))
                  response = pushover.push(msg)
                  logger.debug("Pushover notification sent: "
                               "{}".format(response.status_code))
  
          else:
              logger.info("New url: {}".format(filename))
              with open(filepath, 'w') as w:
                  w.write(html)
              logger.info("Wrote file to cache: {}".format(filename))
docs: Parse arguments, request the urls, notify if different.