--- comics/fetch.pl.new 2011/08/18 12:39:12 1.1 +++ comics/fetch.pl.new 2015/01/19 13:46:19 1.15 @@ -1,21 +1,33 @@ #!/usr/bin/perl -w +############################################################################### +# $Log: fetch.pl.new,v $ +# Revision 1.15 2015/01/19 13:46:19 nick +# *** empty log message *** +# +############################################################################### + use strict; use File::Path; use Data::Dumper; +use Pod::Usage; +use Getopt::Long; ## ## Some default values ## -my $ver = q/$Id: fetch.pl.new,v 1.1 2011/08/18 12:39:12 nick Exp $/; +my $ver = '$Id: fetch.pl.new,v 1.15 2015/01/19 13:46:19 nick Exp $'; my $comicFile = "comics.conf"; my %comics = &readComicConfig ( $comicFile ); +my %opts = &fetchOptions( ); +my $days_ago = $opts{'days'} || 0; my %dates = &fetchDates(); my $baseDir = $comics{'configs'}{'base_directory'} || "."; my $imageDir = $baseDir . "/" . ( $comics{'configs'}{'image_directory'} || "images" ) . "/$dates{'mon2'}$dates{'year2'}"; my $indexDir = $baseDir . "/" . ( $comics{'configs'}{'index_directory'} || "indexes" ); -my $USER_AGENT = "ozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18) Gecko/20110628 Ubuntu/10.10 (maverick) Firefox/3.6.18"; +my $USER_AGENT = "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.18) Gecko/20110628 Ubuntu/10.10 (maverick) Firefox/3.6.18"; +my @days = qw/ Sunday Monday Tuesday Wednesday Thursday Friday Saturday /; my $DATE=`date`; chomp $DATE; @@ -30,10 +42,22 @@ print STDOUT "Starting comic fetch at $D foreach my $comic ( sort keys %comics ) { next if ( $comic =~ m/config/ ); + if ( ( $dates{'day2'} eq "Sunday" ) && + ( $comics{$comic}{'sunday'} == 0 ) ) { print "Skipping.\n"; next; } $comics{$comic}{'error'} = &downloadComic ( \%comics, $comic, \%dates ); &writeComic ( \%comics, $comic, \%dates ); } +print "Finding in $imageDir/*-$dates{'day2'}.jpg\n"; +foreach my $file ( glob( "$imageDir/*-$dates{'day2'}.jpg" ) ) +{ + my $size = `/usr/bin/identify $file`; + $size =~ s/.*\s(\d+)x\d+.*/$1/; + + system( "/usr/bin/convert -resize 640 $file $file" ) + if ( $size > 640 ) +} + ## &writeMainIndex ( \%dates ); &writeFooter( \%dates ); @@ -77,15 +101,25 @@ sub readComicConfig ($$) { my %comicConfig = ( ); my %config = ( ); + my ($year, $mon, $day) =( localtime(time))[5,4,3]; + $year += 1900; + $mon = sprintf("%02d", ($mon + 1)); + $day = sprintf("%02d", $day); + open FILEN, "<$comicFile"; while () { if ( ( $_ !~ m/^#/ ) && ( $_ =~ m/,.*,/) ){ + $_ =~ s/__YEAR__/$year/g; + $_ =~ s/__MON__/$mon/g; + $_ =~ s/__DAY__/$day/g; + my @res = split /,/, $_; $comicConfig{$res[0]}{'url'} = $res[1]; $comicConfig{$res[0]}{'search'} = $res[2]; $comicConfig{$res[0]}{'mode'} = $res[3]; $comicConfig{$res[0]}{'fullName'} = $res[4]; $comicConfig{$res[0]}{'ext'} = $res[5]; + $comicConfig{$res[0]}{'sunday'} = $res[6] || 1; $comicConfig{$res[0]}{'error'} = 0; } elsif ( $_ =~ m/(.*)\s+=\s+(.*)/ ) { @@ -101,8 +135,10 @@ sub readComicConfig ($$) { ####################################################################### sub writeComic ($$) { my ( $comics, $comic, $date ) = @_; - my $indexFile = $indexDir . "/index-" . $date->{'year2'} . $date->{'mon2'} . - $date->{'day2'} . ".html"; + my $sd = substr( join( '', $days[$date->{'dow'}] ), 0, 3 ); + my $indexFile = $indexDir . "/index-" . $date->{'year2'} . + $date->{'mon2'} . $date->{'day2'} . "-" . + $sd . ".html"; my $content = <{$comic}{'fullName'}) ******* --> @@ -155,14 +191,20 @@ sub writeMainIndex ($$) { ####################################################################### sub writeFooter { my ( $date ) = @_; - my $indexFile = $indexDir . "/index-" . $date->{'year2'} . $date->{'mon2'} . - $date->{'day2'} . ".html"; + my $sd = substr( join( '', $days[$date->{'dow'}] ), 0, 3 ); + my $indexFile = $indexDir . "/index-" . $date->{'year2'} . + $date->{'mon2'} . $date->{'day2'} . "-" . + $sd . ".html"; my $sysDate = `date`; open INDEX, ">>$indexFile"; print INDEX < -
Generated at $sysDate +
+ +Generated on: $sysDate
+Version: $ver
+CVS: http://demandred.dyndns.org/cgi-bin/cvsweb/comics/

Valid XHTML 1.0 Transitional @@ -189,9 +231,11 @@ sub checkDir ($$) { ####################################################################### sub writeTitle ($$) { my ( $date ) = @_; - my $indexFile = $indexDir . "/index-" . $date->{'year2'} . $date->{'mon2'} . - $date->{'day2'} . ".html"; - my $today = $date->{'mon'} . "/" . $date->{'day'} . "/" . $date->{'year'}; + my $sd = substr( join( '', $days[$date->{'dow'}] ), 0, 3 ); + my $indexFile = $indexDir . "/index-" . $date->{'year2'} . + $date->{'mon2'} . $date->{'day2'} . "-" . + $sd . ".html"; + my $today = $days[$date->{'dow'}] . " " . $date->{'mon'} . "/" . $date->{'day'} . "/" . $date->{'year'}; open INDEX, ">$indexFile"; print INDEX < + Daily Comics for $today @@ -221,7 +266,8 @@ sub directDownload ($$) { my $cDir = $date->{'mon2'} . $date->{'year2'}; my $cDate = $date->{'day2'}; - my $cmd = "wget -q $file --referer=\"" . $comics->{$comic}{'url'} ."\" --user-agent=\"$USER_AGENT\" -O - | /usr/bin/convert -resize 640 - jpeg:images/$cDir/$comic-$cDate.jpg"; + my $cmd = "wget -q $file --referer=\"" . $comics->{$comic}{'url'} ."\" --user-agent=\"$USER_AGENT\" -O - | /usr/bin/convert - jpeg:images/$cDir/$comic-$cDate.jpg"; + return system($cmd); } @@ -266,7 +312,7 @@ sub indexDownload ($$) { if ( $comicLine ) { if ( $comicLine =~ m/(gif|jpg|png)/i ) { $comics->{$comic}{'ext'} = $1; } my $comicURL = ( $comicLine =~ m/http/ ) ? $comicLine : $mainURL . $comicLine; - my $cmd = "wget --user-agent=\"$USER_AGENT\" --referer=\"" . $comics->{$comic}{'url'} . "\" -q $comicURL -O - | /usr/bin/convert -resize 640 - jpeg:images/$cDir/$comic-$cDate.jpg"; + my $cmd = "wget --user-agent=\"$USER_AGENT\" --referer=\"" . $comics->{$comic}{'url'} . "\" -q $comicURL -O - | /usr/bin/convert - jpeg:images/$cDir/$comic-$cDate.jpg"; system( $cmd ); return 0; } @@ -299,10 +345,7 @@ sub parseComic ($$) { sub fetchDates () { my %dates = (); - ($dates{'day'}, $dates{'mon'}, $dates{'year'}, $dates{'dow'}) = (localtime)[3,4,5,6]; - - ## If you missed a day or two, reflect it here: - # $dates{'day'}-=1; ## <-- 5 days ago + ($dates{'day'}, $dates{'mon'}, $dates{'year'}, $dates{'dow'}) = (localtime(time - (86400 * $days_ago )))[3,4,5,6]; $dates{'year'} += 1900; $dates{'year2'} = substr $dates{'year'}, 2, 2; @@ -312,3 +355,59 @@ sub fetchDates () { return %dates; } + +############################################################################### +## +## &fetchOptions( ); +## +## Grab our command line arguments and toss them in to a hash +## +############################################################################### +sub fetchOptions { + my %opts; + + &GetOptions( + "days:i" => \$opts{'days'}, + "help|?" => \$opts{'help'}, + "man" => \$opts{'man'}, + ) || &pod2usage( ); + &pod2usage( ) if defined $opts{'help'}; + &pod2usage( { -verbose => 2, -input => \*DATA } ) if defined $opts{'man'}; + + return %opts; +} + +__END__ + +=head1 NAME + +fetch.pl - Fetches comics and places them all locally in a single html file. + +=head1 SYNOPSIS + +fetch.pl [options] + +Options: + --days,d Fetch comics from X days ago + --help,? Display the basic help menu + --man,m Display the detailed man page + +=head1 DESCRIPTION + +=head1 HISTORY + +=head1 AUTHOR + +Nicholas DeClario + +=head1 BUGS + +This is a work in progress. Please report all bugs to the author. + +=head1 SEE ALSO + +=head1 COPYRIGHT + +=cut + +