| WWW-Google-Calculator documentation | Contained in the WWW-Google-Calculator distribution. |
WWW::Google::Calculator - Perl interface for Google calculator
use WWW::Google::Calculator;
my $calc = WWW::Google::Calculator->new;
print $calc->calc('1+1'); # => 1 + 1 = 2
print $calc->calc('300kbps in KB/s'); # => 300 kbps = 37.5 kilobytes / second
This module provide simple interface for Google calculator.
http://www.google.com/help/calculator.html
create new instance
calculate $query using by Google and return result.
return undef when something error occurred. (and use $self->error to get last error message)
return last error
Daisuke Murase <typester@cpan.org>
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this module.
| WWW-Google-Calculator documentation | Contained in the WWW-Google-Calculator distribution. |
package WWW::Google::Calculator; use strict; use warnings; use base qw/Class::Accessor::Fast/; use WWW::Mechanize; use HTML::TokeParser; use URI; our $VERSION = '0.07'; __PACKAGE__->mk_accessors(qw/mech error/);
sub new { my $self = shift->SUPER::new(@_); $self->mech( do { my $mech = WWW::Mechanize->new; $mech->agent_alias('Linux Mozilla'); $mech; } ); $self; }
sub calc { my ( $self, $query ) = @_; my $url = URI->new('http://www.google.com/search'); $url->query_form( q => $query ); $self->mech->get($url); if ($self->mech->success) { return $self->parse_html( $self->mech->content ); } else { $self->error( 'Page fetching failed: ' . $self->mech->res->status_line ); return; } }
sub parse_html { my ( $self, $html ) = @_; $html =~ s!<sup>(.*?)</sup>!^$1!g; $html =~ s!×!*!g; my $res; my $p = HTML::TokeParser->new( \$html ); while ( my $token = $p->get_token ) { next unless ( $token->[0] || '' ) eq 'S' && ( $token->[1] || '' ) eq 'img' && ( $token->[2]->{src} || '' ) eq '/images/icons/onebox/calculator-40.gif'; $p->get_tag('h2'); $res = $p->get_trimmed_text('/h2'); return $res; # stop searching here } $res; }
1;