お歳暮に年賀状、郵便番号検索をTextwellでカンタンに PostSearch
クリスマス色に染まる街。
HeartRailsの住所検索サービス
HeartRails Geo API | 郵便番号/住所/緯度経度データ変換サービス (ジオコーディング)
HeartRails Geo API | 郵便番号/住所/緯度経度データ変換サービスお問い合わせ「HeartRails Geo API」 は、郵便番号/住所/緯度経度データ等の地理情報を、XML、JS...
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>