use MT::Template::Context; use XML::RSS; use LWP::Simple qw(get); MT::Template::Context->add_container_tag(TopHits => \&tophits); MT::Template::Context->add_tag(TopHitsTitle => sub { my $ctx = shift; $ctx->stash('title'); }); MT::Template::Context->add_tag(TopHitsURL => sub { my $ctx = shift; $ctx->stash('url'); }); MT::Template::Context->add_tag(TopHitsDesc => sub { my $ctx = shift; $ctx->stash('description'); }); sub tophits { my $ctx = shift; my $args = shift; my $count = 10; if(exists $args->{'lastn'}) { $count = $args->{'lastn'}; } my $res = ''; my $builder = $ctx->stash('builder'); my $tokens = $ctx->stash('tokens'); my $feed = "http://www.picdiary.com/~mattb/misc/hackdiary_hits.rss"; my $rdf = get($feed); my $parser = new XML::RSS; $parser->parse($rdf); my $i = 0; foreach my $item (@{$parser->{'items'}}) { if($i < $count) { $ctx->stash('title',$item->{'title'}); $ctx->stash('url',$item->{'link'}); $ctx->stash('description',$item->{'description'}); defined(my $out = $builder->build($ctx, $tokens)) or return $ctx->error($ctx->errstr); $res .= $out; } $i++; } return $res; }