# Movable Type plugin for displaying del.icio.us tags. # package MT::Plugin::DeliciousTags; use strict; use Jcode; use Encode qw(encode); use Net::Delicious; use URI::Escape; use MT::Template::Context; my $plugin; eval { require MT::Plugin; $plugin = new MT::Plugin({ name => 'Delicious Tags', description => 'A plugin for importing and displaying your del.icio.us tags.', author_name => 'Takeshi Ohno', author_link => 'http://www.nitoka.net/', version => '0.1' }); MT->add_plugin($plugin); }; MT::Template::Context->add_container_tag(DeliciousTags => \&tags); MT::Template::Context->add_tag(DeliciousTag => \&tag); MT::Template::Context->add_tag(DeliciousTagURL => \&tag_url); MT::Template::Context->add_tag(DeliciousTagCount => \&tag_count); MT::Template::Context->add_tag(DeliciousTagSize => \&font_size); sub tags { my ($ctx, $args) = @_; my $user = $args->{user} || 'nitoka'; my $pass = $args->{pass} || 'nitoka429'; return $ctx->error("'user' and 'pass' option must be specified") unless $user && $pass; my $sort_by = $args->{sort_by} || 'tag'; my $sort_order = $args->{sort_order} || 'ascend'; my $lastn = $args->{lastn} || 0; my $del = Net::Delicious->new({ user => $user, pswd => $pass }); my @tags = $del->tags(); @tags = sort { $a->count() <=> $b->count() } @tags if $sort_by eq 'count'; @tags = reverse @tags if $sort_order eq 'descend'; my @res; my $builder = $ctx->stash('builder'); my $tokens = $ctx->stash('tokens'); my $i = 0; foreach (@tags) { last if $lastn && $i >= $lastn; my $ss = $_->tag(); $ss = encode("UTF-8", $ss); local $ctx->{__stash}{'DeliciousTag'} = $ss; local $ctx->{__stash}{'DeliciousTagCount'} = $_->count(); $ss = uri_escape($ss); local $ctx->{__stash}{'DeliciousTagURL'}= "http://del.icio.us/$user/".$ss; local $ctx->{__stash}{'DeliciousTagSize'} = _font_size( $_->count() ); defined(my $out = $builder->build($ctx, $tokens)) or return $ctx->error($ctx->errstr); push @res, $out; $i++; } my $glue = $args->{glue} || ''; join $glue, @res; } sub tag { $_[0]->stash('DeliciousTag') || ''; } sub tag_url { $_[0]->stash('DeliciousTagURL') || 0; } sub tag_count { $_[0]->stash('DeliciousTagCount') || 0; } sub font_size { $_[0]->stash('DeliciousTagSize') || 0; } sub _font_size { my $cnt = shift; my $size; if( $cnt > 20 ){ $size = 'font-size: 30pt;'; } else{ $cnt = $cnt + 8; $size = 'font-size: '.$cnt.'pt;'; } return $size; } 1; __END__ how to use:
  1. <$MTDeliciousTag$>(<$MTDeliciousTag$>)