2011年3月アーカイブ

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 画面)

ddms_output.png

1

2016年8月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31