Google検索を使って住所から郵便番号に変換する方法

住所から郵便番号への変換を真面目にやるとDBを用意したり検索ロジックが大変だったりするのでGoogleの検索結果からスクレイピングで郵便番号を得る方法を紹介します。

郵便番号 東京都千代田区千代田1−1

のようにGoogle検索で「郵便番号 住所」で検索すると郵便番号検索がトップに表示されます。ここの郵便番号を取ってくれば住所を郵便番号に変換することができそうです。

Firebugでソースを見ると郵便アイコンに郵便番号付のURLがあるのでここから郵便番号を取得します。

  1. file_get_contentsで検索結果を取得
  2. 最初に現れる www.post.japanpost.jp の位置から適当な長さの文字列を切り出す
  3. 文字列に含まれる***-****を取り出す

コードに落とすとこんな感じ。

<?php
$address = '東京都千代田区千代田1−1';
$query   = urlencode("郵便番号 " . $address);

// 郵便番号が含まれる文字列を切り出す
$str   = file_get_contents("http://www.google.co.jp/search?q={$query}");
$start = stripos($str, 'www.post.japanpost.jp');
$str   = substr($str, $start, 200);

// 文字列から正規表現で郵便番号を取り出す
$matches = array();
if (preg_match('/\d{3}\-\d{4}/', $str, $matches)) {
  echo $matches[0];
}
?>

実行結果

> php test_address_google.php
100-0001

住所から郵便番号に変換できました。