|
|
| version 1.6, 2012/12/20 16:48:06 | version 1.13, 2013/03/12 13:09:34 |
|---|---|
| Line 3 | Line 3 |
| use strict; | use strict; |
| use File::Path; | use File::Path; |
| use Data::Dumper; | use Data::Dumper; |
| use Pod::Usage; | |
| use Getopt::Long; | |
| ## | ## |
| ## Some default values | ## Some default values |
| Line 10 use Data::Dumper; | Line 12 use Data::Dumper; |
| my $ver = q/$Id$/; | my $ver = q/$Id$/; |
| my $comicFile = "comics.conf"; | my $comicFile = "comics.conf"; |
| my %comics = &readComicConfig ( $comicFile ); | my %comics = &readComicConfig ( $comicFile ); |
| my $days_ago = 0; # Set this to fetch comics from X days ago | my %opts = &fetchOptions( ); |
| my $days_ago = $opts{'days'} || 0; | |
| my %dates = &fetchDates(); | my %dates = &fetchDates(); |
| my $baseDir = $comics{'configs'}{'base_directory'} || "."; | my $baseDir = $comics{'configs'}{'base_directory'} || "."; |
| my $imageDir = $baseDir . "/" . ( $comics{'configs'}{'image_directory'} || "images" ) . | my $imageDir = $baseDir . "/" . ( $comics{'configs'}{'image_directory'} || "images" ) . |
| "/$dates{'mon2'}$dates{'year2'}"; | "/$dates{'mon2'}$dates{'year2'}"; |
| my $indexDir = $baseDir . "/" . ( $comics{'configs'}{'index_directory'} || "indexes" ); | my $indexDir = $baseDir . "/" . ( $comics{'configs'}{'index_directory'} || "indexes" ); |
| 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 $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; | my $DATE=`date`; chomp $DATE; |
| Line 35 foreach my $comic ( sort keys %comics ) | Line 39 foreach my $comic ( sort keys %comics ) |
| &writeComic ( \%comics, $comic, \%dates ); | &writeComic ( \%comics, $comic, \%dates ); |
| } | } |
| my $D = `date +%d`; chomp $D; | print "Finding in $imageDir/*-$dates{'day2'}.jpg\n"; |
| print "Finding in $imageDir/*-$D.jpg\n"; | foreach my $file ( glob( "$imageDir/*-$dates{'day2'}.jpg" ) ) |
| foreach my $file ( glob( "$imageDir/*-$D.jpg" ) ) | |
| { | { |
| my $size = `/usr/bin/identify $file`; | my $size = `/usr/bin/identify $file`; |
| $size =~ s/.*\s(\d+)x\d+.*/$1/; | $size =~ s/.*\s(\d+)x\d+.*/$1/; |
| Line 113 sub readComicConfig ($$) { | Line 116 sub readComicConfig ($$) { |
| ####################################################################### | ####################################################################### |
| sub writeComic ($$) { | sub writeComic ($$) { |
| my ( $comics, $comic, $date ) = @_; | my ( $comics, $comic, $date ) = @_; |
| my $indexFile = $indexDir . "/index-" . $date->{'year2'} . $date->{'mon2'} . | my $sd = substr( join( '', $days[$date->{'dow'}] ), 0, 3 ); |
| $date->{'day2'} . ".html"; | my $indexFile = $indexDir . "/index-" . $date->{'year2'} . |
| $date->{'mon2'} . $date->{'day2'} . "-" . | |
| $sd . ".html"; | |
| my $content = <<EOF; | my $content = <<EOF; |
| <!-- ********* Begin $comic ($comics->{$comic}{'fullName'}) ******* --> | <!-- ********* Begin $comic ($comics->{$comic}{'fullName'}) ******* --> |
| Line 167 sub writeMainIndex ($$) { | Line 172 sub writeMainIndex ($$) { |
| ####################################################################### | ####################################################################### |
| sub writeFooter { | sub writeFooter { |
| my ( $date ) = @_; | my ( $date ) = @_; |
| my $indexFile = $indexDir . "/index-" . $date->{'year2'} . $date->{'mon2'} . | my $sd = substr( join( '', $days[$date->{'dow'}] ), 0, 3 ); |
| $date->{'day2'} . ".html"; | my $indexFile = $indexDir . "/index-" . $date->{'year2'} . |
| $date->{'mon2'} . $date->{'day2'} . "-" . | |
| $sd . ".html"; | |
| my $sysDate = `date`; | my $sysDate = `date`; |
| open INDEX, ">>$indexFile"; | open INDEX, ">>$indexFile"; |
| Line 177 sub writeFooter { | Line 184 sub writeFooter { |
| <center> | <center> |
| <font size="2"> | <font size="2"> |
| Generated on: <font color="green">$sysDate</font><br/> | Generated on: <font color="green">$sysDate</font><br/> |
| Version: <font color="green">$ver</font></font> | Version: <font color="green">$ver</font><br /> |
| CVS: <a href="http://demandred.dyndns.org/cgi-bin/cvsweb/comics/">http://demandred.dyndns.org/cgi-bin/cvsweb/comics/</a> | |
| <p> | <p> |
| <a href="http://validator.w3.org/check?uri=referer"><img | <a href="http://validator.w3.org/check?uri=referer"><img |
| src="http://www.w3.org/Icons/valid-xhtml10-blue" alt="Valid XHTML 1.0 Transitional" height="31" width="88" border="0" /></a> | src="http://www.w3.org/Icons/valid-xhtml10-blue" alt="Valid XHTML 1.0 Transitional" height="31" width="88" border="0" /></a> |
| Line 204 sub checkDir ($$) { | Line 212 sub checkDir ($$) { |
| ####################################################################### | ####################################################################### |
| sub writeTitle ($$) { | sub writeTitle ($$) { |
| my ( $date ) = @_; | my ( $date ) = @_; |
| my $indexFile = $indexDir . "/index-" . $date->{'year2'} . $date->{'mon2'} . | my $sd = substr( join( '', $days[$date->{'dow'}] ), 0, 3 ); |
| $date->{'day2'} . ".html"; | my $indexFile = $indexDir . "/index-" . $date->{'year2'} . |
| my $today = $date->{'mon'} . "/" . $date->{'day'} . "/" . $date->{'year'}; | $date->{'mon2'} . $date->{'day2'} . "-" . |
| $sd . ".html"; | |
| my $today = $days[$date->{'dow'}] . " " . $date->{'mon'} . "/" . $date->{'day'} . "/" . $date->{'year'}; | |
| open INDEX, ">$indexFile"; | open INDEX, ">$indexFile"; |
| print INDEX <<EOF; | print INDEX <<EOF; |
| Line 215 sub writeTitle ($$) { | Line 225 sub writeTitle ($$) { |
| <html xmlns="http://www.w3.org/1999/xhtml"> | <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> | <head> |
| <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> | <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> |
| <link href="/daily/comics/comics.css" type="text/css" rel="stylesheet" media="screen"> | |
| <title>Daily Comics for $today</title> | <title>Daily Comics for $today</title> |
| </head> | </head> |
| <body bgcolor="#FFFFFF"> | <body bgcolor="#FFFFFF"> |
| Line 314 sub parseComic ($$) { | Line 325 sub parseComic ($$) { |
| sub fetchDates () { | sub fetchDates () { |
| my %dates = (); | my %dates = (); |
| ($dates{'day'}, $dates{'mon'}, $dates{'year'}, $dates{'dow'}) = (localtime)[3,4,5,6]; | ($dates{'day'}, $dates{'mon'}, $dates{'year'}, $dates{'dow'}) = (localtime(time - (86400 * $days_ago )))[3,4,5,6]; |
| ## If you missed a day or two, reflect it here: | |
| $dates{'day'} -= $days_ago; ## <-- 5 days ago | |
| $dates{'year'} += 1900; | $dates{'year'} += 1900; |
| $dates{'year2'} = substr $dates{'year'}, 2, 2; | $dates{'year2'} = substr $dates{'year'}, 2, 2; |
| Line 327 sub fetchDates () { | Line 335 sub fetchDates () { |
| return %dates; | 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 <nick@declario.com> | |
| =head1 BUGS | |
| This is a work in progress. Please report all bugs to the author. | |
| =head1 SEE ALSO | |
| =head1 COPYRIGHT | |
| =cut | |