ゆーすけべー日記

はてなBlogってどーなの!?

Google Charts API を Perl から簡単に操作できるようにしたモジュール『WebService::Simple::Google::Chart』

この記事見つけて

以前紹介した「これは便利!誰でも簡単にグラフを描けるAPIがGoogleから登場!『Google Charts』」ですが、PHPから簡単に操作できるようにしたライブラリが公開されています。

Google Charts APIをPHPから簡単に操作できるようにしたライブラリ『googChart』 | IDEA*IDEA」より

同じようにGoogle Charts API を扱う Perl 版が欲しかったので、WebService::Simple(0.09以上が必須) を継承する形で「WebService::Simple::Google::Chart」というモジュールを作ってみました。

パラメータを渡すと、その Chart のURLを返してくれて(get_url)、その Chart のイメージをファイルに書き出す(render_to_file)ことができます。以下がコードサンプルです。

use WebService::Simple::Google::Chart;

my $chart = WebService::Simple::Google::Chart->new;
my $url = $chart->get_url(
    {
        chs => "250x100",
        cht => "p3",
   },
    { foo => 200, bar => 130, hoge => 70 }
);

#http://chart.apis.google.com/chart?cht=p3&chl=bar%7Cfoo%7Choge&chs=250x100&chd=t%3A33%2C50%2C18
print $url . "\n";

#一度 get_url でパラメータを渡したら、ファイル名を指定するだけで書き出せる
$chart->render_to_file("foo.png");

特徴は、get_url 及び render_to_file の第2引数に、チャートにしたいデータを ラベル名 => 値 という形のハッシュリファレンスを渡せば、自動的に割合を出してくれて URL のパラメータにする点です。 なので、最大値をみつけて、それぞれの値をその数字で割るなんてことは不要になります(なるはずです)。 第一引数はデータ以外のチャートへのパラメータを書けばOKです。

WebService::Simple は LWP::UserAgent を継承しているので、今回のファイルに書き出すという機能が簡単に実装できました。実際 Chart.pm の中身はこんな感じでファイルに保存しています。

$self->SUPER::get( $request_param , ":content_file" => $filename );

CPAN はここ(ただし、0.01 はインターフェースが違う&バグを持っているので 0.02 以上推奨)

CodeRepos はここに置いておきます。修正、突っ込み大歓迎です。

ちなみに、 Google::Chart という hanekomu さんが作っているそのものずばりのモジュールがCPANにあって coderepos にもレポジトリを移してもらいました。 が、しかし、これだとラベル表示ができなくて、対応するためにコードいじろうと手をつけてみたら、 設計までも変えてしまいかねないことに気づき、別モジュールという形で作ることにしました。ということでこれをhanekomu さんに見せたい。