2011年3月29日、東京電力の最大供給量と使用量を取得できる API が公開されました。
同 API については、先日(3月19日~21日)開催された Hack for Japan でも要望のあったものです。
Yahoo!デベロッパーネットワークさん、仕事が早いですね。さすが!
API 解説
本 API を使用することにより、東電の最大供給量と電力使用量を、XML または JSON 形式で取得できるようです。
ただし、期間限定の API であり、終了日は未定とのことです。
また、 API の使用にあたり、アプリケーションID が必要であり、かつ、
24 時間中 1 アプリケーション ID につき 50000 件のリクエストが上限とのことですので、注意が必要です。
(現実的には、キャッシュサーバー用意する必要あり?)
以下、早速 Android から呼び出してみました。
一応、API を簡単に使えるようなラッパークラスを作成し、2 行書けば取得できるようにしています。
※誌面の都合上、エラー処理や諸々省略しています
※完全なコードは、Google Code からチェックアウトできます
サンプルソースコード
public class SetsudenClient {
private String mAppID;
public SetsudenClient(String appID) {
mAppID = appID;
}
public LatestPowerUsageResult getLatestPowerUsage() {
LatestPowerUsageResult result = new LatestPowerUsageResult();
// Build uri
Uri.Builder uriBuilder = new Uri.Builder();
uriBuilder.path("http://setsuden.yahooapis.jp/v1/Setsuden/latestPowerUsage");
uriBuilder.appendQueryParameter("appid", mAppID);
uriBuilder.appendQueryParameter("output", "json");
String uri = Uri.decode(uriBuilder.build().toString());
// Request HTTP GET
HttpUriRequest httpGet = new HttpGet(uri);
DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
try {
HttpResponse httpResponse = defaultHttpClient.execute(httpGet);
String stringEntity = EntityUtils.toString(httpResponse.getEntity());
// Parse JSON result
JSONObject jsonEntity = new JSONObject(stringEntity);
if (jsonEntity != null) {
JSONObject jsonElectricPowerUsage =
jsonEntity.optJSONObject("ElectricPowerUsage");
if (jsonElectricPowerUsage != null) {
result.setArea(jsonElectricPowerUsage.optString("Area"));
JSONObject jsonUsage =
jsonElectricPowerUsage.optJSONObject("Usage");
if (jsonUsage != null) {
result.setUsageUnit(jsonUsage.optString("@unit"));
result.setUsageValue(jsonUsage.optInt("$"));
}
JSONObject jsonCapacity =
jsonElectricPowerUsage.optJSONObject("Capacity");
if (jsonCapacity != null) {
result.setCapacityUnit(jsonCapacity.optString("@unit"));
result.setCapacityValue(jsonCapacity.optInt("$"));
}
result.setDate(jsonElectricPowerUsage.optString("Date"));
result.setHour(jsonElectricPowerUsage.optString("Hour"));
}
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
} catch (JSONException e) {
}
return result;
}
}
public class SetsudenYahooAPISampleActivity extends Activity {
private static final String TAG = "SetsudenYahooAPISampleActivity";
private static final String MY_APP_ID = "XXXXXXXXXX"; // 取得したappidで置き換えてください
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 非同期処理
SetsudenClientTask setsudenClientTask = new SetsudenClientTask();
setsudenClientTask.execute();
}
class SetsudenClientTask extends AsyncTask<Void, Void, LatestPowerUsageResult> {
protected LatestPowerUsageResult doInBackground(Void... params) {
// 電力使用状況APIのラッパークラスの呼び出し例
SetsudenClient setsudenClient = new SetsudenClient(MY_APP_ID);
return setsudenClient.getLatestPowerUsage();
}
protected void onPostExecute(LatestPowerUsageResult result) {
// LogCat の出力結果
Log.v(TAG, "Area = " + result.getArea());
Log.v(TAG, "Usage = " + result.getUsageValue() + result.getUsageUnit());
Log.v(TAG, "Capacity = " + result.getCapacityValue() + result.getCapacityUnit());
Log.v(TAG, "Date = " + result.getDate());
Log.v(TAG, "Hour = " + result.getHour());
}
}
}
実行結果(DDMS のLogCat 画面)
