Perl日記

PerlとかRubyとかPHPとかPythonとか

MVCその4.1

ちょっと続き。
CGIで動くようにtag_search.cgiを修正した。
ついでに、はてなブックマーク数の画像APIを見つけたので、使ってみる。
自分のブログに「○○users」を表示する

lib/MyHatena/Tag.pm

# 変更点
my $HATENA_USERS_API = 'http://b.hatena.ne.jp/entry/';
my $HATENA_USERS_IMG_API = 'http://b.hatena.ne.jp/entry/image/';

sub _parse_xml {
  my $class = shift;
  my ($xml_ref) = validate_pos(@_, { type => SCALARREF });
  my $parser = XML::Simple->new;

  my $xml;
  eval { $xml = $parser->XMLin($$xml_ref) };
  die $@ if $@;

  my @entries;
  for my $entry (@{$xml->{item}}) {
    push @entries, $class->new({
      title      => encode('utf8', $entry->{title}),
      link       => $entry->{link},
      users_link => $HATENA_USERS_API.$entry->{link},
      users_img  => $HATENA_USERS_IMG_API.$entry->{link},
    });
  }

  return @entries;
}

template/result.html

  [% FOREACH entry IN result -%]
  <li><a href="[% entry.link %]">[% entry.title | html %]</a><!--
  --><a href="[% entry.users_link %]"><img src="[% entry.users_img %]" style="border:0;"></a></li>
  [% END -%]

tag_search4.cgi

#!/usr/local/bin/perl
# tag_search4.cgi
use strict;
use warnings;
use CGI qw/:standard/;
use FindBin::libs;
use MyHatena::Tag;
use Template;

my $q = CGI->new;

print header( -type => 'text/html', -charset => 'utf-8' );

my ($tmpl, $vars);
if (defined $q->param('search_tag')) {
  my $query = $q->param('search_tag');
  my $result = MyHatena::Tag->search($query)
    or die "Can't search by [$query].";

  $tmpl = '/Users/rightgo09/Script/Perl/template/result.html';
  $vars = {
    result => [$result->entries],
    search_tag => $query,
  };
}
else {
  $tmpl = '/Users/rightgo09/Script/Perl/template/index.html';
  $vars = {};
}

# Rendering TT
my $template = Template->new(ABSOLUTE => 1);
$template->process($tmpl, $vars, \my $out)
  or die $template->error;

print $out;

__END__


うーん。できたのはいいけど、これすごいリクエスト飛んでるよなー。
RSSにも入ってないし、取得するんだったらこんな方法しかないんかな。