package WWW::Search::UrbanDictionary; use strict; use warnings; use Carp; use SOAP::Lite; use WWW::Search qw(generic_option); use WWW::SearchResult; use vars qw(@ISA $VERSION); @ISA = qw(WWW::Search); $VERSION = '0.4'; sub native_setup_search { my($self, $query) = @_; my $key = $self->{'key'}; if (! $key) { croak('No license key given to WWW::Search::UrbanDictionary!'); } $self->{'_query'} = $query; $self->{'_offset'} = 0; return 1; } sub native_retrieve_some { my $self = shift; my $key = $self->{'key'}; my $query = $self->{'_query'}; my $search = SOAP::Lite->service('http://api.urbandictionary.com/soap?wsdl'); my $results = $search->lookup($key, $query); if (! $results) { return; } if ($self->{'search_count'} && $self->{'search_count'} > 0) { return; } $self->approximate_result_count(scalar @{$results}); if ($results) { foreach my $element (@{$results}) { my $hit = WWW::SearchResult->new(); $hit->{'example'} = $element->{'example'}; $hit->url($element->{'url'}); $hit->{'author'} = $element->{'author'}; $hit->{'definition'} = $element->{'definition'}; $hit->{'word'} = $element->{'word'}; push @{$self->{'cache'}}, $hit; } } else { return; } if (scalar @{$results} < 10) { return; } $self->{'search_count'} += 1; return 1; } 1; __END__ =pod =head1 NAME WWW::Search::UrbanDictionary - Search the Urban Dictionary via SOAP =head1 SYNOPSIS use WWW::Search; my $key = 'abcdefghijklmnop1234567890'; my $search = WWW::Search->new('UrbanDictionary', key => $key); $search->native_query('emo'); while (my $result = $search->next_result() ) { print $result->{'word'} . ' - ' . $result->{'definition'} . "\n"; print $result->{'author'}, "\n"; print $result->{'example'}, "\n"; print $result->url, "\n"; print "\n"; } =head1 DESCRIPTION This class is an Urban Dictionary specialization of WWW::Search. It handles searching Urban Dictionary F using its new SOAP API F. All interaction should be done through WWW::Search objects. Note that you must register for an API account and have a valid Urban Dictionary API license key before using this module. This module reports errors via croak(). This module uses SOAP::Life to do all the dirty work. =head1 METHODS =head2 native_retrieve_some =head2 native_setup_search =head1 AUTHOR Nick Gerakines EFE =head1 COPYRIGHT Copyright (C) 2005, Nick Gerakines This module is free software; you can redistribute it or modify it under the same terms as Perl itself. =cut