summaryrefslogblamecommitdiff
path: root/lib/intentioncloud/Model/Search.pm
blob: d0361db4ffe55ca752f6f7fdbbe40a18989422b6 (plain) (tree)
1
2
3
4
5
6
7
8
9
10









                                      



                                                       
                                                                    








                                                                  










                                                         

                     






                                                                      
         



                                                             
                                                       

                                                     




                          


                                                        
                                                 
                                              
                                                   
                                                           




         
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;