autoexch04.pl to HTML.

index -|- end

Generated: Tue Feb 2 17:54:22 2010 from autoexch04.pl 2006/08/27 8.6 KB.

#!/Perl
# AIM: Download the $URL, and find the currency
# heading in table, after CLEAN
#<td></td>
#<td>Code</td><td></td><td>Currency</td><td></td><td>fcu/CAD</td><td></td><td>fcu/USD</td>
#<td></td>
#<td>Code</td><td></td><td>Currency</td><td></td><td>fcu/CAD</td><td></td><td>fcu/USD</td>
#<td></td>
# sample row from table
#<tr>
#<td></td>
#<td> <tt>ARS</tt> </td><td></td><td>Argentine Pesos</td><td></td><td>2.7941</td><td></td><td>3.0958</td>
#<td></td>
#<td> <tt>MAD</tt> </td><td></td><td>Moroccan Dirham</td><td></td><td>7.8186</td><td></td><td>8.6630</td>
#<td></td>
#</tr>
use LWP::Simple;
require "logfile.pl" or die "Missing logfile.pl ...\n"; # my simple log file and some other utility subs
require "htmltools.pl" or die "Missing htmltools.pl ...\n";
require "currencyISO.pl" or die "Missing currencyISO.pl ...\n";
my $vers = '04';
# log file stuff
my ($LF);
my $outfile = 'temp'.$0.'.txt';
my $outfil1 = 'tempcurr'.$vers.'.htm';
my $outfil2 = 'tempcurr'.$vers.'.csv';
# program variables
my $URL = 'http://fx.sauder.ubc.ca/today.html';
my $dbg1 = 0;
my $dbg2 = 0;
my $dbg3 = 0;
my $dbg4 = 0;
my @hrefs = ();
my @imgs = ();
my @currency = ();
my $m_date1 = '';
my $m_date2 = '';
my $etext = '';
my @cols = qw( 2, 4, 6, 8, 10, 12, 14, 16 );
my @colnms = qw( Code, Currency, fcu/CAD, fcu/USD, Code, Currency, fcu/CAD, fcu/USD );
open_log($outfile);
prt( "$0 ... Hello, World...\n" );
prt("Fetching text from $URL ...\n");
my $text = get("$URL");
my $tcnt = length($text);
prt( "Got $tcnt characters from URL $URL ...\n");
$etext = htmlexpand($text);
my $ctext = htmlcleanall($etext);
write2file($ctext,$outfil1);
###prt("[$ctext]\n");
prt( "len=".length($ctext)."\n"); # "[$txt2]\n");
my $ccnt = 0;
my $ccnt = extractcurrencies04($ctext);
###my $ccnt = scalar @currency;
prt( "Got $ccnt currencies ...\n" );
my $msg = '';
my $txt = '';
if ($ccnt) {
   open OF, ">$outfil2" or mydie("ERROR: Unable to open CSV out file!\n");
   prt("Writing CSV file $outfil2 ...\n");
   $msg = "Country,Currency,ISO,Rate $m_date1,Rate $m_date2"; 
   prt("$msg\n");
   print OF $msg."\n";
   for (my $i = 0; $i < $ccnt; $i++) {
      ###$msg = "".($currency[$i][0]).",".($currency[$i][1]).",".($currency[$i][2]).",".($currency[$i][3]).",".($currency[$i][4]);
      $msg = '';
      for (my $i2 = 0; $i2 < 5; $i2++) {
         $txt = "".($currency[$i][$i2]);
         if ($txt =~ /,/) {
            $txt = '"'.$txt.'"';
         }
         if (length($msg)) {
            $msg .= ",";
         }
         $msg .= $txt;
      }
      prt( "$msg\n" );
      print OF $msg."\n";
   }
   $msg = "From [$URL] on ".(scalar localtime);
   prt("$msg\n");
   print OF $msg."\n";
   close(OF);
} else {
   prt( "WARNING: FAILED TO EXTRACT ANY CURRENCIES!!!\n" );
}
prt( "All done ...\n" );
prt("[$ctext]\n") if ($dbg4);
close_log($outfile,1);
###system( $outfil1 );
###system( $outfil2 );
exit(0);
sub extractcurrencies04 {
   my ($txt) = shift;
   my @arr = split( /\n/, $txt );
   my $lcnt = scalar @arr;
   my $ccnt = 0;
   my $intbl = 0;
   my $bgn = 0;
   my $ictry = '';   # country
   my $ctry = '';   # country
   my $curr = '';   # currency
   my @itmarr = ();
   my $itm = '';
   my $v1 = ''; # quoted rate
   my $v2 = ''; # quoted rate
   my $bcnt = 0;
   my %hiso = ();
   my $kcnt = 0;
   my $mcnt = 0;
   my $srch = '';
   my $iso = '';
   my $tms = get_YYYYMMDD(scalar localtime);
   my $cyear = substr($tms,0,4);
   my $tblcnt = 0;
   my $rowcnt = 0;
   my $colcnt = 0;
   $m_date1 = 'fcu/CAD';
   $m_date2 = 'fcu/USD';
   prt("Processing $lcnt lines ...\n");
   foreach my $line (@arr) {
      chomp $line;
      if (substr($line, length($line)-1) eq "\r") {
         $line = substr($line,0,length($line)-1);
      }
      if ($intbl) {
         if ($line =~ /<\/table.*>/i) {
            $intbl = 0;
            if ($tblcnt == 3) {
               prt("Exit TABLE $tblcnt tag ...[$line]\n") if $dbg1;
            }
         } else {
            if ($line =~ /^<tr.*>/i) {
               $rowcnt++;
               prt("Start row $rowcnt ...\n") if $dbg1;
               $colcnt = 0;
            } elsif ($line =~ /<\/tr>/i) {
               prt("End row $rowcnt ...\n") if $dbg1;
            } elsif ($line =~ /^<td.*>/i) {
               $colcnt++;
               $itm = '';
               if ($line =~ /^<td.*>(.*)<\/td>/i) {
                  $itm = $1;
               }
               prt("Start column $colcnt ...[$line]...[$itm]\n") if $dbg1;
               ## my @cols = qw(   2,    4,        6,       8,       10,   12,       14,      16 );
               ## my @colnms = qw( Code, Currency, fcu/CAD, fcu/USD, Code, Currency, fcu/CAD, fcu/USD );
               if ($rowcnt == 1) {
                  # deal with headers
               } else {
                  if (($colcnt == 2)||($colcnt == 10)) {
                     $ictry = ISO2Currency($itm);
                     $ctry = '';
                     $curr = '';
                     $iso = $itm;
                     if ($ictry =~ /^NOT FOUND \[.*\]/) {
                        prt( "$ictry = FAILED TO GET ISO [$itm]!\n" );
                     } else {
                        @itmarr = split(/\s/,$ictry);
                        if (@itmarr) {
                           $curr = pop @itmarr;
                           $ctry = join(' ',@itmarr);
                        }
                     }
                     ###prt( "Col $colcnt = $ctry\n" );
                  } elsif (($colcnt == 4)||($colcnt == 12)) {
                     if (length($itm)) {
                        prt( "[$ictry] should be [$itm] ... ".(($ictry eq $itm) ? 'ok' : 'diff')." ...\n" ) if $dbg2;
                        if (length($ctry) == 0) {
                           @itmarr = split(/\s/,$itm);
                           if (@itmarr) {
                              $curr = pop @itmarr;
                              $ctry = join(' ',@itmarr);
                              prt( "Set \$curr=$curr and \$ctry=$ctry from [$itm] ... CHECK!\n" );
                           }
                        }
                     } else {
                        prt("Warning: got zero length \$itm ...[$line]...\n");
                     }
                  } elsif (($colcnt == 6)||($colcnt == 14)) {
                     $v1 = $itm;
                  } elsif (($colcnt == 8)||($colcnt == 16)) {
                     $v2 = $itm;
                     # $msg = "Country,Currency,ISO,Rate $m_date1,Rate $m_date2";
                     if (length($ctry) && length($curr)) {
                        push(@currency, [$ctry, $curr, $iso, $v1, $v2]);
                        prt( "push(\@currency, [$ctry, $curr, $iso, $v1, $v2]);\n" ) if $dbg3;
                        $ccnt++;
                     } else {
                        prt( "FAILED: push(\@currency, [$ctry, $curr, $iso, $v1, $v2]);\n" );
                     }
                  }
                  ##} elsif ($colcnt == 10) {
                  ##} elsif ($colcnt == 12) {
                  ##} elsif ($colcnt == 14) {
                  ##} elsif ($colcnt == 16) {   }
               }
            }
         }
      } elsif ($line =~ /<table.*>/i) {
         $tblcnt++;
         if ($tblcnt == 3) {
            prt("Entering TABLE tag $tblcnt ...[$line]\n") if $dbg1;
            $intbl = 1;
         }
      }
   }
   return $ccnt;
}
## month to number
sub mth_to_num {
   my ($mth) = shift;
   my $cnt = 0;
   my @mths = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
   ###prt( "Chk [$mth] " );
   foreach my $m (@mths) {
      $cnt++;
      if ($m eq $mth) {
         ###prt( "Is $m - return $cnt\n" );
         return $cnt;
      }
   }
   mydie( "ERROR: Returning 0!!! for [$mth]\n" );
   return '??';
}
# translated to YYYY/MM/DD, like 2005/03/12
sub get_YYYYMMDD {
   my ($tm) = shift;
   my @arr = split( / /, $tm ); # time of form 'Sat Mar 12 03:11:55 2005'
   my $ac = scalar @arr;
   my $doff = 2;
   my $yoff = 4;
   if ($ac == 5) {
      $doff = 2;
      $yoff = 4;
   } elsif ($ac == 6) {
      $doff = 3;
      $yoff = 5;
   } else {
      mydie( "ERROR: Time ($tm) did NOT split correctly!\n" );
   }
   my $mn = mth_to_num( $arr[1] );
   if ($mn < 10) {
      $mn = '0'.$mn;
   }
   my $dn = $arr[$doff];
   if ($dn < 10) {
      $dn = '0'.$dn;
   }
   my $dtt = $arr[$yoff].'/'.$mn.'/'.$dn; # translated to 2005/03/12
   return $dtt;
}
# diagnostic output shows
#Entering TABLE tag 3 ...[<TABLE width="640" cellspacing="0" cellpadding="0" border="0">]
#Start row 1 ...
#Start column 1 ...[<td></td>]
# Start column 2 ...[<td>Code</td>]
#Start column 3 ...[<td></td>]
# Start column 4 ...[<td>Currency</td>]
#Start column 5 ...[<td></td>]
# Start column 6 ...[<td>fcu/CAD</td>]
#Start column 7 ...[<td></td>]
# Start column 8 ...[<td>fcu/USD</td>]
#Start column 9 ...[<td></td>]
# Start column 10 ...[<td>Code</td>]
#Start column 11 ...[<td></td>]
# Start column 12 ...[<td>Currency</td>]
#Start column 13 ...[<td></td>]
# Start column 14 ...[<td>fcu/CAD</td>]
#Start column 15 ...[<td></td>]
# Start column 16 ...[<td>fcu/USD</td>]
#Start column 17 ...[<td></td>]
#End row 1 ...
#Start row 2 ...
#End row 2 ...
#Start row 3 ...
#Start column 1 ...[<td></td>]
# Start column 2 ...[<td> <tt>ARS</tt> </td>]
#Start column 3 ...[<td></td>]
# Start column 4 ...[<td>Argentine Pesos</td>]
#Start column 5 ...[<td></td>]
# Start column 6 ...[<td>2.7941</td>]
#Start column 7 ...[<td></td>]
# Start column 8 ...[<td>3.0958</td>]
#Start column 9 ...[<td></td>]
# Start column 10 ...[<td> <tt>MAD</tt> </td>]
#Start column 11 ...[<td></td>]
# Start column 12 ...[<td>Moroccan Dirham</td>]
#Start column 13 ...[<td></td>]
# Start column 14 ...[<td>7.8186</td>]
#Start column 15 ...[<td></td>]
# Start column 16 ...[<td>8.6630</td>]
#Start column 17 ...[<td></td>]
#End row 3 ...
# eof = autoexch03.pl

index -|- top

checked by tidy  Valid HTML 4.01 Transitional