m4ly

EarningsWhispers Calendar

Sep 22nd, 2013
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 2.02 KB | None | 0 0
  1. #!/usr/bin/perl
  2. # Author: Dawid Mocek <[email protected]>
  3. # Exract data from earnings HTML table @ EarningsWhispers.com/calendar.asp and save to DB
  4.  
  5. use strict;
  6. use warnings;
  7.  
  8. use DBI;
  9. use HTML::TableExtract;
  10. use LWP::UserAgent;
  11. use DateTime;
  12. use DateTime::Format::Strptime;
  13.  
  14. my $url = 'http://www.earningswhispers.com/calendar.asp';
  15.  
  16. my $dt = DateTime->now;
  17. my $strp = DateTime::Format::Strptime->new(pattern => '%F %I:%M %p', time_zone => 'EST');
  18.  
  19. my $ua = LWP::UserAgent->new(
  20.     timeout => 180,
  21. );
  22.  
  23.  
  24. my $resp= $ua->get($url);
  25. my $html = $resp->content;
  26. my @innerHTML = ($html =~ m/document\.getElementById\(\'epsdates\'\)\.innerHTML\s+=\s+\"(.*)\";/g);
  27.  
  28. my $dbh = DBI->connect('DBI:mysql:db_name;host=localhost', 'user', 'password');
  29. $dbh->{mysql_auto_reconnect} = 1;
  30. my $stmt_earn = $dbh->prepare('INSERT INTO `earnings` (earn_time, ticker, companyname, conf_time, stage) VALUES(?,?,?,?,?)');
  31.  
  32. parse($innerHTML[0], 'BMO');
  33. parse($innerHTML[1], 'DMH');
  34. parse($innerHTML[2], 'AMC');
  35.  
  36. sub parse {
  37.  
  38.     my $table = $_[0];
  39.     my $when = $_[1];
  40.  
  41.     my $te = HTML::TableExtract->new();
  42.     $te->parse($table);
  43.     $te->first_table_found();
  44.     my @rows = $te->rows();
  45.     if(scalar(@rows) == 0) { return; }
  46.  
  47.     foreach my $row (@rows) {
  48.       @$row[1] =~ /^(.*)\s+\((.*)\)$/;
  49.       my $issue_name = $1;
  50.       my $issue_symbol = $2;
  51.  
  52.       my $earn_time;
  53.       if(@$row[3] =~ /^([a-zA-Z\s0-9:]*)$/) {
  54.       $earn_time = $strp->parse_datetime($dt->ymd . " " . $1);
  55.  
  56.       $earn_time = $earn_time->strftime("%Y-%m-%d %H:%M:%S");
  57.       }
  58.       else {
  59.        $earn_time =  $dt->ymd . ' ' .'00:00:00';
  60.       }
  61.  
  62.       my $conf_time;
  63.       if(@$row[4] =~ /^([a-zA-Z\s0-9:]*)$/) {
  64.       $conf_time = $strp->parse_datetime($dt->ymd . " " . $1);
  65.       $conf_time = $conf_time->strftime("%Y-%m-%d %H:%M:%S");
  66.  
  67.       }
  68.       else {
  69.        $conf_time = $dt->ymd . ' '. '00:00:00';
  70.        }
  71.       $stmt_earn->execute( $earn_time, $issue_symbol, $issue_name, $conf_time, $when);
  72.     }
  73. }
  74.  
  75. $dbh->disconnect();
Add Comment
Please, Sign In to add comment