ubuntuusers.de

Anhang: download clouds.pl

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr/bin/perl
# ------------------------------------------------------------------------------------
#  Program for downloading XPlanet cloud images from a random mirror
# 
#  Copyright (c) 2003, cueSim Ltd.                  http://www.cueSim.com, Bedford, UK
#  
# ------------------------------------------------------------------------------------
#  
#  Redistribution and use, with or without modification, are permitted provided 
#  that the following conditions are met:
#  
#      * Redistributions of source code must retain the above copyright notice, 
#  		this list of conditions and the following disclaimer.
#      * Neither the cueSim name nor the names of its contributors may 
#  		be used to endorse or promote products derived from this software without 
#  		specific prior written permission.
#  
#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
#  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
#  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
#  SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
#  OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
#  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
#  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
#  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# 

# download table updated 17 JANUARY 2009


use LWP::Simple;

# Set options:
#  - where to save the downloaded file (default is current directory)
my $Filename = "clouds.jpg";

# - how often the image is updated on the server
my $MaxDownloadFrequencyHours = 2;

# - how many times to retry, if the server doesn't respond
my $MaxRetries = 3;

## Note: excessive requests to a single image server is discouraged.
## This script limits max retries, does not download more frequently
## than every two hours (the file is generated every 3 hours). and 
## picks a random mirror location for every download.
##
## Change these settings at the risk of being blacklisted from the
## image servers.
		
		
# Get file details
if(-f $Filename)
{
	my @Stats = stat($Filename);
	my $FileAge = (time() - $Stats[9]);
	my $FileSize = $Stats[7];

	# Check if file is already up to date
	if($FileAge < 60 * 60 * $MaxDownloadFrequencyHours && $FileSize > 200000)
	{
		print "File is already up to date\n";
		exit(1);	
	}
}


# Try several times to download the file if necessary
for(1..$MaxRetries)
{
	# Get a random website to hit for the file
	my $MirrorURL = GetRandomMirror("mirrors.txt");

	# Download the file
	print "Using $MirrorURL\nDownloading...\n";
	my $Response = getstore($MirrorURL, $Filename);

	# If successfully downloaded, that's it, nothing more to do
	if( IndicatesSuccess($Response))
	{
		print "Finished: file successfully downloaded to $Filename\n";
		exit(0);
	}
	
	# Warning that we're retrying another random server
	print "Download not available, trying another website\n\n";
}

# Warning that no servers could be contacted
print "ERROR: Tried to download the file $MaxRetries times, but no servers could provide the file\n";
exit(2);



# Return codes of 200 to 299 are "success" in HTTP-speak
sub IndicatesSuccess()
{
	my $Response = shift();
	if($Response =~ /2\d\d/)
	{
		return(1);
	}
	else
	{
		return(0);
	}
}

# Returns the name of an internet resource which can provide the clouds image
sub GetRandomMirror()
{
	# Populate a list of mirrors
	my @Mirrors = (
                       "http://xplanet-sydney.inside.net/clouds_2048.jpg",
                       "http://xplanet-lasvegas.inside.net/clouds_2048.jpg",
		       "http://home.megapass.co.kr/~gitto88/cloud_data/clouds_2048.jpg",
		       "http://home.megapass.co.kr/~holywatr/cloud_data/clouds_2048.jpg",
                       "http://www.wizabit.eclipse.co.uk/xplanet/files/mirror/clouds_2048.jpg",
                       "ftp://ftp.iastate.edu/pub/xplanet/clouds_2048.jpg",
		       "http://xplanet.explore-the-world.net/clouds_2048.jpg");
	
	# Return one at random
	return $Mirrors[rand scalar(@Mirrors)];
}
Anhang herunterladen

Diese Revision wurde am 9. Oktober 2011 13:32 von ubuntuusers erstellt.