#!/usr/bin/perl use CGI qw(:standard); use CGI::Carp qw(fatalsToBrowser); use Chart::Lines; $url=param('url'); $tableNumber=param('tableNumber'); $datacol=param('datacol'); $labelcol=param('labelcol'); if(!$datacol) { $datacol=2 } if(!$labelcol) { $labelcol=1 } if(param('skiprows')) { $skiprows=param('skiprows'); } if(param('endrows')) { $endrows=param('endrows'); } # Store the content of url @lines=`curl "${url}"`; #@content=`curl "${url}"`; # Split lines into an array #@lines = split("/\r?\n|\r/", @content); # turn the content in rows # Set flag for number of tables - you may not want the current one $flag=0; $col=0; @data_array=(); $newrow=0; ROWS: foreach $val (@lines) { if(!($title) && $val=~///g; } if($val =~ /<table/) { $flag++; } if($flag==${tableNumber}) { $val =~ s/ //; $val =~ s/<!--.*?-->//g; if($val =~ /<tr/) { if($newrow > 0) { $row++; } else { $row=0; $newrow=1; } $val =~ s/<tr *>//; } if($skiprows && ($row < $skiprows)) { next ROWS; } if($endrows && (($row + $skiprows) > $endrows)) { last ROWS; } if($val =~ /<\/tr>/) { $col=0; $val =~ s/<\/tr>//; } if($val =~ /<\/td>/) { $col++; } if($val =~ /<\/table *>/) { next; } $val=~s/<.*?>//g; $val=~s/,//g; chomp($val); if($val) { if($col==${labelcol}) { push(@labels,"$val"); #$data_array[$row][$col]="$val"; #print STDERR "setting label $val for $row : $col\n"; } elsif($col==${datacol}) { $val+=0; if($val =~ /^-?(?:\d+(?:\.\d*)?|\.\d+)$/ || $val =~ /^-?\d+$/) { push(@values,$val); #print STDERR "setting $val for $row : $col\n"; } } } } } $y=param('y'); if(param('width')) { $width=param('width'); } else { $width="750"; } if(param('height')) { $height=param('height'); } else { $height="500"; } print STDERR join(",",@labels)." values ".join(",",@values)."\n"; my $img=Chart::Lines->new(${width},${height}); if(param('reverse')) { @labels=reverse(@labels); @values=reverse(@values); } if(defined($values[0])) { @data=([@labels],[@values]); } else { @data=(['no','data','available'],[30.2,23.5,92.1]); } @legend=('query'); my %settings= ( "title" => "courtesy techie-blogs.com", "x_label" => "$title", "y_label" => "$y", #"skip_x_ticks" => 5, "x_ticks" => "vertical", "y_grid_lines" => "true", "x_grid_lines" => "true", "transparent" => "true", "grey_background" => "false", ); $img->set(%settings); print <<EOF Content-type: image/png EOF ; $img->png(\*STDOUT,[ @data ]); exit(0); __END__