#!/usr//bin/perl
use LWP;
use HTML::TableExtract;
use DateTime;
# Create a user agent object
use LWP::UserAgent;
print "*** GETSTATS ***\n";
chdir('/home/lemushyman/gcirc');
mkdir('DATA') if ! -d 'DATA';
my @trains=(
{NUMBER=>9005, DEST=> 'DWK', DAYS=>1, ARRIVAL=>'15:07'},
{NUMBER=>9216, DEST=> 'ADI', DAYS=>1, ARRIVAL=>'07:10'},
{NUMBER=>9223, DEST=> 'JAT', DAYS=>1, ARRIVAL=>'19:25'},
{NUMBER=>1057, DEST=> 'ASR', DAYS=>1, ARRIVAL=>'16:30'},
{NUMBER=>5209, DEST=> 'ASR', DAYS=>1, ARRIVAL=>'17:30'},
{NUMBER=>2497, DEST=> 'ASR', DAYS=>1, ARRIVAL=>'14:15'},
{NUMBER=>9225, DEST=> 'JAT', DAYS=>1, ARRIVAL=>'07:00'},
{NUMBER=>2472, DEST=> 'NDLS', DAYS=>1, ARRIVAL=>'21:30'},
{NUMBER=>2436, DEST=> 'TSK', DAYS=>1, ARRIVAL=>'05:10'},
{NUMBER=>2424, DEST=> 'TSK', DAYS=>1, ARRIVAL=>'03:35'},
{NUMBER=>5814, DEST=> 'RNY', DAYS=>1, ARRIVAL=>'05:05'},
{NUMBER=>2510, DEST=> 'NJP', DAYS=>1, ARRIVAL=>'14:05'},
{NUMBER=>3148, DEST=> 'SDAH', DAYS=>2, ARRIVAL=>'08:15'},
{NUMBER=>2841, DEST=> 'BBS', DAYS=>0, ARRIVAL=>'21:20'},
{NUMBER=>2830, DEST=> 'MAS', DAYS=>1, ARRIVAL=>'09:05'},
{NUMBER=>2633, DEST=> 'CAPE', DAYS=>1, ARRIVAL=>'06:50'},
{NUMBER=>6525, DEST=> 'TVR', DAYS=>0, ARRIVAL=>'12:45'},
{NUMBER=>6312, DEST=> 'PNVL', DAYS=>1, ARRIVAL=>'21:00'},
{NUMBER=>2502, DEST=> 'NJP', DAYS=>2, ARRIVAL=>'00:05'},
{NUMBER=>2502, DEST=> 'GHY', DAYS=>2, ARRIVAL=>'08:15'},
{NUMBER=>2506, DEST=> 'RNY', DAYS=>1, ARRIVAL=>'15:15'},
{NUMBER=>5610, DEST=> 'RNY', DAYS=>1, ARRIVAL=>'01:00'},
{NUMBER=>8102, DEST=> 'PTK', DAYS=>1, ARRIVAL=>'16:25'},
{NUMBER=>9225, DEST=> 'JAT', DAYS=>1, ARRIVAL=>'06:15'},
{NUMBER=>2426, DEST=> 'NDLS', DAYS=>1, ARRIVAL=>'05:00'},
{NUMBER=>2436, DEST=> 'NJP', DAYS=>1, ARRIVAL=>'11:45',RUNSON=>4},
{NUMBER=>5959, DEST=> 'RNY', DAYS=>0, ARRIVAL=>'14:05'},
{NUMBER=>4055, DEST=> 'NJP', DAYS=>1, ARRIVAL=>'14:05'},
{NUMBER=>4960, DEST=> 'NJP', DAYS=>1, ARRIVAL=>'22:25'},
# {NUMBER=>5813, DEST=> 'DMC', DAYS=>1, ARRIVAL=>'05:20'},
{NUMBER=>2423, DEST=> 'NJP', DAYS=>1, ARRIVAL=>'12:55'},
# {NUMBER=>2510, DEST=> 'MAS', DAYS=>2, ARRIVAL=>'04:10',RUNSON=>1},
{NUMBER=>2431, DEST=> 'PNVL', DAYS=>1, ARRIVAL=>'18:10',RUNSON=>5},
);
foreach $train (@trains){
get_runing_status($train);
}
print "**** GETSTATS END ***\n\n\n";
sub get_runing_status{
my($train)=@_;
print "TRAIN $train->{NUMBER} ";
my($day,$month,$year)=get_running_day($train->{ARRIVAL}, $train->{DAYS},$train->{RUNSON});
return if !defined $day;
my $ddir="DATA/$day-$month-$year";
my $ddir="DATA/$train->{NUMBER}";
mkdir($ddir) if ! -d $ddir;
#my $url = "http://www.trainenquiry.com/RunningIslTrSt.aspx?tr=$train->{NUMBER}&st=$train->{DEST}+&dt=$day%2f$month%2f$year";
my $url = "http://203.176.113.63/RunningIslTrSt.aspx?tr=$train->{NUMBER}&st=$train->{DEST}+&dt=$day%2f$month%2f$year";
print "$url\n";
if (-f "$ddir/$day-$month-$year") {
print "Already got $ddir/$day-$month-$year\n";
return;
}
my $ua = LWP::UserAgent->new;
$ua->agent("GCIRC/0.1 ");
# Create a request
my $req = HTTP::Request->new(GET => $url);
$req->content_type('application/x-www-form-urlencoded');
# Pass request to the user agent and get a response back
my $res = $ua->request($req);
# Check the outcome of the response
if ($res->is_success) {
$delay_time = get_delay($train->{DEST}, $res->content);
print "DELAY AT $train->{DEST}=", $delay_time ,"\n";
return unless defined $delay_time;
open(DFILE, ">$ddir/$day-$month-$year");
print DFILE "$delay_time\n";
close(DFILE);
open(CVS, ">>everything.cvs");
print CVS "$train->{NUMBER},$day-$month-$year,$delay_time\n";
close(CVS);
}
else {
print $res->status_line, "\n";
}
}
sub get_running_day{
my($eta,$days,$runson)=@_;
my($eta_hour,$eta_minute)=split /:/,$eta;
$dt = DateTime->from_epoch(epoch=>time());
$dt->set_time_zone( 'Asia/Calcutta' );
my($hour)=split /:/,$dt->hms();
$days++;
$days++ if $hour < $eta_hour;
$dt = DateTime->from_epoch(epoch=>time()-$days*24*60*60);
$dt->set_time_zone( 'Asia/Calcutta' );
return split /-/, $dt->dmy();
}
sub get_delay{
my $dest = shift;
my $table = shift;
my $te = new HTML::TableExtract( );
$te->parse($table);
return undef unless ($te->tables)[4] && ($te->tables)[4]->rows && (($te->tables)[4]->rows)[3];
my $delay = (($te->tables)[4]->rows)[3][1] ;
$delay =~ s/\s//g;
return $delay;
}