summaryrefslogblamecommitdiff
path: root/lib/intentioncloud/Model/Search.pm
blob: a3a36c835c492d65bb8b6c2832c7ddd52250db73 (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 ) = @_;
    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 $search  = $c->req->params->{ q } . " ";
    $c->stash( query => $search );

    my $suggests = 0;
    foreach ( $suggest->complete( $search ) ) {
        $suggests++;
        if ( $_->{ results } > 0 ) {
            $cloud->add( $_->{ query }, 'blah', $_->{ results } );
        }
    }
    if ( $suggests ) {
        $c->stash( cloud => $cloud->html_and_css());
    } else {
        $c->stash( no_suggest => "no suggestions :(" );
    }
}

sub save_search {
    my ( $self, $c ) = @_;
    my $dt = DateTime->now;

    my $permalink
        = $dt->ymd( '/' ) . '/'
        . $c->req->params->{ engine } . '/'
        . uri_escape( $c->req->params->{ q } );

    $c->model( 'DB::Search' )->create(
        {   engine       => $c->req->params->{ engine },
            cloud        => $c->stash->{ suggest },
            date_created => $dt,
            query        => $c->req->params->{ q },
            permalink    => $permalink,
        }
    );
}

1;