package App::ZofCMS::Plugin::GooglePageRank; use warnings; use strict; use WWW::Google::PageRank; use base 'App::ZofCMS::Plugin::Base'; our $VERSION = '0.0103'; sub _key { 'plug_google_page_rank' } sub _defaults { return ( timeout => 20, agent => 'Opera 9.6', host => 'suggestqueries.google.com', cell => 't', key => 'plug_google_page_rank', # uri => 'obtain from query', ); } sub _do { my ( $self, $conf, $t, $q, $config ) = @_; if ( ref $conf->{uri} eq 'CODE' ) { $conf->{uri} = $conf->{uri}->( $t, $q, $config ); } $conf->{uri} = 'http://' . $ENV{HTTP_HOST} . $ENV{REQUEST_URI} unless defined $conf->{uri} and length $conf->{uri}; my $pr = WWW::Google::PageRank->new( timeout => $conf->{timeout}, agent => $conf->{agent}, host => $conf->{host}, ); if ( ref $conf->{uri} eq 'ARRAY' ) { for ( @{ $conf->{uri} } ) { unless ( m|https?://| ) { $_ = "http://$_"; } my $rank = $pr->get($_); push @{ $t->{ $conf->{cell} }{ $conf->{key} } }, +{ rank => defined $rank ? $rank : 'N/A', uri => $_, }; } } else { unless ( $conf->{uri} =~ m|https?://| ) { $conf->{uri} = "http://$conf->{uri}"; } my $rank = $pr->get( $conf->{uri} ); $t->{ $conf->{cell} }{ $conf->{key} } = defined $rank ? $rank : 'N/A'; } } 1; __END__ =head1 NAME App::ZofCMS::Plugin::GooglePageRank - Plugin to show Google Page Ranks =head1 SYNOPSIS plugins => [ { GooglePageRank => 200 }, ], # all defaults and URI is set to the current page plug_google_page_rank => {}, # all options set plug_google_page_rank => { uri => 'zoffix.com', timeout => 20, agent => 'Opera 9.6', host => 'suggestqueries.google.com', cell => 't', key => 'plug_google_page_rank', }, =head1 DESCRIPTION The module is a plugin for L that provides means to obtain Google Page Rank. This documentation assumes you've read L, L and L =head1 FIRST-LEVEL ZofCMS TEMPLATE AND MAIN CONFIG FILE KEYS =head2 C plugins => [ qw/GooglePageRank/ ], B. You need to add the plugin to list of plugins to execute. =head2 C plug_google_page_rank => { uri => 'zoffix.com', timeout => 20, agent => 'Opera 9.6', host => 'suggestqueries.google.com', cell => 't', key => 'plug_google_page_rank', }, plug_google_page_rank => { my ( $t, $q, $config ) = @_; return { uri => 'zoffix.com', timeout => 20, agent => 'Opera 9.6', host => 'suggestqueries.google.com', cell => 't', key => 'plug_google_page_rank', }; }, B. Takes a hashref or a subref as a value. If subref is specified, its return value will be assigned to C as if it was already there. If sub returns an C, then plugin will stop further processing. The C<@_> of the subref will contain (in that order): ZofCMS Tempalate hashref, query parameters hashref and L object. The C first-level key can be set in either (or both) ZofCMS Template and Main Config File files. If set in both, the values of keys that are set in ZofCMS Template take precedence. Possible keys/values are as follows: =head3 C uri => 'zoffix.com', uri => [ 'zoffix.com', 'haslayout.net', 'http://zofdesign.com', ], uri => sub { my ( $t, $q, $config ) = @_; }, B. Takes a string, a coderef or an arrayref of strings each of which would specify the page(s) for which to obtain Google Page Rank. If the value is a coderef, then it will be exectued and its value will be assigned to C. The C<@_> will contain (in that order): ZofCMS Template hashref, query parameters hashref, L object. B if not specified, then the URI of the current page will be calculated. Note that this may depend on the server and is made up as: C<< 'http://' . $ENV{HTTP_HOST} . $ENV{REQUEST_URI} >> =head3 C timeout => 20, B. Takes a positive integer as a value. Specifies a Page Rank request timeout in seconds. B C<20> =head3 C agent => 'Opera 9.6', B. Takes a string as a value that specifies the User-Agent string to use when making the requests. B C<'Opera 9.6'> =head3 C host => 'suggestqueries.google.com', B. Specifies which google host to use for making requests. B C (B if all your queries failing try to set this on to C) =head3 C cell => 't', B. Specifies the first-level key in ZofCMS Template hashref into which to store the result. Must point to an C or a hashref. B C =head3 C key => 'plug_google_page_rank', B. Specifies the second-level key inside C first-level key into which to put the results. B C =head1 OUTPUT Depending on whether the C argument was set to a string (or not set at all) or an arrayref the output will be either a string indicating page's rank or an arrayref of hashrefs - enabling you to use a simple C<< >>, each of the hashrefs will contain two keys: C and C - the rank of the page referenced by that URI. If there was an error while obtaining the rank (i.e. request timeout) the rank will be shown as string C<'N/A'>. =head2 EXAMPLE DUMP 1 plug_google_page_rank => { uri => [ 'zoffix.com', 'haslayout.net', 'http://zofdesign.com', 'yahoo.com', ], }, 't' => { 'plug_google_page_rank' => [ { 'rank' => '3', 'uri' => 'http://zoffix.com' }, { 'rank' => '3', 'uri' => 'http://haslayout.net' }, { 'rank' => '3', 'uri' => 'http://zofdesign.com' }, { 'rank' => '9', 'uri' => 'http://yahoo.com' } ] =head2 EXAMPLE DUMP 2 plug_google_page_rank => { uri => 'zoffix.com', }, 't' => { 'plug_google_page_rank' => '3' } =head2 EXAMPLE DUMP 3 # URI became http://zcms/ which is a local address and not pageranked plug_google_page_rank => {}, 't' => { 'plug_google_page_rank' => 'N/A' } =head1 AUTHOR 'Zoffix, C<< <'zoffix at cpan.org'> >> (L, L, L) =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc App::ZofCMS::Plugin::GooglePageRank You can also look for information at: =over 4 =item * RT: CPAN's request tracker L =item * AnnoCPAN: Annotated CPAN documentation L =item * CPAN Ratings L =item * Search CPAN L =back =head1 COPYRIGHT & LICENSE Copyright 2009 'Zoffix, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut