perl/modules/W3C/LogValidator/lib/W3C/LogValidator CSSValidator.pm,1.20,1.21

Update of /sources/public/perl/modules/W3C/LogValidator/lib/W3C/LogValidator
In directory hutz:/tmp/cvs-serv28982/lib/W3C/LogValidator

Modified Files:
	CSSValidator.pm 
Log Message:
SOAP::Lite is having hiccups in CPAN lately, which thus breaks any installation
via CPAN of WebService::Validator::CSS::W3C, and thus the logvalidator.

Working around this issue by using the HTTP response of the CSS validator, instead
of the full SOAP output.




Index: CSSValidator.pm
===================================================================
RCS file: /sources/public/perl/modules/W3C/LogValidator/lib/W3C/LogValidator/CSSValidator.pm,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- CSSValidator.pm	4 Dec 2007 07:15:33 -0000	1.20
+++ CSSValidator.pm	5 May 2008 06:41:56 -0000	1.21
@@ -9,7 +9,7 @@
 package W3C::LogValidator::CSSValidator;
 use strict;
 use warnings;
-use WebService::Validator::CSS::W3C 0.2;
+
 
 
 require Exporter;
@@ -45,9 +45,11 @@
 	{
 		$self->{AUTH_EXT} = ".css";
 	}
+  $config{ValidatorMethod} = "HEAD" ;
   $config{ValidatorHost} = "jigsaw.w3.org" if (! exists $config{ValidatorHost});
   $config{ValidatorPort} = "80" if (!exists $config{ValidatorPort});
   $config{ValidatorString} = "/css-validator/validator" if (!exists $config{ValidatorString});
+  $config{ValidatorString} .= "?uri="; 
   # by default, report invalid documents
   $config{ShowInvalid} = "Yes" if (!exists $config{ShowInvalid});
   $config{ShowAborted} = "No" if (!exists $config{ShowAborted});
@@ -94,6 +96,12 @@
         if (@_) { $self->{VALID_SUCCESS} = shift }
                 return $self->{VALID_SUCCESS};
 }
+sub valid_head
+{
+        my $self = shift;
+        if (@_) { $self->{VALID_HEAD} = shift }
+                return $self->{VALID_HEAD};
+}
 
 
 sub HEAD_check {
@@ -195,6 +203,8 @@
         if (exists $config{MaxDocuments}) {$max_documents = $config{MaxDocuments}}                      
         else {$max_documents = 0}
 	print "Now Using the CSS Validation module...\n" if $verbose;
+	use LWP::UserAgent;
+	use URI::Escape;
 	my @uris = undef;
 	my %hits;
 	if (defined ($config{tmpfile}))
@@ -239,6 +249,7 @@
         my $intro="Here are the <census> most popular $whatweshow_str document(s) that I could find in the 
 logs for $name.";
         my $outro;
+    	my $ua = new LWP::UserAgent;
 
         @uris = $self->trim_uris(@uris);
 	my $invalid_census = 0; # number of invalid docs
@@ -253,47 +264,62 @@
 		my $uri_orig = $uri;
 		$self->new_doc();
 		$total_census++;
-                print "	processing #$total_census $uri... " if ($verbose > 1);
-		my $val = WebService::Validator::CSS::W3C->new;
-		my $cssvalidator_server=join ("", "http://",$config{ValidatorHost},":",$config{ValidatorPort}, $config{ValidatorString});
-		$val->validator_uri($cssvalidator_server);
-		$val->validate(uri => $uri);
-		$self->valid_success($val->success);
-		$self->valid($val->is_valid);
-		my @errors = $val->errors;
-		$self->{VALID_ERR_NUM} = int( @errors );
-		
-		if (! $self->valid_success)
-		{
-			print " Could not validate!" if ($verbose > 1);
-		}
-		else
-		{
-			if ($self->valid) # success, valid
-			{
-				print "Valid!" if ($verbose > 1);
-			}
-			else # success - not valid -> invalid
+        print "	processing #$total_census $uri... " if ($verbose > 1);
+		$uri = uri_escape($uri);
+		# creating the HTTP query string with all parameters
+		my $string=join ("", "http://",$config{ValidatorHost},":",$config{ValidatorPort}, $config{ValidatorString},$uri);
+		my $method = $config{ValidatorMethod};
+		my $request = new HTTP::Request("$method", "$string");
+		my $response = new HTTP::Response;
+		$response = $ua->simple_request($request);
+		if ($response->is_success) {
+		 # not an error, we could contact the server 
+			# set both valid and error number according to response
+			$self->valid($response->header('X-W3C-Validator-Status'));
+			$self->{VALID_ERR_NUM} = $response->header('X-W3C-Validator-Errors');
+			# we know the validator has been able to (in)validate if $self->valid is not NULL
+			if ( ($self->valid)) # we got an answer about validation (valid, invalid or abort)
 			{
-				printf ("Invalid, %s error(s)!",$self->valid_err_num) if ($verbose > 1);; 
+			    if ( 
+			      (($self->valid =~ /Invalid/i) and ($config{ShowInvalid} eq "Yes")) 
+			      or (($self->valid =~ /Valid/i) and ($config{ShowValid} eq "Yes")) 
+			      or (($self->valid =~ /Abort/i) and ($config{ShowAborted} eq "Yes"))
+			      )  {
+				      my @result_tmp;
+    			      push @result_tmp, $total_census;
+    			      push @result_tmp, $hits{$uri_orig};
+        			  if ($self->valid =~ /Abort/i) { push @result_tmp, "Abort"; }
+				      else { push @result_tmp, $self->valid_err_num; }
+				      push @result_tmp, $uri_orig;
+				      push @result, [@result_tmp];
+				      $invalid_census++;
+				      $last_invalid_position = $total_census;
+			    }
 			}
-		}
-		if ( ((! $self->valid_success) and ($config{ShowAborted} eq "Yes"))
-		   or (($self->valid_success) and (! $self->valid) and ($config{ShowInvalid} eq "Yes")) 
-		   or (($self->valid_success) and ($self->valid) and ($config{ShowValid} eq "Yes")) ){
-		my @result_tmp;
-		push @result_tmp, $total_census;
-		push @result_tmp, $hits{$uri_orig};
-		if (! $self->valid_success) { push @result_tmp, "Abort";}
-		else {push @result_tmp, $self->valid_err_num;}
-		push @result_tmp, $uri_orig;
-		push @result, [@result_tmp];
-		$invalid_census++;
-		$last_invalid_position = $total_census;
-		}
-		
-		print "\n" if ($verbose > 1);
+    		printf (" %s!", $self->valid) if ( ($verbose > 1) and (defined ($self->valid)));
+    		print " Could not validate (validation failed)!" if (($verbose > 1) and(!defined ($self->valid)));
+
+    		if (($verbose > 1) and ($self->valid_err_num)) # verbose or debug
+    				{printf ", %s errors!",$self->valid_err_num}
+    		}
+    		else { 
+    		  print " Could not validate (no response from validator)!" if ($verbose > 1) ;
+    		  if ($config{ShowAborted} eq "Yes") {
+    			  my @result_tmp;
+    				push @result_tmp, $total_census;
+    				push @result_tmp, $hits{$uri_orig};
+    				push @result_tmp, "Abort";
+    				push @result_tmp, $uri_orig;
+    				push @result, [@result_tmp];
+    				$invalid_census++;
+    				$last_invalid_position = $total_census;
+    			}
+    		  }
+    		print "\n" if ($verbose > 1);
 
+    		$self->valid_head($response->as_string); # for debug
+    		if ($verbose > 2) {printf "%s :\n%s", $string, $self->valid_head;} # debug
+    		sleep(1); # do not kill the validator
 
 	}
 	print "Done!\n" if $verbose;

Received on Monday, 5 May 2008 06:42:28 UTC