現在のページの位置:ホーム » ホーム > API

くろねこスクエア Labs


« »

「東京電力の電力使用状況」をWordPressプラグインにしてみた

今なお苦しみが続く、東日本大震災で被災された方々に心よりお見舞申し上げます。今回の一連のことについて思うことは尽きませんが、改めて思い返せば、あまりの惨事に「言葉を失う」ような状態でありました。震災後1ヶ月以上が経過して少しずつ落ち着きを取り戻しつつあるのかもしれませんが、とにかく一日も早い復興と発展を願っております。

ところで、先日東京電力電力供給状況APIを使ってみましたというのを見て、そのまま能もなくWordPressプラグインにしてみました。元データには東京電力電力供給状況APIを使わせていただきます。非常にゴリゴリで役に立つモノでもないのですが、最近は記事の投稿も少ないので置いておきます。

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?php
/*
Plugin Name: Tokyo Electric Power Supply Meter
Plugin URI:
Description:
Author:
Version: 0.0.1
Author URI:
*/

add_action( 'wp_head', 'electricity_header_content');
add_shortcode('elec_meter', 'elec_meter_func');

function electricity_header_content(){
?>
<style type="text/css">
.off {display:none}
.electricity,.tepco,.kilowatt2,.kilowatt1{font-size:10px}
.percent {margin:0}
.electricity,.tepco {padding:0}
.electricity{
margin:6px 0;
width:236px;
height:100px;
display:inline-block;
border:solid
}
.electricity,.text{
border-style:solid;
border-color:silver
}
.electricity,.text,.kilowatt1{border-width:1px}
.tepco,.percent{font-weight:bold}
.tepco,.meter{margin:0 6px}
.text{
background:#c2ed9a;
top:-25px;
right:0;
margin:0 0 0 160px;
padding:0 6px;
width:55px;
height:55px
}
.text,.savings {position:relative}
.kilowatt2,.kilowatt1 {
margin:-2px 0 1px 0;
line-height:1.5
}
.kilowatt1{
border-bottom:solid;
border-width:1px;
}
.percent {
font-size:14px;
text-align:center;
line-height:20px
}
.savings {
top:-60px;
left:6px;
font-size:12px
}
</style>
<?php
}
//------------
function h($s) {
    return esc_html($s);
}
//------------
function elec_meter_func(){

        $cache_file =  ABSPATH.'wp-content/uploads/tokyopower.html';
       
        if(file_exists($cache_file)){
            $time_newest = @filemtime($cache_file);
        }
       
        $timedif = @(time() - $time_newest);
        if ($timedif < 1800) {
            /*
            // If-Modified-Since
            $request_headers = apache_request_headers();
            $etag = md5( $_SERVER["REQUEST_URI"] . $time_newest );
           
            if( $request_headers["If-Modified-Since"] ) {
                $since = parse_http_date( $request_headers["If-Modified-Since"] );
                if( $since["timestamp"] >= $time_newest ) {
                    header( "HTTP/1.1 304 Not Modified" );
                    header( "Etag: \"$etag\"" );
                    exit();
                }
            }*/

            // Return cache
            $data = file_get_contents($cache_file);
        } else {
            // Create new data
            $data = createOutputData();
            // save data as cache file
            if ($f = @fopen($cache_file, 'w')) {
                fwrite ($f, $data, strlen($data));
                fclose($f);
            }
        }
    return $data;
}
//------------
function createOutputData(){
    $data = json_decode(file_get_contents("http://tepco-usage-api.appspot.com/latest.json"));
    $percentage = $data->usage / $data->capacity * 100;
    $usagecolor = sprintf("%d", pow(2, (9 * $percentage / 100)) - 1 );
    $usagecolor = ($usagecolor > 255) ? 255 : $usagecolor;
    $s = '';
    $s .= '<div class="electricity">' . "\n";
    $s .= sprintf('<p><span class="tepco">東京電力の電力使用状況</span> (%s/%s/%s %s時台)</p>', h($data->year), h($data->month), h($data->day), h($data->hour));
    $s .= '<div class="meter" style="position: relative; width: 150px; padding: 0; background: none repeat scroll 0% 0% rgb(217, 217, 217);">
<span style="width:'
. sprintf("%.1f%%", $percentage). '; display: block; position: relative; background: none repeat scroll 0% 0% rgb('.h($usagecolor).', 200, 0); text-align: center; color: rgb(51, 51, 51); height: 15px; line-height: 15px;">';
    $s .= '</span></div>';
    $s .= '<dl class="text" style="background-color:rgb('.h($usagecolor).', 200, 0);">'."\n";
    $s .= '<dt class="off">使用率</dt><dd class="percent">' . sprintf("%.1f%%", $percentage) . "</dd>\n";
    $s .= '<dt class="off">使用量</dt><dd class="kilowatt1">' . h($data->usage) . "万kW</dd>\n";
    $s .= '<dt class="off">供給可能</dt><dd class="kilowatt2">' . h($data->capacity) . "万kW</dd>\n";
    $s .= "</dl>\n";
    $s .= '<p class="savings">計画停電 ';
    $s .= ($data->savings ? '実施中' : '実施せず');
    $s .= '</p>' ."\n";
    $s .= "</div>\n";
    return $s;
}
//------------

RakuFeed 2010-09-15へアップデート

楽天オークション系APIのリニューアルにともない、RakuFeedを新バージョンへ移行しました。

主な変更点は以下のとおりです。

  • 1円スタートフラグ(y1startFlag) / 匿名配送フラグ(anonymityFlag) / 送料フラグ(postageFlag) / クローズド除外フラグ(closedFlag) / 入札状況(bidStatus)を追加

YFeed オークション検索 アップデート

このたび「YFeed」のアップデートを行いました。Yahoo!オークション関連での出力項目を追加したほか、Yahoo!オークションのオリジナルRSSフィードとのパラメータ互換性を高めました。

主な変更点は以下のとおりです。

  • Yahoo!オークションで取得できるRSSフィードのパラメータを、YFeedでもそのまま使用できるようにしました。
  • 即決価格や出品者ID、画像など、オリジナルRSSフィードでは取得できない項目を追加しました。

RakuFeed 2009-10-20へアップデート

従来から使用させていただいているPEAR::Services_Rakutenを、2009年10月までのいくつかのアップデートに(適当に)対応させたものを置いておきます。

0.2.2からの主な変更点は以下のとおりです。

  • 従来のBooks/CD/DVD検索の廃止にともない楽天ブックス系APIを追加
  • 各APIを2009/10/20 現在のバージョンに更新

KakakuFeed Ver1.0仕様へアップデート

キーワードに合った価格.comの情報を、使いやすい形で取得するためのWebサービス「KakakuFeed」をアップデートしました。これまで同様、価格.comの商品をキーワードやジャンルで絞り込み、RSS/ATOMなどのデータとして取得することができます。

アップデートの詳細

2009年8月末をもって、従来のVer1およびVer1.1のAPI提供が終了したため、このたび価格.com ウェブサービス Ver1.0(1ではなく1.0)の仕様に準拠いたしました。

従来から使用させていただいているPEAR::Services_KakakuComを価格.com ウェブサービス Ver1.0に(適当に)対応させたものを置いておきます。

  • ApiKeyパラメータを追加
  • リクエストURL変更

Y!Feed トピックスAPI Version2にアップデートに対応

Yahoo!デベロッパーネットワークにてアナウンスがありました「トピックスAPI Version2」に対応するため、「Y!Feed」のアップデートを行いました。

Version 2での主な変更点は以下のとおりです。

  • Version 1でのリクエストパラメータであるtopflgの1の指定は、Version 2のpickupcategoryのtop指定と同等です。
  • Version 1でのmidashiflgの1の指定は、Version 2のpickupdategoryのall指定と同等です。
  • Version 1でのorderはVersion 2ではsort内で+か-で指定します。
  • Version 1でのwordはVersion 2ではqueryに名称変更しています。
  • Version 1でのnumはVersion 2ではresultsに名称変更しています。
  • Version 2ではstartを使ってリクエストを繰り返すことでデータの全件取得が可能です。

参考までに、従来から使用させていただいているPEAR::Services_Yahoo_JPを、2009年6月までのいくつかのアップデートに(適当に)対応させたものを置いておきます。

サイト紹介のためのサムネイル画像

興味を引かれたサイトを紹介する場合、一般的にはそのサイトの説明と共にテキストリンクを張りますよね。ただ、テキストリンクだけではサイトのイメージがつかみにくい。そこで「Webサイトのスクリーンショットのサムネイル画像」を添えてみたのですが、サイトは生き物のように日々変化するものです。サムネイルを作っても、時間の経過とともに古く役に立たなくなっていきます。

そこで、定期的にサムネイルを作成してくれるサービスを利用することにしました。似たようなものはいくつかありましたが、とりあえずThumbnailWEBMozshotを利用させていただきました。本来であれば自前でこしらえるのが良いのかもしれませんが、手間と規模によっては「外部委託」の方が効率的かもしれません。

なお、せっかくのサービスに負荷をかけすぎてしまうといけないので、当サイトではキャッシュ機能をつけて運用しています。参考にファイルを置いておきます。

電子国土

今やオンライン地図を使う機会も多くなりました。数多くのサービスがある中で、かの国土地理院も電子国土ポータルを公開しています。オンライン地図は今や珍しくありませんし他の地図とそれほど違わないのではという気もしたのですが、実際に電子国土ポータルを使ってみると、なかなか予想以上の地図でした。何がすごいかというと山間部の地図がとても緻密なのです。

電子国土ポータルで「富士山」を表示したところ
富士山周辺 - 電子国土
Yahoo!地図で「富士山」を表示したところ
富士山周辺 - Yahoo!地図

電子国土ポータルの方は、刊行されている2万5千分1地図とほぼ同じだそうです。民間商業サイトと非営利サイトの違いといえばそれまでですが(山間部でスポンサーを探すのは至難の業)、ここまで詳細な地図を広く公開しようという国土地理院の姿勢にも感心しました。市街地はYahoo!地図とかGoogle Mapsで、山間部は電子国土という棲み分けができればいいのだと思います。

RakuFeed 2009-04-15へアップデート

楽天ウェブサービスから「旧楽天ブックスAPI廃止」のアナウンスがありましたため、「RakuFeed」のアップデートを行いました。

これまでは3種類の楽天ブックスAPIを利用していました。

  • 楽天書籍検索API(operation名:BookSearch)
  • 楽天CD検索API(operation名:CDSearch)
  • 楽天DVD検索API(operation名:DVDSearch)

3種類もあるとわかりにくいのですが、本日より「楽天ブックス総合検索API (version:2009-04-15)」でまとめてキーワード検索できるようになりました。

Y!Feed リリース

キーワードに合ったYahoo! JAPANの情報を、使いやすい形で取得するためのWebサービス「Y!Feed」をリリースしました。Yahoo! JAPANの豊富な情報をキーワード、ジャンルなどで絞り込み、RSS/ATOMなどのデータとして取得することができます。

Yahoo!デベロッパーネットワーク」の仕様に準拠しましたので、容易に利用できると思います。

PEARライブラリ Services_Yahoo_JPを公開してくださったTetsuya Nakase氏に感謝いたします。


カテゴリー

タグ

アーカイブ

Feed

メタ情報