# # download_clouds.py ver. 1.1 # # Download coulds map for xplanet from a random mirror, optionally # save the one to archive directory. # # Usage: # python download_clouds.py - to save the output as clouds_2048.jpg # python download_coulds.py output.jpg - to save the output as output.jpg # # (C) 2004 Michal Pasternak # # This file is in public domain. # user-tunable parameters: # how often to download the image? maxDownloadFrequencyHours = 3 # how many times to retry if download fails (each time tries using a # different mirror) maxRetries = 3 # default filename of the output file (in current directory). You can # specify it on the command line defaultOutputFile = "/home/churchyard/.xplanet/clouds_4096.jpg" # archive dir - where to save old files? archiveDir = None # "/usr/public/cloudsArchive" # The list of mirrors. Add new ones here. mirrors = [ "http://userpage.fu-berlin.de/~jml/clouds_4096.jpg", "http://www.narrabri.atnf.csiro.au/operations/NASA/clouds_4096.jpg", "http://xplanet.sourceforge.net/clouds/clouds_4096.jpg", "http://www.ruwenzori.net/earth/clouds_4096.jpg"] # end of user-tunable parameters import random, urllib, sys, stat, time, os # set output file name try: outputFile = sys.argv[1] except: outputFile = defaultOutputFile pass # check if the file exists and is old enough to overwrite try: s = os.stat(outputFile) mtime = s[stat.ST_MTIME] fs = s[stat.ST_SIZE] found = True except: mtime = 0 fs = 0 found = False pass if time.time() - mtime < maxDownloadFrequencyHours * 3600 and fs > 400000: sys.stderr.write("File is already up to date!\n") sys.exit(0) else: if found and archiveDir is not None: # archivize old file import shutil archName = os.path.join(archiveDir, time.strftime("%Y-%m-%d_%H-%I") + "_" + os.path.basename(outputFile)) sys.stderr.write("Archivizing old file to %s...\n" % archName) shutil.move(outputFile, archName) pass pass # ok, download: for a in range(maxRetries): try: url = mirrors [ random.randint(0, len(mirrors)-1) ] sys.stderr.write("Using %s\nDownloading...\n" % url) urllib.urlretrieve(url, outputFile) break except: pass pass