全国の緊急車両出動情報を統一されたフォーマットで提供する
提供される緊急車両出動情報は公式なものではなく、このデータを基に消防本部等へ連絡を行うことは避けられたい。
出動情報はdistディレクトリ以下へ、基本的に市区町村単位で生成されるが、一部事務組合などの場合はこれに限らない。
市区町村等は6桁の地方公共団体コードによって区別される。例えば札幌市の地方公共団体コードは011002であり、その出動情報はdist/011002.jsonに出力される。
各JSONファイルは、UTF-8形式である。
{
"disasters": [
{
"address": "例示県例示市なんちゃら1丁目", # 都道府県から始まる住所
"time": "01:23", # 出動時刻(ソースとなる機関によって異なる場合がある)
"type": "火災" # 出動種別
},
{
"address": "例示県例示市大字ほにゃらら234",
"time": "00:12",
"type": "航空隊支援"
} # このように複数の出動情報が存在する場合がある。何も無い場合は空配列が返される。
],
"jisx0402": "999999", # 6桁の地方公共団体コード
"source": [
{
"name": "例示市消防本部", # ソースとなる機関名
"url": "https://example.com/index.html" # ソースページ
}
]
}あくまで統一されているのはフォーマットであって、使用される語彙は統制されていない。例えばdisasters.typeは、同様の事象であっても「火災」であったり「林野火災」であったり「大規模火災」であったりと、ソースとなる機関によって異なる表現がなされることがあり得る。データを活用される際は注意していただきたい。
- 北海道
- 札幌市(札幌市消防局) - 011002
- 函館市(函館市消防本部) - 012025
- 苫小牧市(苫小牧市消防本部) - 012131
- 江別市(江別市消防本部) - 012173
- 千歳市(千歳市消防本部) - 012246
- 恵庭市(恵庭市消防本部) - 012319
- 北広島市(北広島市消防本部) - 012343
- 青森県
- つがる市(つがる市消防本部) - 022098
- 宮城県
- 大崎市(大崎地域広域行政事務組合消防本部) - 042153
- 色麻町(大崎地域広域行政事務組合消防本部) - 044440
- 加美町(大崎地域広域行政事務組合消防本部) - 044458
- 涌谷町(大崎地域広域行政事務組合消防本部) - 045012
- 美里町(大崎地域広域行政事務組合消防本部) - 045055
- 山形県
- 酒田市(酒田地区広域行政組合消防本部) - 062049
- 天童市(天童市消防本部) - 062103
- 庄内町(酒田地区広域行政組合消防本部) - 064289
- 遊佐町(酒田地区広域行政組合消防本部) - 064611
- 福島県
- 福島市(福島市消防本部) - 072010
- 郡山市(郡山地方広域消防組合消防本部) - 072036
- 田村市(郡山地方広域消防組合消防本部) - 072117
- 三春町(郡山地方広域消防組合消防本部) - 075213
- 小野町(郡山地方広域消防組合消防本部) - 075221
- 茨城県
- 土浦市(土浦市消防本部) - 082031
- 茨城町(茨城町消防本部) - 083020
- 栃木県
- 宇都宮市(宇都宮市消防局) - 092011
- 足利市(足利市消防本部) - 092029
- 埼玉県
- 川口市(川口市消防局) - 112038
- 所沢市(埼玉西部消防局) - 112089
- 飯能市(埼玉西部消防局) - 112097
- 東松山市(比企広域消防本部) - 112127
- 狭山市(埼玉西部消防局) - 112151
- 入間市(埼玉西部消防局) - 112259
- 坂戸市(坂戸・鶴ヶ島消防本部) - 112399
- 鶴ヶ島市(坂戸・鶴ヶ島消防本部) - 112411
- 日高市(埼玉西部消防局) - 112429
- 毛呂山町(西入間広域消防組合消防本部) - 113263
- 越生町(西入間広域消防組合消防本部) - 113271
- 滑川町(比企広域消防本部) - 113417
- 嵐山町(比企広域消防本部) - 113425
- 小川町(比企広域消防本部) - 113433
- 吉見町(比企広域消防本部) - 113476
- 鳩山町(西入間広域消防組合消防本部) - 113484
- ときがわ町(比企広域消防本部) - 113492
- 東秩父村(比企広域消防本部) - 113697
- 千葉県
- 千葉市(千葉市消防局) - 121002
- 銚子市(銚子市消防本部) - 122025
- 市川市(市川市消防局) - 122033
- 館山市(安房郡市広域市町村圏事務組合消防本部) - 122050
- 木更津市(木更津市消防本部) - 122068
- 茂原市(長生郡市広域市町村圏組合消防本部) - 122106
- 成田市(成田市消防本部) - 122114
- 佐倉市(佐倉市八街市酒々井町消防組合消防本部) - 122122
- 東金市(山武郡市広域行政組合消防本部) - 122131
- 旭市(旭市消防本部) - 122157
- 柏市(柏市消防局) - 122173
- 勝浦市(夷隅郡市広域市町村圏事務組合消防本部) - 122181
- 市原市(市原市消防局) - 122190
- 鴨川市(安房郡市広域市町村圏事務組合消防本部) - 122238
- 君津市(君津市消防本部) - 122254
- 富津市(富津市消防本部) - 122262
- 四街道市(四街道市消防本部) - 122289
- 袖ケ浦市(袖ケ浦市消防本部) - 122297
- 八街市(佐倉市八街市酒々井町消防組合消防本部) - 122301
- 印西市(印西地区消防組合消防本部) - 122319
- 白井市(印西地区消防組合消防本部) - 122327
- 富里市(富里市消防本部) - 122335
- 南房総市(安房郡市広域市町村圏事務組合消防本部) - 122343
- 匝瑳市(匝瑳市横芝光町消防組合消防本部) - 122351
- 香取市(香取広域市町村圏事務組合消防本部) - 122360
- 山武市(山武郡市広域行政組合消防本部) - 122378
- いすみ市(夷隅郡市広域市町村圏事務組合消防本部) - 122386
- 大網白里市(山武郡市広域行政組合消防本部) - 122394
- 酒々井町(佐倉市八街市酒々井町消防組合消防本部) - 123013
- 栄町(栄町消防本部) - 123293
- 神崎町(成田市消防本部) - 123421
- 多古町(香取広域市町村圏事務組合消防本部) - 123471
- 東庄町(香取広域市町村圏事務組合消防本部) - 123498
- 九十九里町(山武郡市広域行政組合消防本部) - 124036
- 芝山町(山武郡市広域行政組合消防本部) - 124095
- 横芝光町(匝瑳市横芝光町消防組合消防本部) - 124109
- 一宮町(長生郡市広域市町村圏組合消防本部) - 124214
- 睦沢町(長生郡市広域市町村圏組合消防本部) - 124222
- 長生村(長生郡市広域市町村圏組合消防本部) - 124231
- 白子町(長生郡市広域市町村圏組合消防本部) - 124249
- 長柄町(長生郡市広域市町村圏組合消防本部) - 124265
- 長南町(長生郡市広域市町村圏組合消防本部) - 124273
- 大多喜町(夷隅郡市広域市町村圏事務組合消防本部) - 124419
- 御宿町(夷隅郡市広域市町村圏事務組合消防本部) - 124435
- 鋸南町(安房郡市広域市町村圏事務組合消防本部) - 124630
- 神奈川県
- 横浜市(横浜市消防局) - 141003
- 川崎市(川崎市消防局) - 141305
- 横須賀市(横須賀市消防局) - 142018
- 三浦市(横須賀市消防局) - 142107
- 新潟県
- 新潟市(新潟市消防局) - 151009
- 長岡市(長岡市消防本部) - 152021
- 燕市(燕・弥彦総合事務組合消防本部) - 152137
- 弥彦村(燕・弥彦総合事務組合消防本部) - 153427
- 石川県
- 金沢市(金沢市消防局) - 172014
- 小松市(小松市消防本部) - 172031
- 長野県
- 松本市(松本広域消防局) - 202029
- 塩尻市(松本広域消防局) - 202151
- 安曇野市(松本広域消防局) - 202207
- 麻績村(松本広域消防局) - 204463
- 生坂村(松本広域消防局) - 204480
- 山形村(松本広域消防局) - 204501
- 朝日村(松本広域消防局) - 204510
- 筑北村(松本広域消防局) - 204528
- 愛知県
- 名古屋市(名古屋市消防局) - 231002
- 春日井市(春日井市消防本部) - 232068
- 三重県
- 津市(津市消防本部) - 242012
- 鈴鹿市(鈴鹿市消防本部) - 242071
- 亀山市(亀山市消防本部) - 242101
- 滋賀県
- 大津市(大津市消防局) - 252018
- 京都府
- 京都市(京都市消防局) - 261009
- 大阪府
- 池田市(池田市消防本部) - 272043
- 富田林市(大阪南消防組合) - 272141
- 河内長野市(大阪南消防組合) - 272167
- 柏原市(大阪南消防組合) - 272213
- 羽曳野市(大阪南消防組合) - 272230
- 藤井寺市(大阪南消防組合) - 272264
- 東大阪市(東大阪市消防局) - 272272
- 太子町(大阪南消防組合) - 273813
- 河南町(大阪南消防組合) - 273821
- 千早赤阪村(大阪南消防組合) - 273830
- 兵庫県
- 小野市(小野市消防本部) - 282189
- 奈良県
- 奈良市(奈良市消防局) - 292010
- 生駒市(生駒市消防本部) - 292095
- 鳥取県
- 米子市(鳥取県西部広域行政管理組合消防局) - 312029
- 倉吉市(鳥取中部ふるさと広域連合消防局) - 312037
- 境港市(鳥取県西部広域行政管理組合消防局) - 312045
- 三朝町(鳥取中部ふるさと広域連合消防局) - 313645
- 湯梨浜町(鳥取中部ふるさと広域連合消防局) - 313700
- 琴浦町(鳥取中部ふるさと広域連合消防局) - 313718
- 北栄町(鳥取中部ふるさと広域連合消防局) - 313726
- 日吉津村(鳥取県西部広域行政管理組合消防局) - 313840
- 大山町(鳥取県西部広域行政管理組合消防局) - 313866
- 南部町(鳥取県西部広域行政管理組合消防局) - 313891
- 伯耆町(鳥取県西部広域行政管理組合消防局) - 313904
- 日南町(鳥取県西部広域行政管理組合消防局) - 314013
- 日野町(鳥取県西部広域行政管理組合消防局) - 314021
- 江府町(鳥取県西部広域行政管理組合消防局) - 314030
- 島根県
- 松江市(松江市消防本部) - 322016
- 広島県
- 竹原市(東広島市消防局) - 342033
- 東広島市(東広島市消防局) - 342122
- 大崎上島町(東広島市消防局) - 344311
- 山口県
- 萩市(萩市消防本部) - 352047
- 阿武町(萩市消防本部) - 355020
- 徳島県
- 徳島市(徳島市消防局) - 362018
- 高知県
- 高知市(高知市消防局) - 392014
- 土佐市(土佐市消防本部) - 392057
- 福岡県
- 北九州市(北九州市消防局) - 401005
- 福岡市(福岡市消防局) - 401307
- 古賀市(粕屋北部消防本部) - 402231
- 新宮町(粕屋北部消防本部) - 403458
- 佐賀県
- 佐賀市(佐賀広域消防局) - 412015
- 多久市(佐賀広域消防局) - 412040
- 小城市(佐賀広域消防局) - 412082
- 神埼市(佐賀広域消防局) - 412104
- 吉野ヶ里町(佐賀広域消防局) - 413275
このデータのうち、6桁の地方公共団体コードは、dist/list.jsonで配列として取得することが可能である。
ここの自治体の出動情報を取得した際に、全ての自治体をまとめたフィード(RSS 2.0)を生成するようにしている。dist/all_feed.xmlへ生成される。日付変換機構が不完全なため、使用する際は1日のずれが発生する場合があるが、留意して使用すること。
フィード生成時と比較して10分以上未来の時間を指している場合は前日と扱うようにしている。この機能は、動作しているマシンがJSTを使用していることを前提としている。そのうちちゃんと直す。
フィードと同様に、全ての自治体の出動情報をまとめたJSONファイルを生成しており、dist/all.jsonへ生成される。これは地方公共団体コードをキーとし、各地方公共団体内は6桁の地方公共団体コード.jsonと内容に差が無いように配慮している。また、 出動が無い地方公共団体は出力しないようにしている ことに留意すること。
開発を行うためにはRust環境を整える必要がある。Rustは公式サイトよりインストーラをダウンロードすることが可能である。
Rustの環境が整ったのであれば、適当な場所へとクローンを行い、cargo runを行うことによって開発・実行環境が整う。
git clone https://github.com/oageo/emergency-dispatch.git
cd emergency-dispatch
cargo run取得先によって条件が異なるため、src/parse以下にあるparse_(6桁の数字).rsによってそれぞれパースが行われている。6桁の数字は当該の地方公共団体コードとなっている。
HTTPリクエスト時に使用されるヘッダー値は、以下のようにデフォルト値が設定されている。
Host:HttpRequestConfig::new()の第1引数で指定した値Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8"Accept-Language: "ja,en-US;q=0.7,en;q=0.3"Connection: "keep-alive"Content-Type: "application/x-www-form-urlencoded"User-Agent: ACCESS_UA定数で定義された値
これらのデフォルト値を変更する場合は、各パーサーファイル内でHttpRequestConfigの対応するメソッドを呼び出すことで上書き可能である。このデフォルト値そのものを変更する場合は、lib.rs内に定義されている
let config = HttpRequestConfig::new(HOST, GET_SOURCE)
.with_accept("custom/accept")
.with_accept_language("ja-JP")
.with_connection("close")
.with_content_type("application/json");Shift_JISエンコーディング(内部的にはUTF-8に変換してから処理を行っています)が必要な場合は、.with_shift_jis(true)を追加する。
別ホストへリダイレクトされるURL(例: Googleスプレッドシートの公開URL)では、固定のHostヘッダーがリダイレクト先にも送られて取得に失敗するため、.without_host_header()を追加してHostヘッダーを送らないようにする。
中間証明書を送ってこないサーバー(例: 三重中央消防指令センター)は、実行環境によって証明書の検証に失敗する場合がある。Let's Encryptの証明書であれば、.with_extra_root_certificates(LETS_ENCRYPT_GEN_Y_CERTS)を追加して不足分を補う。この証明書はビルド時にbuild.rsがLet's Encryptの配布元から取得するため、ビルド環境にはインターネット接続が必要である(取得できなかった場合も警告を出してビルドは続行する)。
Ubuntu環境において以下のような設定をすると定期的に実行できる。環境に合わせて適宜権限等の管理をする必要がある。
/opt/emergency-dispatch/run_edbot.sh
#!/bin/bash
export PATH="$HOME/.cargo/bin:$PATH"
cd /opt/emergency-dispatch
cargo run
/etc/systemd/system/edbot.service
[Unit]
Description=emergency-dispatchを実行
[Service]
ExecStart=/opt/emergency-dispatch/run_edbot.sh
/etc/systemd/system/edbot.timer
[Unit]
Description=15分ごとに実行
[Timer]
OnCalendar=*:0/15
Persistent=true
[Install]
WantedBy=timers.target
oageo(Osumi Akari)
- Website: https://www.osumiakari.jp/about/
- Fediverse: @oageo@c.osumiakari.jp
- Bluesky: @osumiakari.jp