# # $Id: Search.pm 9 2008-04-29 21:17:12Z esobchenko $ package REST::Google::Search; use strict; use warnings; use version; our $VERSION = qv('1.0.8'); use constant { WEB => 'http://ajax.googleapis.com/ajax/services/search/web', VIDEO => 'http://ajax.googleapis.com/ajax/services/search/video', NEWS => 'http://ajax.googleapis.com/ajax/services/search/news', LOCAL => 'http://ajax.googleapis.com/ajax/services/search/local', IMAGES => 'http://ajax.googleapis.com/ajax/services/search/images', BOOKS => 'http://ajax.googleapis.com/ajax/services/search/books', BLOGS => 'http://ajax.googleapis.com/ajax/services/search/blogs', PATENT => 'http://ajax.googleapis.com/ajax/services/search/patent', }; require Exporter; require REST::Google; use base qw/Exporter REST::Google/; our @EXPORT_OK = qw/WEB VIDEO NEWS LOCAL IMAGES BOOKS BLOGS PATENT/; __PACKAGE__->service( WEB ); sub responseData { my $self = shift; return undef unless defined $self->{responseData}; return bless $self->{responseData}, 'REST::Google::Search::Data'; } package # hide from CPAN REST::Google::Search::Data; sub results { my $self = shift; if ( wantarray ) { return map { bless $_, $_->{GsearchResultClass} } @{ $self->{results} }; } [ map { bless $_, $_->{GsearchResultClass} } @{ $self->{results} } ]; } sub cursor { my $self = shift; return bless $self->{cursor}, 'REST::Google::Search::Cursor'; } package # hide from CPAN REST::Google::Search::Cursor; use base qw/Class::Accessor/; { my @fields = qw( moreResultsUrl currentPageIndex ); __PACKAGE__->mk_ro_accessors( @fields ); } sub estimatedResultCount { my $self = shift; my $count = $self->{estimatedResultCount}; defined $count ? $count : 0; } sub pages { my $self = shift; my $pages = $self->{pages} || []; if (wantarray) { return map { bless $_, 'REST::Google::Search::Pages' } @{ $pages }; } [ map { bless $_, 'REST::Google::Search::Pages' } @{ $pages } ]; } package # hide from CPAN REST::Google::Search::Pages; use base qw/Class::Accessor/; { my @fields = qw( start label ); __PACKAGE__->mk_ro_accessors( @fields ); } # # Search Result Classes # package # hide from CPAN GwebSearch; use base qw/Class::Accessor/; { my @fields = qw( unescapedUrl url visibleUrl title titleNoFormatting content cacheUrl ); __PACKAGE__->mk_ro_accessors( @fields ); } package # hide from CPAN GvideoSearch; use base qw/Class::Accessor/; { my @fields = qw( title titleNoFormatting content url published publisher duration tbWidth tbHeight tbUrl playUrl author viewCount rating ); __PACKAGE__->mk_ro_accessors( @fields ); } package # hide from CPAN GnewsSearch; use base qw/Class::Accessor/; { my @fields = qw( title titleNoFormatting unescapedUrl url clusterUrl content publisher location publishedDate relatedStories image language ); __PACKAGE__->mk_ro_accessors( @fields ); } package # hide from CPAN GlocalSearch; use base qw/Class::Accessor/; { my @fields = qw( title titleNoFormatting url lat lng streetAddress city region country phoneNumbers addressLines ddUrl ddUrlToHere ddUrlFromHere staticMapUrl listingType content ); __PACKAGE__->mk_ro_accessors( @fields ); } package # hide from CPAN GimageSearch; use base qw/Class::Accessor/; { my @fields = qw( title titleNoFormatting unescapedUrl url visibleUrl originalContextUrl width height tbWidth tbHeight tbUrl content contentNoFormatting ); __PACKAGE__->mk_ro_accessors( @fields ); } package # hide from CPAN GbookSearch; use base qw/Class::Accessor/; { my @fields = qw( title titleNoFormatting unescapedUrl url authors bookId publishedYear pageCount thumbnailHtml ); __PACKAGE__->mk_ro_accessors( @fields ); } package # hide from CPAN GblogSearch; use base qw/Class::Accessor/; { my @fields = qw( title titleNoFormatting postUrl content author blogUrl publishedDate ); __PACKAGE__->mk_ro_accessors( @fields ); } package # hide from CPAN GpatentSearch; use base qw/Class::Accessor/; { my @fields = qw( title titleNoFormatting content unescapedUrl url applicationDate patentNumber patentStatus assignee tbUrl ); __PACKAGE__->mk_ro_accessors( @fields ); } 1;