blob: d0361db4ffe55ca752f6f7fdbbe40a18989422b6 (
plain) (
tree)
|
|
package intentioncloud::Model::Search;
use WebService::Google::Suggest;
use HTML::TagCloud;
use YAML::Syck;
use DateTime;
use URI::Escape;
sub search {
my ( $self, $c ) = @_;
my $search = $c->req->params->{ q } . " ";
$c->stash( query => $search, dt => DateTime->now );
$c->stash(cloud_permalink => $c->stash->{ dt }->ymd( '/' ) . '/'
. $c->req->params->{ engine } . '/'
. uri_escape( $c->req->params->{ q } ) );
my $cloud = $c->model( 'DB::Search' )
->find( { permalink => $c->stash->{ cloud_permalink } } );
if ( $cloud ) {
$c->stash( cloud => $cloud->cloud );
return;
}
if ( $c->req->params->{ engine } eq 'google' ) {
$self->google_search( $c );
}
$self->save_search( $c ) if ( $c->stash->{ cloud } );
}
sub google_search {
my ( $self, $c ) = @_;
my $cloud = HTML::TagCloud->new();
my $suggest = WebService::Google::Suggest->new();
my $suggests = 0;
eval {
foreach ( $suggest->complete( $search ) )
{
$suggests++;
if ( $_->{ results } > 0 ) {
$cloud->add( $_->{ query }, 'blah', $_->{ results } );
}
}
};
if ( $@ ) {
$c->stash( no_suggest => "the clouds seems broken" );
} elsif ( !$suggests ) {
$c->stash( no_suggest => "no suggestions :(" );
} else {
$c->stash( cloud => $cloud->html_and_css() );
}
}
sub save_search {
my ( $self, $c ) = @_;
$c->model( 'DB::Search' )->create(
{ engine => $c->req->params->{ engine },
cloud => $c->stash->{ cloud },
date_created => $c->stash->{ dt },
query => $c->req->params->{ q },
permalink => $c->stash->{ cloud_permalink },
}
);
}
1;
|