#!/usr/bin/perl package SearchStat::GenReport; chdir "/root/searchstat"; @graphqueries = ( ); $graphwidth = 200; $graphheight = 150; $graphinterval = 50; use XML::Parser; $p = new XML::Parser(Style => 'Subs', ErrorContext => 2, ParseParamEnt => 1, Handlers => {Char => \&handle_char}); @t=$p->parsefile("/root/searchstat/results.xml"); %URLS=(); foreach $engine (sort keys %engines) { require "$engine.pl"; $URLS{$engine} = $URLs[0]; } open(NEW,">/tmp/searchstat.html"); print NEW "\n \n Search Engine Standings\n \n \n
\n \n"; foreach $query (@graphqueries) { foreach $engine (sort keys %engines) { next unless $queryhits{"$engine:$query"}; $count = keys %{$engines{$engine}->{$query}}; $width = int($graphwidth / $count); $width = 1 if $width<1; $width = 15 if $width<15; $url = sprintf($URLS{$engine}, &urlize($query)); print NEW "\n\n"; print NEW ""; foreach $date (sort keys %{$engines{$engine}->{$query}}) { my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($date); $mon++; $year=~s|^.*(..)$|$1|; $hour = $hour > 12 ? ($hour-12)."p" : ($hour==0 ? "12a" : $hour."a"); $val = $engines{$engine}->{$query}->{$date}; print NEW ""; } print NEW "\n"; print NEW ""; foreach $date (sort keys %{$engines{$engine}->{$query}}) { $val = $engines{$engine}->{$query}->{$date}; if($val == 0) { print NEW ""; } else { print NEW ""; } } print NEW "\n"; print NEW "
$engine : $query
"; if($val == 0) { print NEW "\"$mday/$mon/$year
\"$mday/$mon/$year"; } elsif($val > $graphinterval) { print NEW "\"$mday/$mon/$year
\"$mday/$mon/$year"; } else { $blackheight = (($graphinterval - $val + 1)/$graphinterval)*$graphheight; $clearheight = $graphheight-$blackheight; print NEW "\"$mday/$mon/$year
" if $clearheight>0; print NEW "\"$mday/$mon/$year" if $blackheight>0; } print NEW "
-$val
\n
\n"; } } foreach $engine (sort keys %engines) { next unless $enginehits{$engine}; %alldates=(); foreach $query (sort keys %{$engines{$engine}}) { foreach $date (sort keys %{$engines{$engine}->{$query}}) { $alldates{$date} = 1; } } if(%alldates) { print NEW " $engine\n"; print NEW " \n \n \n"; foreach $date (sort keys %alldates) { my($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($date); $mon++; $year=~s|^.*(..)$|$1|; $hour = $hour > 12 ? ($hour-12)."p" : ($hour==0 ? "12a" : $hour."a"); print NEW " \n"; } print NEW " \n"; foreach $query (sort keys %{$engines{$engine}}) { print NEW " \n \n"; undef $lastval; foreach $date (sort keys %alldates) { $val = $engines{$engine}->{$query}->{$date}; $lastval = $val unless defined $lastval; if(defined $val) { $color="#000000"; if($val != $lastval) { if($val == 0) { $color="#FF0000"; } elsif($lastval == 0) { $color="#0000FF"; } elsif($val > $lastval) { $color="#AA0000"; } elsif($val < $lastval) { $color="#0000AA"; } } $val = "-" if $val == 0; print NEW " \n"; $lastval = $val; } else { print NEW " \n"; } } print NEW " \n"; } print NEW "
$mon/$mday
$hour
$query$val
\n"; } } print NEW "
\n
\n \n\n"; close(NEW); sub ENGINE { %_ = @_; $enginename = $_{NAME}; $engines{$enginename} = (); } sub ENGINE_ {} sub SEARCH { %_ = @_; $querystr = $_{QUERY}; $engines{$enginename}->{$querystr} = (); } sub SEARCH_ {} sub RESULT { %_ = @_; $resultdate = $_{DATE}+0; $engines{$enginename}->{$querystr}->{$resultdate} = 0; } sub RESULT_ { $gatherstring = $gatherstring+0; $engines{$enginename}->{$querystr}->{$resultdate} = $gatherstring; $queryhits{"$enginename:$querystr"} += $gatherstring; $enginehits{$enginename} += $gatherstring; $resultdate=0; $gatherstring=""; } $gatherstring=""; sub handle_char { if($resultdate) { $gatherstring .= $_[1]; } } sub urlize { my($s) = @_; $s =~ s!(\`|\@|\!|\#|\$|\%|\^|\&|\(|\)|\=|\\|\+|\||\[|\]|\{|\}|\;|\'|\:|\"|\,|\/|\<|\>|\?)!sprintf("%%%2.2x", ord($1))!eg; $s =~ s! !+!g; return $s; }