google.loader.ClientLocation.address.regionを使ってアクセスログに都道府県名を書き込む方法

Google AJAX APIgoogle.loader.ClientLocation.address.region を使えば、アクセスしたユーザーの都道府県が取得できる。これでユーザーの都道府県別アクセスを取得できるかと思ったら一筋縄ではいかなかった。

私のサイトではアクセスログを Postgres のテーブル上に保存しており、以下のような処理で都道府県名をログテーブルに格納している。

1).ユーザーがアクセス

2).動的にコンテンツを作成

3).コンテンツ作成と同時にアクセスログに情報を書き出す。ユーザーのIPと都道府県は以下の通り。
IP:環境変数のREMOTE_HOST
都道府県:空白

4).コンテンツの body に onload() を設定し、google.loader.ClientLocation.address.region を呼び出す。

5).ユーザーのIPと都道府県を取得して AJAX でサーバーに送信

6).アクセスログの該当IPを検索し、都道府県名が空白だったら都道府県名を UPDATE する。

実際の6).ではユーザーのアクセスごとに UPDATE するのは冗長なので、「IP=都道府県情報」を一定時間保存しておき、重複を排除した上で cron 経由で UPDATE 処理している。

IPと都道府県名の関連が時間の経過とともに変化する可能性もゼロではないので、「都道府県名が空白だったら」という条件を付け加えて、過去に格納した都道府県名は UPDATE していない。