最近の更新 (Recent Changes)

2014-01-01
2013-01-04
2012-12-22
2012-12-15
2012-12-09

Wikiガイド(Guide)

サイドバー (Side Bar)


← 前のページに戻る

1.1 2011年夏版 全国電力供給状況表示プログラム

全国の電力供給状況をインターネットの電力会社のWWWサイトから取得して使用率を計算してプログラムです。 およそ10分おきにデータの取得を行います。

このプログラムは、デカルト言語(http://sourceforge.jp/projects/descartes/) で書かれたプログラムであり、httpクライアント機能の例題として作成されました。

ここでは、Linux版のdenryoku.decを中心に説明します。

1.1.1 実行例


Wed Aug  3 20:37:21 2011
東北電力
ピーク時供給力 :  1199 万kW
    使用量 :  973 万kW
    使用率 :  81.151 %

東京電力
ピーク時供給力 :  5050 万kW
    使用量 :  3665 万kW
    使用率 :  72.5743 %

中部電力
ピーク時供給力 :  2388 万kW
    使用量 :  1940 万kW
    使用率 :  81.2395 %

関西電力
ピーク時供給力 :  2930 万kW
    使用量 :  2271 万kW
    使用率 :  77.5085 %

九州電力
ピーク時供給力 :  1714 万kW
    使用量 :  1355 万kW
    使用率 :  79.0548 %



1.1.2 ソース


#!/usr/local/bin/descartes
/*
 * 2011年夏版 全国電力供給状況表示プログラム
 */

<init>
        ::sys <PrintResultOff>
        ;

<proxy #proxy>
        (::sys <getenv #p http_proxy> | <is #p "">)
        ::sys <split #p1 #p "/">
        ( <eq #p1 ()> <is #proxy "">
         |
          ::sys <car #p2 #p1>
          <is "http:" #p2> ::sys <cadr #proxy #p1>
         |
          <is #proxy #p>
         )
        ;


<checkheader #h>
        ::sys <splitline #h2 #h>
        ::sys <car #h3 #h2>
        ::sys <split #c1 #h3>
        ::sys <cadr #code #c1>
        (<eq #code 200>
         | <print #h3> <unknown>
        )
        ;

// 東北電力
<tohoku #proxy #maxpower #power #rt>
        ::sys <httpget #h #b
        "http://setsuden.tohoku-epco.co.jp/common/demand/juyo_tohoku.csv"
                #proxy>
        <checkheader #h>
        ::sys <iconv #bu #b "UTF-8" "SJIS">
        ::sys <splitline #t #bu>
        ::sys <caddr #x #t>
        ::sys <split #x2 #x ",">
        ::sys <cdar #maxpower ::sys <car _ #x2>>
        <setVar power 0.0>
        <for (#i 38 324)
                ::sys <split #data ::sys <nth _ #t #i> ",">
                ::sys <caddr #p #data>
                (
                 ::sys <length #n #data>
                 <compare #n == 2>
                 <power #power>
                 <break>
                |
                 <setVar power #p>
                )
        >
        <power #power>
        <letf #rt = #power*100/#maxpower>
        ;

// 東京電力
<tokyo #proxy #maxpower #power #rt>
        ::sys <httpget #h #b "http://www.tepco.co.jp/forecast/html/images/juyo-j
.csv"
                        #proxy>
        <checkheader #h>
        ::sys <iconv #bu #b "UTF-8" "SJIS">
        ::sys <splitline #t #bu>
        ::sys <caddr #x #t>
        ::sys <split #x2 #x ",">
        ::sys <cdar #maxpower ::sys <car _ #x2>>
        <setVar power 0.0>
        <for (#i 38 325)
                ::sys <split #data ::sys <nth _ #t #i> ",">
                ::sys <caddr #p #data>
                (
                 ::sys <length #n #data>
                 <compare #n == 2>
                 <power #power>
                 <break>
                |
                 <setVar power #p>
                )
        >
        <power #power>
        <letf #rt = #power*100/#maxpower>
        ;

// 中部電力
<chubu #proxy #maxpower #power #rt>
        ::sys <httpget #h #b
        "http://denki-yoho.chuden.jp/denki_yoho_content_data/juyo_cepco.csv"
                #proxy>
        <checkheader #h>
        ::sys <iconv #bu #b "UTF-8" "SJIS">
        ::sys <splitline #t #bu>
        ::sys <caddr #x #t>
        ::sys <split #x2 #x ",">
        ::sys <cdar #maxpower ::sys <car _ #x2>>
        <for (#i 6 29)
                ::sys <split #data ::sys <nth _ #t #i> ",">
                ::sys <caddr #p #data>
                (
                 <comparef #p == 0.0>
                 [<compare #i == 6>
                  ::sys <split #data2 ::sys <nth _ #t 29> ",">
                  ::sys <nth #p2 #data2 3>
                  <setVar power #p2>
                 ]
                 <break>
                |
                 <setVar power #p>
                )
        >
        <power #power>
        <letf #rt = #power*100/#maxpower>
        ;

// 関西電力
<kansai #proxy #maxpower #power #rt>
        ::sys <httpget #h #b
        "http://www.kepco.co.jp/yamasou/juyo1_kansai.csv" #proxy>
        <checkheader #h>
        ::sys <iconv #bu #b "UTF-8" "SJIS">
        ::sys <splitline #t #bu>
        ::sys <caddr #x #t>
        ::sys <split #x2 #x ",">
        ::sys <cdar #maxpower ::sys <car _ #x2>>
        <for (#i 41 520)
                ::sys <split #data ::sys <nth _ #t #i> ",">
                ::sys <caddr #p #data>
                (
                <is #p ()>
                <power #power>
                <break>
                |
                <compare #i == 520>
                <setVar power #p>
                |
                <setVar power #p>
                )
        >
        <power #power>
        <letf #rt = #power*100/#maxpower>
        ;

// 九州電力
<kyushu #proxy #maxpower #power #rt>
        ::sys <httpget #h #b "http://www.kyuden.co.jp/power_usages/pc.html" #pro
xy>
        <checkheader #h>
        ::sys <htmltags #t #b 'div id="section1"' '/div'>
        ::sys <htmltags #t2 #t 'td align="center"' '/td'>
        ::sys <cadar #t3 #t2>
        ::sys <erasealltags #t4 #t3>
        ::sys <erasestr #t5 #t4 '万kW'>
        ::sys <erasestr #t6 #t5 ','>
        ::sys <split #t7 #t6 "/">
        ::sys <cadr #maxpower #t7>
        ::sys <car #power #t7>

        <letf #rt = #power*100/#maxpower>
        ;

<disp>
        ::sys <clear>
        <init>
        ::sys <date #d>
        <print "Loading data ...  " #d>
        <proxy #proxy>
        <print "東北電力">
        [<tohoku #proxy #tohoku_maxpower #tohoku_power #tohoku_rt>]
        <print "東京電力">
        [<tokyo #proxy #tokyo_maxpower #tokyo_power #tokyo_rt>]
        <print "中部電力">
        [<chubu #proxy #chubu_maxpower #chubu_power #chubu_rt>]
        <print "関西電力">
        [<kansai #proxy #kansai_maxpower #kansai_power #kansai_rt>]
        <print "九州電力">
        [<kyushu #proxy #kyushu_maxpower #kyushu_power #kyushu_rt>]
        <for (#i 20)
                ::sys <sleep 5>
//              ::sys <clear>
                <print "更新 " #d>
                <print "東北電力">
                (::sys <isInteger #tohoku_maxpower>
                 <print "ピーク時供給力 : " #tohoku_maxpower 万kW>
                 <print "    使用量 : " #tohoku_power 万kW>
                 <print "    使用率 : " #tohoku_rt "%">
                |
                 <print "データなし">
                )
                 <print>
                 ::sys <sleep 5>
                 <print "東京電力">
                (::sys <isInteger #tokyo_maxpower>
                 <print "ピーク時供給力 : " #tokyo_maxpower 万kW>
                 <print "    使用量 : " #tokyo_power 万kW>
                 <print "    使用率 : " #tokyo_rt "%">
                |
                 <print "データなし">
                )
                 <print>
                 ::sys <sleep 5>
                 <print "中部電力">
                (::sys <isInteger #chubu_maxpower>
                 <print "ピーク時供給力 : " #chubu_maxpower 万kW>
                 <print "    使用量 : " #chubu_power 万kW>
                 <print "    使用率 : " #chubu_rt "%">
                |
                 <print "データなし">
                )
                 <print>
                 ::sys <sleep 5>
                 <print "関西電力">
                (::sys <isInteger #kansai_maxpower>
                 <print "ピーク時供給力 : " #kansai_maxpower 万kW>
                 <print "    使用量 : " #kansai_power 万kW>
                 <print "    使用率 : " #kansai_rt "%">
                |
                 <print "データなし">
                )
                 <print>
                 ::sys <sleep 5>
                 <print "九州電力">
                (::sys <isInteger #kyushu_maxpower>
                 <print "ピーク時供給力 : " #kyushu_maxpower 万kW>
                 <print "    使用量 : " #kyushu_power 万kW>
                 <print "    使用率 : " #kyushu_rt "%">
                |
                 <print "データなし">
                )
                 <print>
                 ::sys <sleep 5>
        >
        ;

? {<disp>};


1.1.3 ソース解説


--

--