hogehoge foobar Blog Style Beta

Web,Mac,Linux,JavaScript,Perl,PHP,RegExp,Git,Vim,Redmineなど技術的なことのメモや、ちょっと便利そうなものの紹介をしています。

Yahoo!電力使用状況API と Google Chart API で 電力使用状況グラフ

Yahoo!のトップページに表示されていた「電力使用状況グラフ」を自分でも作成してみました。

作成にあたっては、「WebAPIを駆使して東京電力使用状況メーターを作る!(Perl版とJavaScript版)」と 「東京電力使用状況メーターをヤフーのAPIとGoogle Chartで作る方法 ? Mu ムジログ」を参考にさせていただきました。

使用した物(Web API)

「電力使用状況グラフ」を作成するのに、

を使いました。

Google Chart API」は言わずと知れた Google のグラフ表示のためのAPIです。
電力使用状況API(Yahoo!デベロッパーネットワーク)」は、Yahoo! が公開している電力の最大供給量と使用量を取得できるAPIです。
現在は東京電力管轄内のデータを取得できるようです。
電力使用状況API」の使用には事前に「アプリケーションID」の取得が必要になります。

また「電力使用状況API」は、期間限定API だそうなので、突然サービスが終了する可能性もあるようです。(終了日は未定だそうです。)
f:id:mrgoofy33:20110411004640p:image:w500

Chart Wizard - Google Chart Tools

Google Chart API」でグラフを作成する場合、「Chart Wizard」がとても便利です。
グラフのタイトルやデータ名、データ値などを入力すると、グラフ表示用のURLを自動で生成してくれます。

Chart Wizard - Google Chart Tools Image Charts (aka Chart API) - Google Code
f:id:mrgoofy33:20110411003439p:image:w500

file_get_contents ではなく cURL を使う

PHP で外部のURLからデータを取得するのには「file_get_contents」を使うのが簡単ですが、セキュリティ的にあまり控えたほうが良いという記事があったので、PHPの「cURL関数」を使用しました。

file_get_contents()が使えなくなる理由: php関数file_get_contents()においては、リモートURLをオープンするためにファイルマニピュレーション機能を用いている。このファイルマニピュレーション機能を有効にするためには、php.iniのパラメータallow_url_fopenをOnにしなければならない。

ファイルマニピュレーションを可能にするということは、私なりの言い方をすると、システム上のファイルのRead/Writeを許すということだ。便利は便利であるが、ひとつ間違えると、大変な事態を惹き起こすことになる。公開サーバー上では、こうした機能の使用は控えるべきというのが当然だ。

PHPのセキュリティを高めるための個人的メモ(補足) Yama s Memorandum

サンプルグラフ & サンプルコード(全部)

実際のグラフはこんな感じに表示されます。
f:id:mrgoofy33:20110411003440j:image

PHPソースコードは以下のようになります。

<?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;
}

// Yahoo!デベロッパーネットワークのアプリケーションIDの入力
$key="Your API Key";
$url_ydn = "http://setsuden.yahooapis.jp/v1/Setsuden/latestPowerUsage?appid=" . $key;

// 電力使用状況API にリクエスト
$response = curl($url_ydn);
$xml = simplexml_load_string($response) or die("パースエラー");
 
// 使用量・最大供給量・残供給量を万kwに変換
$siyou = ($xml->Usage / 10000);
$kyokyu = ($xml->Capacity / 10000);
$siyouzan = $kyokyu - $siyou;
 
// 使用率を四捨五入
$siyouritu = round($siyou / $kyokyu * 100);
$zanritu = 100 - $siyouritu;
 
// Google Chart API の URLを生成
$url_google = 'http://chart.apis.google.com/chart?chs=300x225'
	. '&cht=p&chd=t:' . ceil($zanritu) . ',' . ceil($siyouritu)  
	. '&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($siyouzan) . 'Kw|' . ceil($siyou) . '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';

// Google Chart API にリクエスト
$response = curl($url_google);

// 画像として出力
header("Content-type: image/png");
echo $response;

今回参考にしたページ

[を] WebAPIを駆使して東京電力使用状況メーターを作る!(Perl版とJavaScript版)
http://chalow.net/2011-04-02-1.html

東京電力使用状況メーターをヤフーのAPIGoogle Chartで作る方法 ? [Mu]ムジログ
http://musilog.net/webdesign/my-works/tepco-graph.php

PHPのセキュリティを高めるための個人的メモ(補足) Yama's Memorandum
http://memorandum.yamasnet.com/archives/Post-361.html

Yahoo!デベロッパーネットワーク - 震災関連情報 - 電力使用状況API
http://developer.yahoo.co.jp/webapi/shinsai/setsuden/v1/latestpowerusage.html

Chart Wizard - Google Chart Tools Image Charts (aka Chart API) - Google Code
http://code.google.com/intl/ja/apis/chart/docs/chart_wizard.html

PHP curl_setopt - Manual
http://www.mais.uniyar.ac.ru/manual/ja/function.curl-setopt.php