blob: 5a27b2b52c9e3f8217f812ac78e8975dd396c546 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
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;
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 ) = @_;
$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;
|