#!/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; }