# VoilaFr.pm

# by Mikou 03/21/2000 v1.0

# mikou@spip.viewline.net



=head1 NAME



WWW::Search::VoilaFr - class for searching voila.fr



=head1 SYNOPSIS



    require WWW::Search;

    $search = new WWW::Search('VoilaFr');



=head1 DESCRIPTION



This class is a specialization of WWW::Search for voila.fr.

A french search engine.

All searchs are based on and ONLY on gui_query function.



This class exports no public interface; all interaction should be done

through WWW::Search objects.



=head1 USAGE EXAMPLE



  use WWW::Search;



  my $oSearch = new WWW::Search('VoilaFr');

  $oSearch->maximum_to_retrieve(100);



  #$oSearch ->{_debug}=1;



  my $sQuery = WWW::Search::escape_query("bretagne");

  $oSearch->gui_query($sQuery);



  while (my $oResult = $oSearch->next_result())

  {

        print $oResult->url,"\t",$oResult->title,"\n";

  }





=head1 AUTHOR



C<WWW::Search::VoilaFr> is written by Mikou,

mikou@spip.viewline.net



=cut









#####################################################################



package WWW::Search::VoilaFr;



require Exporter;

@EXPORT = qw();

@EXPORT_OK = qw();

@ISA = qw(WWW::Search Exporter);



#use strict vars;

use Carp ();

use HTML::Parse qw(parse_html); 

use WWW::Search(qw( generic_option strip_tags unescape_query ));

require WWW::SearchResult;



my($debug) = 0;

my ($engine) = "voila.fr";







sub gui_query

{

  #http://search.voila.fr/voila?dd=&kw=myword1+myword2&dt=*

  my ($self, $sQuery, $rh) = @_;

  $self->{'search_base_url'} ||= 'http://search.voila.fr';

  $self->{_options} = {

                       'search_url' => $self->{'search_base_url'} .'/voila',

                      };

  return $self->native_query($sQuery, $rh);

} # gui_query          







#private

sub native_setup_search

{

	my($self, $native_query, $native_options_ref) = @_; 

	print STDERR " *   ${engine}::native_setup_search()\n" unless $debug==0;



	$self->user_agent('zemikou'); 

	if (!defined($self->{_options})) 

	{

	     $self->{_options} = 

		{

            	'search_url' => 'http://search.voila.fr'.'/voila',

		#'_debug'=> '1'

        	} 

	}



	$self->{_base_url} = $self->{_next_url} = $self->{_options}{'search_url'} .

	"?dd=&kw=" . $native_query .

	"&dt=*" . $options; 

	print STDERR $self->{_base_url} . "\n" if ($self->{_debug}); 

}







# private

sub native_retrieve_some

{

 	my ($self) = @_;      

 

	my($hits_found) = 0;



 	#fast exit if already done

	return undef if (!defined($self->{_next_url}));    



print STDERR "WWW::Search::${engine}::native_retrieve_some: fetching " . $self->{_next_url} . "\n" if ($self->{_debug});



	my($response) = $self->http_request('GET', $self->{_next_url});

	$self->{response} = $response;



print STDERR "WWW::Search::${engine} GET  $self->{_next_url} return ",$response->code,"\n"  if ($self->{_debug});

  	if (!$response->is_success) 

	{

       	 	return undef;

   	};



	$self->{_next_url} = undef; 



	my $ht_tree = parse_html($response->content);

	my $base = $response->base;

	my($linkpair);

	my ($hit)=0;

	foreach $linkpair (@{$ht_tree->extract_links('a')})

	{                                 

		my($link,$elem) = @$linkpair;           

       		my $MyAsHTML=$elem->as_HTML();



		if ($hit != 0)

		{	

			my $title;

			$title=strip_tags($elem->as_text());

			$hit->add_url($link);

			$hit->title($title);

			push(@{$self->{cache}}, $hit);	

			print STDERR "Adding ",$hit->url,"\t",$title,"\n" unless $debug==0;

			$hit=0;

			$hits_found++;



		}



        	print "link=$link\n" unless $debug==0;



        	#Next Button ???

        	if ($MyAsHTML =~ m/src=\"\/Icons\/Search\/suite.gif\"/ )

        	{

                	print STDERR "Next page is=",$link,"\n" unless $debug==0;

			$self->{_next_url} = $link;

			goto fini;

        	}



        	#http://www.voila.fr/cgi_view?file=www.bretagne-online.tm.fr/telegram/index.html&words=bretagne#marker

		#signale une url dans l'element suivant

        	if ($link =~ m/http\:\/\/www\.voila\.fr\/cgi_view\?file\=/ )

        	{

                	#my $MyRealLink=$link;

                	#remove the start of url

                	#$MyRealLink =~ s/http\:\/\/www\.voila\.fr\/cgi_view\?file\=//;

                	#remove end of url until &

                	#print $MyRealLink,"\n" unless $debug==0;

                	#my $car="";

                	#while ($car ne "&")

                	#{

                       	#	$car = chop($MyRealLink);

                	#}

			#$MyRealLink="http://".$MyRealLink;



			$hit = new WWW::SearchResult;

			#$hit->add_url($MyRealLink);

			#on va recuperer le titre

			#$hit->title("mon titre qu'il est bidon");

        	}

    	}

fini:    

	return $hits_found;

}

