2009-09-27
郵便番号APIを自作してみる。
郵便番号の検索には郵便番号API (http://zip.cgis.biz/)
なんかがあるのだが、ローカル環境で郵便番号から住所(の途中まで)を入力する機会があったため、よく分からないなりに郵便番号APIを自作してみる。
SQLなんてろくにさわったこともない。
必要な物
方向性としては、
1、郵便番号CSVデータをダウンロード
特に事情が無い限り全国一括がらくちん。
ちなみにデータが多すぎて、エクセルでは途中までしか開けなかった。
データの説明が、ここから読めるのだが、必要なのは7桁の郵便番号と住所データだけ。他は見なかった事に。
2、CSVをSQL文に変換
参考というか、どんぴしゃなのでそのままで、
以下のファイルを、KEN_ALL.CSVと同じフォルダにおいて、
perl csv2sql.pl
を実行。
csv2sql.pl
#!/usr/local/bin/perl # WindowsでCSVをSQLのINSERTに変換する例 # # http://www.post.japanpost.jp/zipcode/dl/oogaki.html の全国郵便番号データを利用 # 名前が"zip"、フィールド数がCSVと同数で全て文字列型のテーブルと仮定 # # 【変換前】 # 01101,"064 ","0640941","ホツカイドウ","サツポロシチユウオウク","アサヒガオカ" # ,"北海道","札幌市中央区","旭ケ丘",0,0,1,0,0,0 # # 【変換後】 # INSERT INTO zip VALUES('01101','064','0640941','ホツカイドウ','サツポロシチユウオウク','アサヒガオカ' # ,'北海道','札幌市中央区','旭ケ丘','0','0','1','0','0','0'); # # 上記礼は表示上改行を入れていますが、実際のデータは1行です。 # open CSV,"KEN_ALL.CSV"; open SQL,">KEN_ALL.SQL"; $cnt=0; while (<CSV>) { $cnt++; s/\s//g; s/\"//g; s/,/','/g; print SQL qq(INSERT INTO zipcode VALUES('$_');\n); } print $cnt; close CSV; close SQL;
で、KEN_ALL.SQLが出来上がるはず。私の場合はUTF-8にしたかったので、その後文字コードを変換。
3、mySQLにぶっ込む
zipcodeテーブルを作成。
CREATEコマンドは使わずphpMyAdminから地道に。
データ自体は、さっき作ったKEN_ALL.SQLをインポート。
文字の照合順序をutf8_unicode_ciにしなきゃ、文字化けするっぽい。
KEN_ALL.SQL
INSERT INTO zipcode VALUES('01101','060','0600000','ホッカイドウ','サッポロシチュウオウク','イカニケイサイガナイバアイ','北海道','札幌市中央区','以下に掲載がない場合','0','0','0','0','0','0'); INSERT INTO zipcode VALUES('01101','064','0640941','ホッカイドウ','サッポロシチュウオウク','アサヒガオカ','北海道','札幌市中央区','旭ケ丘','0','0','1','0','0','0'); INSERT INTO zipcode VALUES('01101','060','0600041','ホッカイドウ','サッポロシチュウオウク','オオドオリヒガシ','北海道','札幌市中央区','大通東','0','0','1','0','0','0'); INSERT INTO zipcode VALUES('01101','060','0600042','ホッカイドウ','サッポロシチュウオウク','オオドオリニシ(1-19チョウメ)','北海道','札幌市中央区','大通西(1〜19丁目)','1','0','1','0','0','0'); .... ... ..
をインポート。しばらく待つ。とテーブルが出来上がるはず。
4、PHPスクリプトを作る。
zipcode.php
<?php // get zipcode $zipcode = $_GET['zipcode']; // connect MySQL $sqlId = mysql_connect("localhost:8889", "root", "root"); mysql_query("SET NAMES utf8"); // change utf8 mysql_select_db( "database_hogehoge", $sqlId ); $query = "SELECT Prefecuture, City, Address FROM zipcode WHERE Zip_Code = '". $zipcode ."';"; $queryId = mysql_query($query, $sqlId); $result = mysql_fetch_object($queryId); // close mysql mysql_close($sqlId); echo "郵便番号 : " . $zipcode . "<br />"; $pref = $result->Prefecuture; $city = $result->City; $addr = $result->Address; echo "住所 : ". $pref ." ". $city ." ".$addr."<br />"; mysql_free_result($queryId); ?>
ということで http://localhost:8888/zipcode.php?zipcode=1060045
とかやると、麻布十番の住所が表示されたりするのだ。
ちなみに、文字化け対策として
mysql_query("SET NAMES utf8"); // change utf8
トラックバック - http://d.hatena.ne.jp/asus4/20090927/1254039038
リンク元
- 45 http://videotopics.yahoo.co.jp/videolist/official/others/p3ecedb44f9ffa133209ebc5f6aad6a5b
- 16 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=ZEn&q=osc+processing+flash&btnG=検索&lr=lang_ja
- 14 http://www.google.co.jp/search?hl=ja&lr=&q=マルチタッチディスプレイ+自作&revid=1884891802&ei=FvnDSvDwBYa86AOpnqXPDQ&sa=X&oi=revisions_inline&resnum=0&ct=top-
- 13 http://www.google.co.jp/search?hl=ja&lr=lang_ja&client=firefox-a&rls=org.mozilla:ja:official&q=ken_all.csv&start=20&sa=N
- 9 http://www.google.co.jp/search?q=プロジェクションマッピング&sourceid=navclient-ff&ie=UTF-8&rlz=1B2DVFA_jaJP227JP228
- 9 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rlz=1T4GGIH_jaJP226JP226&q=郵便番号 csv 検索 php
- 6 http://ezsch.ezweb.ne.jp/search/ezGoogleMain.php?query=赤外線カメラ+アプリ&start-index=94&adpage=12&mode=02
- 6 http://www.google.co.jp/search?hl=ja&client=firefox-a&channel=s&rls=org.mozilla:ja:official&hs=bOq&q=processing+sound&btnG=検索&lr=
- 6 http://www.google.co.jp/search?hl=ja&q=マルチタッチディスプレイ 自作&btnG=検索&lr=
- 6 http://www.google.co.jp/search?q=郵便番号+API&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a

