この記事見つけて
以前紹介した「これは便利!誰でも簡単にグラフを描ける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 さんに見せたい。
トラックバック(0)
このブログ記事を参照しているブログ一覧: Google Charts API を Perl から簡単に操作できるようにしたモジュール『WebService::Simple::Google::Chart』
このブログ記事に対するトラックバックURL: http://yusukebe.com/mt/mt-tb.cgi/2408




初めて訪れました!!
しばらくニートでも、、、、
と思ったとたん社長になられた、
面白そうな方ですね!!
鎌倉は私の散歩道でした。
今は愛媛在住です。
ゆうすけさんのブログを
お散歩コースにさせてください。
コードサンプル通りで動作確認しようとしたら、
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のみを差し替え、上記コードサンプルが正常に動作する事を確認いたしました。
修正ありがとうございました。