適当な思いつきで書くブログ

UbuntuやPerlやJavaScriptやVimやZshやShellScriptやMySQLと戯れている中で適当な思いつきでやってみたことを書いています。

めっきり春だし今日からPerlを始めました

いきさつとか理由とかは暇なときに書きます。とりあえず作ったものを晒します。

テーマ:CPANを使ってみよう

あちらでもCPAN、こちらでもCPANな感じなのでCPANを使ってみます。

XML::TreePPでAmazonAPIのXMLをparseして、HTML::TwmplateHTML::Template使ってHTMLで出力する

最近何かと話題のAmazonの商品をいじってみます。


使ったCPANモジュールです

Amazon APIに商品(デモ&ソースでは"EeePC")のASINをキーにリクストして、返ってきたXMLXML::TreePPで配列に変換します。で、その配列から商品名やサムネイル情報をHTML::Templateを使ってHTMLとして出力します。

ちなみにAmazonから返ってくるXMLはこんな感じになります。

できました

CPAN使ったら簡単に作れました。

デモはこちら

今後の予定

これをベースになんだかんだ機能を追加していきたいと思います。

今後のお願い

変なところあったらコメントください。お願いします><


ソースは下記


Perl(20080312.pl)

#!/usr/bin/perl

use strict;
use CGI;
use XML::TreePP;
use HTML::Template;

my $tpp = XML::TreePP->new();
my $tree = $tpp->parsehttp(GET => "http://webservices.amazon.co.jp/onca/xml?ResponseGroup=Medium&Service=AWSECommerceService&AWSAccessKeyId=/*あなたのAmazonアクセスキー*/Operation=ItemLookup&ItemId=B0011YTFQO");
my $item = $tree->{ItemLookupResponse}->{Items}->{Item};

my $template = HTML::Template->new(filename => '20080312.tmpl');

$template->param(TITLE => $item->{ItemAttributes}->{Title});
$template->param(LINK => "http://www.amazon.co.jp/exec/obidos/ASIN/" . $item->{ASIN} . "/tekiomo-22/ref=nosim/");
$template->param(IMAGE => $item->{MediumImage}->{URL});
$template->param(DESCRIPTION => $item->{EditorialReviews}->{EditorialReview}->{Content});
$template->param(PRICE => $item->{OfferSummary}->{LowestNewPrice}->{FormattedPrice});

print "Content-Type: text/html\n\n", $template->output;

Template(20080312.tmpl)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><TMPL_VAR NAME=TITLE></title>
</head>
<body>
<h1><a href="<TMPL_VAR NAME=LINK>" title="<TMPL_VAR NAME=TITLE>をAmazonで購入する"><TMPL_VAR NAME=TITLE></a></h1>
<a href="<TMPL_VAR NAME=LINK>" title="<TMPL_VAR NAME=TITLE>をAmazonで購入する"><img src="<TMPL_VAR NAME=IMAGE>" alt="<TMPL_VAR NAME=TITLE>" /></a>
<dl>
  <dt>price</dt>
  <dd><TMPL_VAR NAME=PRICE></dd>
  <dt>description</dt>
  <dd><TMPL_VAR NAME=DESCRIPTION></dd>
</dl>

</body>
</html>