お歳暮に年賀状、郵便番号検索をTextwellでカンタンに PostSearch

クリスマス色に染まる街。


HeartRailsの住所検索サービス

HeartRails Geo API | 郵便番号/住所/緯度経度データ変換サービス (ジオコーディング)
HeartRails Geo API | 郵便番号/住所/緯度経度データ変換サービスお問い合わせ「HeartRails Geo API」 は、郵便番号/住所/緯度経度データ等の地理情報を、XML、JS...

前に作った郵便番号検索アクションはデータベースサービスが休止したので、別のAPIに切り替えました。ShareHTMLでサムネ担当のHeartRailsを使用しています。ここのAPIはGet系なのでTextwellと連携しやすい。ほぼ即答で検索結果が返ってくる。

Import Textwell ActionPostSearch


キーワードを書くだけ

地名を正確に書く必要もありません。一部でいいし、ひらがなの読みでもいい。ただしAND検索はないので、検索語は一つだけにしてください。カーソル行に書かれた地名を検索します。該当する住所の郵便番号が並ぶ。郵便番号でも検索しますが、iPhoneの漢字変換でも番号検索はできるから、キーワード検索がメインということになります。
検索結果のリストをタップすると、本文に郵便番号と住所が貼り付きます。検索結果は郵便番号順にソートしています。ただ、漢字では出ないけど読みならヒットする地名とかあるので、上手くいかないときは検索語をひらがなにしてみてください。


まとめ

郵便番号が三桁から七桁になったとき、本当はもう住所を書く必要はなくなったんじゃないか。あまりに細かな分類にそういう疑問を感じます。郵便番号と氏名で届け先は特定できる。実際できる。でもそれなら、住所も書く意味はなんだろう? 二重チェックだろうか。番号の書き間違いを住所で修正するとか。あるいは機械の読み取りに番号が必要なだけで、実際の配達人は住所を見ながら配るのかもしれない。もし番号だけしかなかったら、検索アプリで調べるのかな。
というわけで、そんな配達人さんにも必須のアクションです。



スクリプト本体

ソースは以下の通り。T.request()でAPIを呼んでます。

<meta name=viewport content=initial-scale=1,user-scalable=no>
<meta name=format-detection content=telephone=no>
<style>
  div{
   color:black;
   background:lightgreen;
   font-size:medium;
   padding:10px;
  }
  hr{border:0;}
</style>
<title>wait...</title>
<section id=wine></section>
<script>

s=T.current.replace(/-/,"");
key=(s.match(/^[0-9]{7}/))? "searchByPostal&postal=":"suggest&matching=like&keyword=";
url="http://geoapi.heartrails.com/api/json?method="+key+encodeURIComponent(s);
T.request({
  url:url,
  callback:function(x){Disp(x.responseText);}
});

function Disp(x){
  T.title("PostSearch");
  data=JSON.parse(x).response;
  i=0;
  list=new Array();
  for(k in data.location){
    list[i++]="<div name='"+data.location[k].postal+"' onClick=Paste(\""+k+"\")>"+Address(k)+"</div>";
  };
  list.sort();
  s="<hr>"+list.join("<hr>\n");
  s+="<br><a href=http://geoapi.heartrails.com/api.html>HeartRails Geo API</a>";
  wine.innerHTML=s;
}

function Paste(i){
  T("replaceCurrent",{text:Address(i)});
}

function Address(i){
  d=data.location[i];
  return d.postal.substring(0,3)+"-"+d.postal.substring(3)+" "+d.prefecture+d.city+d.town;
}
</script>