この記事見つけて

以前紹介した「これは便利!誰でも簡単にグラフを描ける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 さんに見せたい。

コメント(4)

初めて訪れました!!
しばらくニートでも、、、、
と思ったとたん社長になられた、
面白そうな方ですね!!

鎌倉は私の散歩道でした。
今は愛媛在住です。
ゆうすけさんのブログを
お散歩コースにさせてください。

コードサンプル通りで動作確認しようとしたら、

Odd number of elements in hash assignment at C:/xampp/perl/site/lib/WebService/Simple.pm line 119.

というエラーメッセージが出ます。

WebService::Simple::Google::Chart VERSION = '0.04'
WebService::Simple VERSION = '0.15'

の組み合わせです。

動作させる為に何か確認出来る方法が有れば教えて下さい。

上記エラーメッセージが出て、

print $url . "\n";

よるURLが出力されていないので、プログラムが途中で止まっていると思っていたのですが、その後の処理

$chart->render_to_file("foo.png");

の結果で、foo.pngが出来ている事に気づきました。

不思議です。

バグ修正された0.05を使ってみました。
PPMでCPANリポジトリをサーチしてもまだ0.05は見つからなかったので、CPANから直接ダウンロードし、Chart.pmのみを差し替え、上記コードサンプルが正常に動作する事を確認いたしました。
修正ありがとうございました。

コメントする

プロフィール

yusukebe

ゆーすけべー / yusukebe
Yusuke Wada
1981/12/23 生
天然パーマ Erogeek
HP Twitter mixi はてブ
yusuke (at) kamawada.com

最近10件のアクション

最近のブログ記事

閉じる