東京電力電力供給状況API と Google Chart API で 電力使用状況グラフ
前回は「Yahoo!電力使用状況API と Google Chart API で 電力使用状況グラフ」というエントリを書きました。
今回は「Yahoo!電力使用状況API」ではなく、@ssci さんが公開されている「東京電力電力供給状況API」を使ってみました。
プラスで、前回は画像として出力していましたが、今回はHTMLで出力するようにしてブログパーツ的な使い方が出来るようにしてみました。
作成にあたっては、「PHP言語とWebAPIを利用した自作ブログパーツの紹介」と 「PHP5.1で、JSONを使う(PHP5.2未満編) - Beyond prep」を参考にさせていただきました。
使用した物(Web API)
「電力使用状況グラフ」を作成するのに、
を使いました。
「Google Chart API」は言わずと知れた Google のグラフ表示のためのAPIです。
「東京電力電力供給状況API」は、@ssci さん が公開している電力の最大供給量と使用量を取得できるAPIです。
電力使用状況API(Yahoo!デベロッパーネットワーク) は データをXMLで受け取っていましたが、東京電力電力供給状況API では JSON 形式で提供されています。
東京電力電力供給状況API
PHP5.1系では json_decode が使えない
PHP で JSON をパースするときは「json_decode」が便利なのですが、PHP5.2.0 以上からしか使えません。
CentOSなどで公式に提供されているのはPHP5.1系のため、今回は「Zend_Json」を使ってみました。
「Zend_Json」を使うに当たっては、PHP5.1で、JSONを使う(PHP5.2未満編) - Beyond prep を参考にさせていただきました。
Zend_Json をインストール
ということで、さっそく「Zend_Json」をインストールします。
手順としては、
まず、Zend Frameworkをダウンロードする。Zendは一つ一つのライブラリが独立しているので、必要なものだけ、必要なときに使えばよいようになっている。
そこで、ダウンロードしたライブラリの中から「lib/Zend/Json」フォルダと「lib/Zend/Json.php」ファイルを抜き出して、適当なフォルダにコピー。で、適当にincludeして、Json.phpを使えるようにそれば以下の方法でjson_decodeと同じ機能をもったファンクションを呼び出すことが出来る
PHP5.1で、JSONを使う(PHP5.2未満編) - Beyond prep
になります。
実際のインストールするときのコマンドは以下のようになるかと思います。
$ wget http://framework.zend.com/releases/ZendFramework-1.11.5/ZendFramework-1.11.5.zip $ unzip ZendFramework-1.11.5.zip $ mkdir $PHP_CLASSPATH/Zend $ mv Zend/Json.php $PHP_CLASSPATH/Zend/ $ mv Zend/Json $PHP_CLASSPATH/Zend/ $ rm -rf ZendFramework-1.11.5
ひとつ注意点としては、「Json.php」などのファイルからの別ファイルへの参照が「Zend/〇〇〇.php」の形で記述されているので、PHPのパスが通っているディレクトリ以下に「Zendディレクトリ」を作成して、そこに Zend_Json 関連のファイルを格納する必要があります。
HTML で出力 & iframe で表示
「PHP言語とWebAPIを利用した自作ブログパーツの紹介」を参考にさせていただき、ブログパーツ的にしてみました。
前回は、以下のように画像として出力していましたが、
<?php header("Content-type: image/png"); echo $response;
今回は、以下のようにして HTML として出力させています。
<?php echo <<<HTML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja">
呼び出し側の HTML では以下のようにして「iframe」を使用して、作成した PHP ファイルを実行してグラフを表示させます。
ほげほげ<br /> <iframe src="json_parts.php" frameborder="0" scrolling="no" width="300" height="500"></iframe> hogehoge
サンプルコード(全部)
<?php // Zend Framework の Json ライブラリ のインクルード // ※PHP5.2.00以上では「json_decode」が使用可のため不要 require_once("Zend/Json.php"); // URLからデータ(xmlなど)を取得 function cUrl($request){ $session = curl_init($request); curl_setopt($session, CURLOPT_HEADER, false); curl_setopt($session, CURLOPT_RETURNTRANSFER, true); // プロキシの認証が必要な場合は以下をコメントアウトして設定 # curl_setopt($session, CURLOPT_PROXY, 'your-proxy:portno'); # curl_setopt($session, CURLOPT_PROXYUSERPWD, 'user_id:password'); $response = curl_exec($session); curl_close($session); return $response; } // 東京電力電力供給状況API からのJSON取得→配列に変換 // リクエストURL:http://tepco-usage-api.appspot.com/latest.json function tepcoApiLatest(){ $url = "http://tepco-usage-api.appspot.com/latest.json"; $json = cUrl($url); return Zend_Json::decode($json); // PHP5.2.0以上の場合は以下で実装可能 // return json_decode($json); } // Google Chart Tools API 用の URL生成 // 円グラフ function googleChartApi($capacity_rate, $usage_rate, $capacity_zan, $usage ){ return 'http://chart.apis.google.com/chart?chs=300x225' . '&cht=p&chd=t:' . ceil($capacity_rate) . ',' . ceil($usage_rate) . '&chdl=%E6%AE%8B%E4%BE%9B%E7%B5%A6%E8%83%BD%E5%8A%9B|%E4%BD%BF%E7%94%A8%E9%87%8F' . '&chdlp=t&chl=' . ceil($capacity_zan) . 'Kw|' . ceil($usage) . 'Kw' . '&chtt=%E6%9D%B1%E4%BA%AC%E9%9B%BB%E5%8A%9B%E3%81%AE%E9%9B%BB%E5%8A%9B%E4%BD%BF%E7%94%A8%E7%8A%B6%E6%B3%81'; } // 東京電力電力供給状況API へのリクエスト $tepco = tepcoApiLatest(); //残供給量 $capacity_zan = $tepco['capacity'] - $tepco['usage']; //使用率 $usage_rate = round($tepco['usage'] / $tepco['capacity'] * 100); //残供給率 $capacity_rate = 100 - $usage_rate; // Google Chart Tools API の URL生成 $chartUrl = googleChartApi($capacity_rate, $usage_rate, $capacity_zan, $tepco['usage']); // HTML出力用のデータセット $site['title'] = "電力使用量サンプル"; $site['mojicode'] = "UTF-8"; $site['bgcolor'] = "#fff"; $site['usage_rate'] = $usage_rate; $site['usage'] = $tepco['usage']; $site['capacity'] = $tepco['capacity']; $site['charturl'] = $chartUrl; // HTMLの出力 echo <<<HTML <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset={$site['mojicode']}"> <title>{$site['title']}</title> </head> <body bgcolor="{$bgcolor}"> <span style="font-size:{$fontsize};"> <p>使用率:{$site['usage_rate']}</p> <p>使用量:{$site['usage']}</p> <p>供給能力 :{$site['capacity']}</p> <img src="{$site['charturl']}"> </span> <body></html> HTML;
今回参考にしたページ
東京電力電力供給状況API
http://tepco-usage-api.appspot.com/
PHP言語とWebAPIを利用した自作ブログパーツの紹介
http://kommy.s254.xrea.com/parts/
PHP5.1で、JSONを使う(PHP5.2未満編) - Beyond prep
http://www.b-prep.com/blog/?p=238
Zend_Json - わくわく技術ランド.htm
http://wadslab.net/wiki/index.php?Zend_Json