2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

市区町村コードの一覧をjson化するpythonスクリプトを書いた

Last updated at Posted at 2022-01-05

日本全国の市区町村コードのjson探している方向け

ここに市区町村コードをまとめたjsonがあります。

背景

日本全国の市区町村コードがjsonで配布されていないかなんてことを思ったが、存在していない。
そして、内閣府にいい感じのapiがあるけど登録がめんどくさい。(APIキーは即日発行された。)
国土交通省のAPIの中に市区町村コードが取得できるものがあったのでそれを使うことによってサクっと日本全国の市区町村コード一覧を取得することにした。

本題

コードはこちらのGithubから。

コードの仕組み

自動化の一環でこのコード書いたのに、都道府県名はコードは手入力しました。本末転倒です()
というのも、今回使用したAPIのレスポンスには都道府県名が含まれていないため、補完する必要がありました。なので仕方なく。。。。。。

    prefectures = ["北海道", "青森県", "岩手県", "宮城県", "秋田県", "山形県", "福島県", "茨城県", "栃木県", "群馬県", "埼玉県", "千葉県", "東京都", "神奈川県", "新潟県", "富山県", "石川県", "福井県", "山梨県", "長野県", "岐阜県", "静岡県", "愛知県", "三重県", "滋賀県", "京都府", "大阪府", "兵庫県", "奈良県", "和歌山県", "鳥取県", "島根県", "岡山県", "広島県", "山口県", "徳島県", "香川県", "愛媛県", "高知県", "福岡県", "佐賀県", "長崎県", "熊本県", "大分県", "宮崎県", "鹿児島県", "沖縄県"]

このリストの中身は都道府県コード順に並んでいるのでfor文で回してjsonの中に突っ込んでいます。

データは以下のようなuriから取得します。

https://www.land.mlit.go.jp/webland/api/CitySearch?area={都道府県コード}

uriの都道府県コードの部分にindex番号+1した数字を入れるとその都道府県に属する地区町村の名前と市区町村コードを入手することができるようになります。

上記の処理をfor文で回すことによってそれっぽいjsonデータを生成します。

areaCode.json
{
    "data": [
        {
            "北海道": [
                {
                    "札幌市": {
                        "id": "011002"
                    }
                },
                {
                    "中央区": {
                        "id": "011011"
                    }
                },
                {
                    "北区": {
                        "id": "011029"
                    }
                },
                {
                    "東区": {
                        "id": "011037"
                    }
                },
                {
                    "白石区": {
                        "id": "011045"
                    }
                },
                {
                    "豊平区": {
                        "id": "011053"
                    }
                }...

チェックディジット

@shiracamus さんご提案誠にありがとうございます!

def add_check_digit(code):
    a, b, c, d, e = map(int, code)
    check_digit = 11-((6*a+5*b+4*c+3*d+2*e)%11)
    area_code = code+str(check_digit)[-1]

    return area_code

コードの頭の方にあるcheckDigit関数はその名の通り、コードが正しいかどうか判断するためのチェックディジットを計算しています。
使用しているAPIから値はチェックディジットなしの5桁が返ってきますが、チェックディジットが必要な場合もあると思い、今回生成するjsonでは末尾に付与しています。
ちなみにチェックディジットは以下の公式で簡単に求めることができます。]
5桁の都道府県コードを"abcde"とすると、
$$11-((6a+5b+4c+3d+2e) mod 11)$$
で求めることが可能です。
以上で求めたチェックディジット一桁を5桁の市区町村コードの末尾に付与することで今回生成される市区町村コードが完成します。

おわり

意外にサクッと市区町村コードのjsonを生成するコードが書けましたね。

2
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?