Edited at

東電管内の停電状況を取得するAPIを作った

令和元年台風第15号の影響で千葉県の停電が長引いている状況で、何かCivic Tech的に出来ることはないものかと思い、シンプルなAPIを作成しました。


TL;DR


  • 電力会社の停電情報ページが使いづらいため、非公式API jp-power-outage を作った。


    • 現時点では東京電力(東京電力パワーグリッド)管内のみ対応

    • そのうち(需要があれば && 時間があれば)各地の電力会社を網羅したい

    • そもそも非公式APIなんか作らなくても良いように、電力会社は公共性の高い情報に関して機械判読性の高いデータを提供してほしい……



  • Pythonでスクレイピングし、GitHub Pagesで配信している


    • 10分に1回、東電のページを巡回してstaticなJSONを生成する形式のためこれで十分




URL

https://ryo-a.github.io/jp-power-outage/


最新の停電情報

10分おきにクロール

https://ryo-a.github.io/jp-power-outage/api/v1/latest/都道府県名.json

都道府県
URL

茨城県
https://ryo-a.github.io/jp-power-outage/api/v1/latest/ibaraki.json

栃木県
https://ryo-a.github.io/jp-power-outage/api/v1/latest/tochigi.json

群馬県
https://ryo-a.github.io/jp-power-outage/api/v1/latest/gunma.json

埼玉県
https://ryo-a.github.io/jp-power-outage/api/v1/latest/saitama.json

千葉県
https://ryo-a.github.io/jp-power-outage/api/v1/latest/chiba.json

東京都
https://ryo-a.github.io/jp-power-outage/api/v1/latest/tokyo.json

神奈川県
https://ryo-a.github.io/jp-power-outage/api/v1/latest/kanagawa.json

山梨県
https://ryo-a.github.io/jp-power-outage/api/v1/latest/yamanashi.json

静岡県
https://ryo-a.github.io/jp-power-outage/api/v1/latest/shizuoka.json


過去の停電情報

https://ryo-a.github.io/jp-power-outage/api/v1/old/YYYY/MM/DD/都道府県名/都道府県名-HHmm.json

例: 2019年9月20日 0:10取得の千葉県の停電情報

https://ryo-a.github.io/jp-power-outage/api/v1/old/2019/09/20/chiba/chiba-0010.json

GitHub Pagesでホストできる容量に上限があるので、過去データは2ヶ月を目処に削除しようかと現時点では考えています。


実装

Python + beautifulsoupでHTMLをスクレイピングしているだけです。

東電のページに余計な負荷をかけないため、停電情報が出ている自治体のページのみ取得してアクセスするようにしています。

エリア名で取得しやすいように市町村名・エリア名をキーにしたJSONを生成しています。


運用

雑に シンプルにcronでPythonスクリプトを回し、その情報をGitHubにpushしています。

cronで回すスクリプトと公開用のrepoを分けているため、スクリプトでは -C オプションを付けてgitを叩いています。

cmd_commit = f'git -C {output_repo_dir} commit -am "update ({datetime.now().isoformat()})"'


謝辞

今回のAPIのみならず、普段から各種アドバイスに乗ってくれているRY_2718氏, kn1cht氏. min氏に感謝いたします。